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

@ -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,8 +67,7 @@ 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');
@ -79,8 +78,8 @@ class Rate extends RateAdapter
]); ]);
$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,13 +118,12 @@ 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>' .
@ -135,8 +133,7 @@ class Rate extends RateAdapter
'</Package>'; '</Package>';
} }
$this->data = $this->data = '<RateV4Request USERID="' . $this->username . '">' .
'<RateV4Request USERID="' . $this->username . '">' .
'<Revision/>' . '<Revision/>' .
$packages . $packages .
'</RateV4Request>'; '</RateV4Request>';
@ -144,8 +141,7 @@ class Rate extends RateAdapter
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);
@ -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