diff --git a/app/Models/Account.php b/app/Models/Account.php index 68f84ccf69da..5231fee40465 100644 --- a/app/Models/Account.php +++ b/app/Models/Account.php @@ -1707,8 +1707,8 @@ class Account extends Eloquent */ public function showCustomField($field, $entity = false) { - if ($this->hasFeature(FEATURE_INVOICE_SETTINGS)) { - return $this->$field ? true : false; + if ($this->hasFeature(FEATURE_INVOICE_SETTINGS) && $this->$field) { + return true; } if (!$entity) { diff --git a/app/Models/Traits/PresentsInvoice.php b/app/Models/Traits/PresentsInvoice.php index 493a4aecdbc5..b76950c44366 100644 --- a/app/Models/Traits/PresentsInvoice.php +++ b/app/Models/Traits/PresentsInvoice.php @@ -203,6 +203,7 @@ trait PresentsInvoice 'website', 'phone', 'blank', + 'adjustment', ]; foreach ($fields as $field) { diff --git a/app/Ninja/Import/BaseTransformer.php b/app/Ninja/Import/BaseTransformer.php index 9c0c53ace105..6f91fe5336a3 100644 --- a/app/Ninja/Import/BaseTransformer.php +++ b/app/Ninja/Import/BaseTransformer.php @@ -143,7 +143,6 @@ class BaseTransformer extends TransformerAbstract */ protected function getInvoiceNumber($number) { - $number = strtolower($number); return str_pad($number, 4, '0', STR_PAD_LEFT); } diff --git a/app/Ninja/Import/Zoho/InvoiceTransformer.php b/app/Ninja/Import/Zoho/InvoiceTransformer.php index 9db0bc4ceb1a..268c675a9826 100644 --- a/app/Ninja/Import/Zoho/InvoiceTransformer.php +++ b/app/Ninja/Import/Zoho/InvoiceTransformer.php @@ -23,22 +23,45 @@ class InvoiceTransformer extends BaseTransformer } return new Item($data, function ($data) { - return [ + $invoice = [ 'client_id' => $this->getClientId($data->customer_name), 'invoice_number' => $this->getInvoiceNumber($data->invoice_number), 'paid' => (float) $data->total - (float) $data->balance, 'po_number' => $this->getString($data, 'purchaseorder'), 'due_date_sql' => $data->due_date, 'invoice_date_sql' => $data->invoice_date, + 'custom_value1' => (float) $data->latefee_amount + (float) $data->adjustment + (float) $data->shipping_charge, + 'custom_taxes1' => false, 'invoice_items' => [ [ - 'product_key' => '', + 'product_key' => $this->getString($data, 'item_name'), 'notes' => $this->getString($data, 'item_desc'), - 'cost' => (float) $data->total, - 'qty' => 1, + 'cost' => (float) $data->item_price, + 'qty' => (float) $data->quantity, + 'tax_name1' => (float) $data->item_tax1 ? trans('texts.tax') : '', + 'tax_rate1' => (float) $data->item_tax1, + 'tax_name2' => (float) $data->item_tax2 ? trans('texts.tax') : '', + 'tax_rate2' => (float) $data->item_tax2, ] ], ]; + + // we don't support line item discounts so we need to include + // the discount as a separate line item + if ((float) $data->discount_amount) { + $invoice['invoice_items'][] = [ + 'product_key' => '', + 'notes' => trans('texts.discount'), + 'cost' => (float) $data->discount_amount * -1, + 'qty' => 1, + 'tax_name1' => (float) $data->item_tax1 ? trans('texts.tax') : '', + 'tax_rate1' => (float) $data->item_tax1, + 'tax_name2' => (float) $data->item_tax2 ? trans('texts.tax') : '', + 'tax_rate2' => (float) $data->item_tax2, + ]; + } + + return $invoice; }); } -} \ No newline at end of file +} diff --git a/public/built.js b/public/built.js index 0be2e1d1c8f3..f7dc08029d3b 100644 --- a/public/built.js +++ b/public/built.js @@ -27,5 +27,5 @@ void(t._d=new Date(NaN));for(o=0;owindow.innerHeight&&(b.previousBodyPadding=document.body.style.paddingRight,document.body.style.paddingRight=H()+"px")}function e(){null!==b.previousBodyPadding&&(document.body.style.paddingRight=b.previousBodyPadding,b.previousBodyPadding=null)}function n(){var t=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;if(t&&!O(document.body,l.iosfix)){var e=document.body.scrollTop;document.body.style.top=e*-1+"px",L(document.body,l.iosfix)}}function i(){if(O(document.body,l.iosfix)){var t=parseInt(document.body.style.top,10);k(document.body,l.iosfix),document.body.scrollTop=t*-1}}function o(){if(void 0===arguments[0])return!1;var t=m({},U);switch(typeof arguments[0]){case"string":t.title=arguments[0],t.text=arguments[1]||"",t.type=arguments[2]||"";break;case"object":m(t,arguments[0]),t.extraParams=arguments[0].extraParams,"email"===t.input&&null===t.inputValidator&&(t.inputValidator=function(t){return new Promise(function(e,n){var i=/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;i.test(t)?e():n("Invalid email address")})});break;default:return!1}V(t);var e=y();return new Promise(function(n,i){function o(e,n){for(var i=S(t.focusCancel),o=0;o