Add pounds/ounces

master
Skylar Ittner 4 years ago
parent 9a9fca51d5
commit ef5bbc91dd

1
.gitignore vendored

@ -5,3 +5,4 @@ coverage_report
!.idea/runConfigurations/ !.idea/runConfigurations/
.DS_Store .DS_Store
live_phpunit.sh live_phpunit.sh
/nbproject/private/

@ -1,6 +1,7 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2014 Jamie Isaacs <pdt256@gmail.com> Copyright (c) 2014 Jamie Isaacs <pdt256@gmail.com>
Copyright (c) 2020 Netsyms Technologies <opensource@netsyms.com>
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

@ -15,19 +15,6 @@ Multiple packages can be added to get additional rates.
All code (including tests) conform to the PSR-2 coding standards. All code (including tests) conform to the PSR-2 coding standards.
The namespace and autoloader are using the PSR-4 standard. The namespace and autoloader are using the PSR-4 standard.
All pull requests are processed by Travis CI to conform to PSR-2 and to verify all unit tests pass.
## Installation
Add the following lines to your ``composer.json`` file.
```JSON
{
"require": {
"pdt256/shipping": "1.0.*"
}
}
```
## Example ## Example
@ -56,7 +43,7 @@ $shipment->addPackage($package);
## UPS (Stub) Example ## UPS (Stub) Example
Below is an example request to get shipping rates from the UPS API. Below is an example request to get shipping rates from the UPS API.
Notice: The below line uses a stub class to fake a response from the UPS API. Notice: The below line uses a stub class to fake a response from the UPS API.
You can immediately use this method in your code until you get an account with UPS. You can immediately use this method in your code until you get an account with UPS.
@ -93,7 +80,7 @@ Output array sorted by cost: (in cents)
```php ```php
array ( array (
0 => 0 =>
pdt256\Shipping\Quote::__set_state(array( pdt256\Shipping\Quote::__set_state(array(
'code' => '03', 'code' => '03',
'name' => 'UPS Ground', 'name' => 'UPS Ground',
@ -102,7 +89,7 @@ array (
'deliveryEstimate' => NULL, 'deliveryEstimate' => NULL,
'carrier' => 'ups', 'carrier' => 'ups',
)), )),
1 => 1 =>
pdt256\Shipping\Quote::__set_state(array( pdt256\Shipping\Quote::__set_state(array(
'code' => '02', 'code' => '02',
'name' => 'UPS 2nd Day Air', 'name' => 'UPS 2nd Day Air',
@ -111,7 +98,7 @@ array (
'deliveryEstimate' => NULL, 'deliveryEstimate' => NULL,
'carrier' => 'ups', 'carrier' => 'ups',
)), )),
2 => 2 =>
pdt256\Shipping\Quote::__set_state(array( pdt256\Shipping\Quote::__set_state(array(
'code' => '13', 'code' => '13',
'name' => 'UPS Next Day Air Saver', 'name' => 'UPS Next Day Air Saver',
@ -120,7 +107,7 @@ array (
'deliveryEstimate' => NULL, 'deliveryEstimate' => NULL,
'carrier' => 'ups', 'carrier' => 'ups',
)), )),
3 => 3 =>
pdt256\Shipping\Quote::__set_state(array( pdt256\Shipping\Quote::__set_state(array(
'code' => '01', 'code' => '01',
'name' => 'UPS Next Day Air', 'name' => 'UPS Next Day Air',
@ -157,7 +144,7 @@ Output array sorted by cost: (in cents)
```php ```php
array ( array (
0 => 0 =>
pdt256\Shipping\Quote::__set_state(array( pdt256\Shipping\Quote::__set_state(array(
'code' => '4', 'code' => '4',
'name' => 'Parcel Post', 'name' => 'Parcel Post',
@ -166,7 +153,7 @@ array (
'deliveryEstimate' => NULL, 'deliveryEstimate' => NULL,
'carrier' => 'usps', 'carrier' => 'usps',
)), )),
1 => 1 =>
pdt256\Shipping\Quote::__set_state(array( pdt256\Shipping\Quote::__set_state(array(
'code' => '1', 'code' => '1',
'name' => 'Priority Mail', 'name' => 'Priority Mail',
@ -209,7 +196,7 @@ Output array sorted by cost: (in cents)
```php ```php
array ( array (
0 => 0 =>
pdt256\Shipping\Quote::__set_state(array( pdt256\Shipping\Quote::__set_state(array(
'code' => 'GROUND_HOME_DELIVERY', 'code' => 'GROUND_HOME_DELIVERY',
'name' => 'Ground Home Delivery', 'name' => 'Ground Home Delivery',
@ -218,13 +205,13 @@ array (
'deliveryEstimate' => NULL, 'deliveryEstimate' => NULL,
'carrier' => 'fedex', 'carrier' => 'fedex',
)), )),
1 => 1 =>
pdt256\Shipping\Quote::__set_state(array( pdt256\Shipping\Quote::__set_state(array(
'code' => 'FEDEX_EXPRESS_SAVER', 'code' => 'FEDEX_EXPRESS_SAVER',
'name' => 'Fedex Express Saver', 'name' => 'Fedex Express Saver',
'cost' => 2989, 'cost' => 2989,
'transitTime' => NULL, 'transitTime' => NULL,
'deliveryEstimate' => 'deliveryEstimate' =>
DateTime::__set_state(array( DateTime::__set_state(array(
'date' => '2014-09-30 20:00:00', 'date' => '2014-09-30 20:00:00',
'timezone_type' => 3, 'timezone_type' => 3,
@ -232,13 +219,13 @@ array (
)), )),
'carrier' => 'fedex', 'carrier' => 'fedex',
)), )),
2 => 2 =>
pdt256\Shipping\Quote::__set_state(array( pdt256\Shipping\Quote::__set_state(array(
'code' => 'FEDEX_2_DAY', 'code' => 'FEDEX_2_DAY',
'name' => 'Fedex 2 Day', 'name' => 'Fedex 2 Day',
'cost' => 4072, 'cost' => 4072,
'transitTime' => NULL, 'transitTime' => NULL,
'deliveryEstimate' => 'deliveryEstimate' =>
DateTime::__set_state(array( DateTime::__set_state(array(
'date' => '2014-09-29 20:00:00', 'date' => '2014-09-29 20:00:00',
'timezone_type' => 3, 'timezone_type' => 3,
@ -246,13 +233,13 @@ array (
)), )),
'carrier' => 'fedex', 'carrier' => 'fedex',
)), )),
3 => 3 =>
pdt256\Shipping\Quote::__set_state(array( pdt256\Shipping\Quote::__set_state(array(
'code' => 'STANDARD_OVERNIGHT', 'code' => 'STANDARD_OVERNIGHT',
'name' => 'Standard Overnight', 'name' => 'Standard Overnight',
'cost' => 7834, 'cost' => 7834,
'transitTime' => NULL, 'transitTime' => NULL,
'deliveryEstimate' => 'deliveryEstimate' =>
DateTime::__set_state(array( DateTime::__set_state(array(
'date' => '2014-09-26 20:00:00', 'date' => '2014-09-26 20:00:00',
'timezone_type' => 3, 'timezone_type' => 3,

@ -1,5 +1,5 @@
{ {
"name": "pdt256/shipping", "name": "netsyms/shippingrates",
"description": "Shipping Rate API", "description": "Shipping Rate API",
"license": "MIT", "license": "MIT",
"keywords": ["ship", "ups", "usps", "fedex"], "keywords": ["ship", "ups", "usps", "fedex"],
@ -7,7 +7,11 @@
{ {
"name": "Jamie Isaacs", "name": "Jamie Isaacs",
"email": "pdt256@gmail.com" "email": "pdt256@gmail.com"
} },
{
"name": "Netsyms Technologies",
"email": "opensource@netsyms.com"
},
], ],
"extra": { "extra": {
"branch-alias": { "branch-alias": {

@ -0,0 +1,22 @@
auxiliary.org-netbeans-modules-php-phpunit.bootstrap_2e_create_2e_tests=false
auxiliary.org-netbeans-modules-php-phpunit.bootstrap_2e_enabled=false
auxiliary.org-netbeans-modules-php-phpunit.bootstrap_2e_path=
auxiliary.org-netbeans-modules-php-phpunit.configuration_2e_enabled=false
auxiliary.org-netbeans-modules-php-phpunit.configuration_2e_path=
auxiliary.org-netbeans-modules-php-phpunit.customSuite_2e_enabled=false
auxiliary.org-netbeans-modules-php-phpunit.customSuite_2e_path=
auxiliary.org-netbeans-modules-php-phpunit.phpUnit_2e_enabled=false
auxiliary.org-netbeans-modules-php-phpunit.phpUnit_2e_path=
auxiliary.org-netbeans-modules-php-phpunit.test_2e_groups_2e_ask=false
auxiliary.org-netbeans-modules-php-phpunit.test_2e_run_2e_all=false
auxiliary.org-netbeans-modules-php-phpunit.test_2e_run_2e_phpunit_2e_only=false
file.reference.ShippingRates-tests=tests
include.path=${php.global.include.path}
php.version=PHP_73
source.encoding=UTF-8
src.dir=src
tags.asp=false
tags.short=false
test.src.dir=${file.reference.ShippingRates-tests}
testing.providers=PhpUnit
web.root=.

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.php.project</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/php-project/1">
<name>ShippingRates</name>
</data>
</configuration>
</project>

@ -1,35 +1,63 @@
<?php namespace pdt256\Shipping; <?php
class Package namespace pdt256\Shipping;
{
protected $weight; class Package {
protected $pounds;
protected $ounces;
protected $width; protected $width;
protected $length; protected $length;
protected $height; protected $height;
public function getWeight() {
$weight = 0;
if (!empty($this->getPounds())) {
$weight += $this->getPounds();
}
if (!empty($this->getOunces())) {
$weight += ($this->getOunces() / 16);
}
if ($weight == 0) {
return null;
}
return $weight;
}
public function getPounds() {
return $this->pounds ?? 0;
}
public function getOunces() {
return $this->ounces ?? 0;
}
public function setWeight($pounds) {
return $this->setPounds($pounds)->setOunces(0);
}
/** /**
* @return mixed * @param mixed $pounds
* @return $this
*/ */
public function getWeight() public function setPounds($pounds) {
{ $this->pounds = $pounds;
return $this->weight; return $this;
} }
/** /**
* @param mixed $weight * @param mixed $ounces
* @return $this * @return $this
*/ */
public function setWeight($weight) public function setOunces($ounces) {
{ $this->ounces = $ounces;
$this->weight = $weight;
return $this; return $this;
} }
/** /**
* @return mixed * @return mixed
*/ */
public function getWidth() public function getWidth() {
{
return $this->width; return $this->width;
} }
@ -37,8 +65,7 @@ class Package
* @param mixed $width * @param mixed $width
* @return $this * @return $this
*/ */
public function setWidth($width) public function setWidth($width) {
{
$this->width = $width; $this->width = $width;
return $this; return $this;
} }
@ -46,8 +73,7 @@ class Package
/** /**
* @return mixed * @return mixed
*/ */
public function getLength() public function getLength() {
{
return $this->length; return $this->length;
} }
@ -55,8 +81,7 @@ class Package
* @param mixed $length * @param mixed $length
* @return $this * @return $this
*/ */
public function setLength($length) public function setLength($length) {
{
$this->length = $length; $this->length = $length;
return $this; return $this;
} }
@ -64,8 +89,7 @@ class Package
/** /**
* @return mixed * @return mixed
*/ */
public function getHeight() public function getHeight() {
{
return $this->height; return $this->height;
} }
@ -73,9 +97,9 @@ class Package
* @param mixed $height * @param mixed $height
* @return $this * @return $this
*/ */
public function setHeight($height) public function setHeight($height) {
{
$this->height = $height; $this->height = $height;
return $this; return $this;
} }
} }

@ -1,4 +1,5 @@
<?php <?php
namespace pdt256\Shipping\USPS; namespace pdt256\Shipping\USPS;
use pdt256\Shipping; use pdt256\Shipping;
@ -10,18 +11,17 @@ use pdt256\Shipping\Validator;
use DOMDocument; use DOMDocument;
use Exception; use Exception;
class Rate extends RateAdapter class Rate extends RateAdapter {
{
private $urlDev = 'http://production.shippingapis.com/ShippingAPI.dll'; private $urlDev = 'http://production.shippingapis.com/ShippingAPI.dll';
private $urlProd = 'http://production.shippingapis.com/ShippingAPI.dll'; private $urlProd = 'http://production.shippingapis.com/ShippingAPI.dll';
private $username; private $username;
private $password; private $password;
/** /**
* Codes of appropriate shipping types. Default value is specified in __construct. * Codes of appropriate shipping types. Default value is specified in __construct.
*/ */
public $approvedCodes; public $approvedCodes;
private $shipping_codes = [ private $shipping_codes = [
'domestic' => [ 'domestic' => [
'00' => 'First-Class Mail Parcel', '00' => 'First-Class Mail Parcel',
@ -67,20 +67,19 @@ class Rate extends RateAdapter
], ],
]; ];
public function __construct($options = []) public function __construct($options = []) {
{
parent::__construct($options); parent::__construct($options);
$this->username = Arr::get($options, 'username'); $this->username = Arr::get($options, 'username');
$this->password = Arr::get($options, 'password'); $this->password = Arr::get($options, 'password');
$this->approvedCodes = Arr::get($options, 'approvedCodes', [ $this->approvedCodes = Arr::get($options, 'approvedCodes', [
'1', '1',
'4', '4',
]); ]);
$this->setRequestAdapter(Arr::get($options, 'requestAdapter', new RateRequest\Get())); $this->setRequestAdapter(Arr::get($options, 'requestAdapter', new RateRequest\Get()));
} }
protected function validate()
{ protected function validate() {
$this->validatePackages(); $this->validatePackages();
Validator::checkIfNull($this->username, 'username'); Validator::checkIfNull($this->username, 'username');
Validator::checkIfNull($this->password, 'password'); Validator::checkIfNull($this->password, 'password');
@ -89,8 +88,8 @@ class Rate extends RateAdapter
return $this; return $this;
} }
protected function prepare()
{ protected function prepare() {
$packages = ''; $packages = '';
$sequence_number = 0; $sequence_number = 0;
foreach ($this->shipment->getPackages() as $p) { foreach ($this->shipment->getPackages() as $p) {
@ -119,33 +118,30 @@ class Rate extends RateAdapter
$container = 'VARIABLE'; $container = 'VARIABLE';
} }
$packages .= $packages .= '<Package ID="' . $sequence_number . '">' .
'<Package ID="' . $sequence_number . '">' .
'<Service>ALL</Service>' . '<Service>ALL</Service>' .
'<ZipOrigination>' . $this->shipment->getFromPostalCode() . '</ZipOrigination>' . '<ZipOrigination>' . $this->shipment->getFromPostalCode() . '</ZipOrigination>' .
'<ZipDestination>' . $this->shipment->getToPostalCode() . '</ZipDestination>' . '<ZipDestination>' . $this->shipment->getToPostalCode() . '</ZipDestination>' .
'<Pounds>' . $p->getWeight() . '</Pounds>' . '<Pounds>' . $p->getPounds() . '</Pounds>' .
'<Ounces>0</Ounces>' . '<Ounces>' . $p->getOunces() . '</Ounces>' .
'<Container>' . $container . '</Container>' . '<Container>' . $container . '</Container>' .
'<Size>' . $size . '</Size>' . '<Size>' . $size . '</Size>' .
'<Width>' . $p->getWidth() . '</Width>' . '<Width>' . $p->getWidth() . '</Width>' .
'<Length>' . $p->getLength() . '</Length>' . '<Length>' . $p->getLength() . '</Length>' .
'<Height>' . $p->getHeight() . '</Height>' . '<Height>' . $p->getHeight() . '</Height>' .
'<Machinable>' . 'False' . '</Machinable>' . '<Machinable>' . 'False' . '</Machinable>' .
'</Package>'; '</Package>';
} }
$this->data = $this->data = '<RateV4Request USERID="' . $this->username . '">' .
'<RateV4Request USERID="' . $this->username . '">' .
'<Revision/>' . '<Revision/>' .
$packages . $packages .
'</RateV4Request>'; '</RateV4Request>';
return $this; return $this;
} }
protected function execute() protected function execute() {
{
if ($this->isProduction) { if ($this->isProduction) {
$url = $this->urlProd; $url = $this->urlProd;
} else { } else {
@ -159,8 +155,7 @@ class Rate extends RateAdapter
return $this; return $this;
} }
protected function process() protected function process() {
{
try { try {
$dom = new DOMDocument('1.0', 'UTF-8'); $dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadXml($this->response); $dom->loadXml($this->response);
@ -195,10 +190,10 @@ class Rate extends RateAdapter
$quote = new Quote; $quote = new Quote;
$quote $quote
->setCarrier('usps') ->setCarrier('usps')
->setCode($code) ->setCode($code)
->setName($name) ->setName($name)
->setCost((int) $cost); ->setCost((int) $cost);
$rates[$quote->getCode()] = $quote; $rates[$quote->getCode()] = $quote;
} }
@ -207,4 +202,5 @@ class Rate extends RateAdapter
return $this; return $this;
} }
} }

@ -14,8 +14,16 @@ class PackageTest extends TestCase
$package->setHeight(8); $package->setHeight(8);
$this->assertEquals(5, $package->getWeight()); $this->assertEquals(5, $package->getWeight());
$this->assertEquals(5, $package->getPounds());
$this->assertEquals(0, $package->getOunces());
$this->assertEquals(6, $package->getWidth()); $this->assertEquals(6, $package->getWidth());
$this->assertEquals(7, $package->getLength()); $this->assertEquals(7, $package->getLength());
$this->assertEquals(8, $package->getHeight()); $this->assertEquals(8, $package->getHeight());
$package->setPounds(3);
$package->setOunces(4);
$this->assertEquals(3, $package->getPounds());
$this->assertEquals(4, $package->getOunces());
$this->assertEquals(3.25, $package->getWeight());
} }
} }

Loading…
Cancel
Save