diff --git a/Admin/Install/Admin.install.php b/Admin/Install/Admin.install.php index eb3e87a..9f802bd 100644 --- a/Admin/Install/Admin.install.php +++ b/Admin/Install/Admin.install.php @@ -23,4 +23,18 @@ return [ 'pattern' => '', 'module' => ApiController::NAME, ], + [ + 'type' => 'setting', + 'name' => SettingsEnum::BILLING_DOCUMENT_SPACER_COLOR, + 'content' => '15613766', + 'pattern' => '\d', + 'module' => ApiController::NAME, + ], + [ + 'type' => 'setting', + 'name' => SettingsEnum::BILLING_DOCUMENT_SPACER_TOLERANCE, + 'content' => '175', + 'pattern' => '\d', + 'module' => ApiController::NAME, + ], ]; diff --git a/Admin/Install/Navigation.install.json b/Admin/Install/Navigation.install.json index 61df907..e874722 100755 --- a/Admin/Install/Navigation.install.json +++ b/Admin/Install/Navigation.install.json @@ -337,5 +337,51 @@ ] } ] + }, + { + "id": 1005103001, + "pid": "/", + "type": 2, + "subtype": 1, + "name": "TaxCombinations", + "uri": "{/base}/finance/tax/combination/list?{?}", + "target": "self", + "icon": null, + "order": 2, + "from": "Billing", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1008101001, + "children": [ + { + "id": 1005103002, + "pid": "/finance/tax/combination", + "type": 3, + "subtype": 1, + "name": "List", + "uri": "{/base}/finance/tax/combination/list?{?}", + "target": "self", + "icon": null, + "order": 1, + "from": "Billing", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1005103001, + "children": [] + }, + { + "id": 1005103003, + "pid": "/finance/tax/combination", + "type": 3, + "subtype": 1, + "name": "Create", + "uri": "{/base}/finance/tax/combination/create?{?}", + "target": "self", + "icon": null, + "order": 5, + "from": "Billing", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1005103001, + "children": [] + } + ] } ] diff --git a/Admin/Install/Taxes/taxes.json b/Admin/Install/Taxes/taxes.json index 68e2d49..340a123 100644 --- a/Admin/Install/Taxes/taxes.json +++ b/Admin/Install/Taxes/taxes.json @@ -1,4 +1,11 @@ [ + { + "type": 1, + "item_code": "GENERAL", + "account_code": "EU_S", + "tax_code": "EU_S0", + "account": "8400" + }, { "type": 1, "item_code": "GENERAL", @@ -83,14 +90,14 @@ { "type": 1, "item_code": "GENERAL", - "account_code": "DE_0", + "account_code": "DE_S", "tax_code": "SBIZ_0", "account": "8195" }, { "type": 2, "item_code": "GENERAL", - "account_code": "DE_0", + "account_code": "DE_S", "tax_code": "SBIZ_0", "account": "3349" }, @@ -202,6 +209,12 @@ "account_code": "INT", "tax_code": "S0" }, + { + "type": 1, + "item_code": "SOFTWARE", + "account_code": "EU_S", + "tax_code": "EU_S0" + }, { "type": 1, "item_code": "SOFTWARE", @@ -285,14 +298,14 @@ { "type": 1, "item_code": "SOFTWARE", - "account_code": "DE_0", + "account_code": "DE_S", "tax_code": "SBIZ_0", "account": "8195" }, { "type": 2, "item_code": "SOFTWARE", - "account_code": "DE_0", + "account_code": "DE_S", "tax_code": "SBIZ_0", "account": "3349" }, @@ -404,6 +417,12 @@ "account_code": "INT", "tax_code": "S0" }, + { + "type": 1, + "item_code": "SERVICE", + "account_code": "EU_S", + "tax_code": "EU_S0" + }, { "type": 1, "item_code": "SERVICE", @@ -487,14 +506,14 @@ { "type": 1, "item_code": "SERVICE", - "account_code": "DE_0", + "account_code": "DE_S", "tax_code": "SBIZ_0", "account": "8195" }, { "type": 2, "item_code": "SERVICE", - "account_code": "DE_0", + "account_code": "DE_S", "tax_code": "SBIZ_0", "account": "3349" }, diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index c1fc2c2..a1723b2 100755 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -22,6 +22,7 @@ return [ [ 'dest' => '\Modules\Billing\Controller\ApiBillController:apiMediaRender', 'verb' => RouteVerb::GET, + 'csrf' => true, 'permission' => [ 'module' => BackendController::NAME, 'type' => PermissionType::CREATE, @@ -33,6 +34,7 @@ return [ [ 'dest' => '\Modules\Billing\Controller\ApiBillController:apiPreviewRender', 'verb' => RouteVerb::GET, + 'csrf' => true, 'permission' => [ 'module' => BackendController::NAME, 'type' => PermissionType::CREATE, @@ -44,6 +46,7 @@ return [ [ 'dest' => '\Modules\Billing\Controller\ApiPriceController:apiPriceCreate', 'verb' => RouteVerb::GET, + 'csrf' => true, 'permission' => [ 'module' => BackendController::NAME, 'type' => PermissionType::CREATE, @@ -55,6 +58,7 @@ return [ [ 'dest' => '\Modules\Billing\Controller\ApiPurchaseController:apiInvoiceParse', 'verb' => RouteVerb::SET, + 'csrf' => true, 'permission' => [ 'module' => BackendController::NAME, 'type' => PermissionType::MODIFY, diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 0211820..8b4e446 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -275,4 +275,27 @@ return [ ], ], ], + + '^.*/finance/tax/combination/list(\?.*$|$)' => [ + [ + 'dest' => '\Modules\Billing\Controller\BackendController:viewTaxCombinationList', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::TAX, + ], + ], + ], + '^.*/finance/tax/combination/create(\?.*$|$)' => [ + [ + 'dest' => '\Modules\Billing\Controller\BackendController:viewTaxCombinationCreate', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::TAX, + ], + ], + ], ]; diff --git a/Controller/ApiBillController.php b/Controller/ApiBillController.php index de05da4..7e0dceb 100755 --- a/Controller/ApiBillController.php +++ b/Controller/ApiBillController.php @@ -440,7 +440,7 @@ final class ApiBillController extends Controller // @todo use bill and shipping address instead of main address if available // https://github.com/Karaka-Management/oms-Billing/issues/45 - $bill->billTo = $request->getDataString('billto') ?? $account->account->name1; + $bill->billTo = $request->getDataString('billto') ?? $account->account->name1 . ' ' . $account->account->name2; $bill->billAddress = $request->getDataString('billaddress') ?? $account->mainAddress->address; $bill->billCity = $request->getDataString('billtocity') ?? $account->mainAddress->city; $bill->billZip = $request->getDataString('billtopostal') ?? $account->mainAddress->postal; @@ -481,7 +481,7 @@ final class ApiBillController extends Controller $settings = $this->app->appSettings->get(null, SettingsEnum::VALID_BILL_LANGUAGES, unit: $this->app->unitId, - module: 'Admin' + module: self::NAME ); if (empty($settings)) { @@ -489,7 +489,7 @@ final class ApiBillController extends Controller $settings = $this->app->appSettings->get(null, SettingsEnum::VALID_BILL_LANGUAGES, unit: null, - module: 'Admin' + module: self::NAME ); } diff --git a/Controller/ApiPurchaseController.php b/Controller/ApiPurchaseController.php index 5837e6c..56d83f1 100755 --- a/Controller/ApiPurchaseController.php +++ b/Controller/ApiPurchaseController.php @@ -111,7 +111,39 @@ final class ApiPurchaseController extends Controller $bills = []; $files = \array_merge($request->files, $request->getDataJson('media')); + + /** @var \Model\Setting[] $settings */ + $settings = $this->app->appSettings->get(null, + [SettingsEnum::BILLING_DOCUMENT_SPACER_COLOR, SettingsEnum::BILLING_DOCUMENT_SPACER_TOLERANCE], + unit: $this->app->unitId, + module: self::NAME + ); + + if (empty($settings)) { + /** @var \Model\Setting[] $settings */ + $settings = $this->app->appSettings->get(null, + [SettingsEnum::BILLING_DOCUMENT_SPACER_COLOR, SettingsEnum::BILLING_DOCUMENT_SPACER_TOLERANCE], + unit: null, + module: self::NAME + ); + } + foreach ($files as $file) { + // 1. convert to image pdftoppm + // 2. search for color pages by using averageColorRandom (tolerance < 175 = color match) + // 3. split pdf document if necessary + // sudo apt-get --yes install pdftk + // pdftk foo-bar.pdf cat 1-12 output foo.pdf + // pdftk foo-bar.pdf cat 13-end output bar.pdf + // alternatively, pdfseparate -f 1 -l 5 input.pdf output-page%d.pdf + // alternatively, pdfjam -o + // alternatively, pdfly cat in.pdf 2:4 -o out.pdf + // 4. add to documents array + } + + $documents = $files; + + foreach ($documents as $file) { // Create default bill $billRequest = new HttpRequest(); $billRequest->header->account = $request->header->account; diff --git a/Controller/BackendController.php b/Controller/BackendController.php index ebb24c9..b55afc1 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -29,6 +29,7 @@ use Modules\Billing\Models\SettingsEnum; use Modules\Billing\Models\ShippingTermL11nMapper; use Modules\Billing\Models\ShippingTermMapper; use Modules\Billing\Models\StockBillMapper; +use Modules\Billing\Models\Tax\TaxCombinationMapper; use phpOMS\Account\PermissionType; use phpOMS\Contract\RenderableInterface; use phpOMS\DataStorage\Database\Query\OrderType; @@ -725,4 +726,57 @@ final class BackendController extends Controller return $view; } + + /** + * Method which shows the sales dashboard + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Response can be rendered + * + * @since 1.0.0 + */ + public function viewTaxCombinationList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/Billing/Theme/Backend/finance-taxcombination-list'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1005103001, $request, $response); + + $view->data['taxcombination'] = TaxCombinationMapper::getAll() + ->with('clientCode') + ->with('supplierCode') + ->with('itemCode') + ->with('taxCode') + ->executeGetArray(); + + return $view; + } + + /** + * Method which shows the sales dashboard + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface Response can be rendered + * + * @since 1.0.0 + */ + public function viewTaxCombinationView(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/Billing/Theme/Backend/finance-taxcombination-view'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1005103001, $request, $response); + + $view->data['taxcombination'] = TaxCombinationMapper::getAll() + ->with('clientCode') + ->with('supplierCode') + ->with('itemCode') + ->executeGetArray(); + + return $view; + } } diff --git a/Models/BillElement.php b/Models/BillElement.php index 5ea3b20..8938dab 100755 --- a/Models/BillElement.php +++ b/Models/BillElement.php @@ -15,7 +15,6 @@ declare(strict_types=1); namespace Modules\Billing\Models; use Modules\Billing\Models\Tax\TaxCombination; -use Modules\Finance\Models\TaxCode; use Modules\ItemManagement\Models\Container; use Modules\ItemManagement\Models\Item; use Modules\ItemManagement\Models\NullItem; diff --git a/Models/BillMapper.php b/Models/BillMapper.php index 1a7295c..067dd19 100755 --- a/Models/BillMapper.php +++ b/Models/BillMapper.php @@ -18,7 +18,6 @@ use Modules\Admin\Models\AccountMapper; use Modules\Billing\Models\Attribute\BillAttributeMapper; use Modules\ClientManagement\Models\ClientMapper; use Modules\Editor\Models\EditorDocMapper; -use Modules\Media\Models\CollectionMapper; use Modules\Media\Models\MediaMapper; use Modules\SupplierManagement\Models\SupplierMapper; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; diff --git a/Models/PermissionCategory.php b/Models/PermissionCategory.php index d4d1c65..e0c41b1 100755 --- a/Models/PermissionCategory.php +++ b/Models/PermissionCategory.php @@ -45,4 +45,6 @@ abstract class PermissionCategory extends Enum public const SHIPPING_TERM = 10; public const BILL_LOG = 101; + + public const TAX = 201; } diff --git a/Models/SalesBillMapper.php b/Models/SalesBillMapper.php index 3042174..e68d7ce 100755 --- a/Models/SalesBillMapper.php +++ b/Models/SalesBillMapper.php @@ -16,7 +16,7 @@ namespace Modules\Billing\Models; use Modules\ClientManagement\Models\ClientMapper; use phpOMS\DataStorage\Database\Query\Builder; -use phpOMS\Localization\Defaults\CountryMapper; +use phpOMS\DataStorage\Database\Query\OrderType; use phpOMS\Stdlib\Base\FloatInt; /** @@ -257,13 +257,16 @@ final class SalesBillMapper extends BillMapper { $query = new Builder(self::$db); $query->selectAs(ClientMapper::TABLE . '.clientmgmt_client_id', 'client') - ->selectAs('SUM(' . BillElementMapper::TABLE . '.billing_bill_element_total_netsalesprice)', 'net_sales') + ->selectAs('SUM(' . BillElementMapper::TABLE . '.billing_bill_element_total_netsalesprice * billing_type_transfer_sign)', 'net_sales') ->from(ClientMapper::TABLE) ->leftJoin(self::TABLE) ->on(ClientMapper::TABLE . '.clientmgmt_client_id', '=', self::TABLE . '.billing_bill_client') ->leftJoin(BillElementMapper::TABLE) ->on(self::TABLE . '.billing_bill_id', '=', BillElementMapper::TABLE . '.billing_bill_element_bill') + ->leftJoin(BillTypeMapper::TABLE) + ->on(self::TABLE . '.billing_bill_type', '=', BillTypeMapper::TABLE . '.billing_type_id') ->where(BillElementMapper::TABLE . '.billing_bill_element_item', '=', $id) + ->andWhere(BillTypeMapper::TABLE . '.billing_type_accounting', '=', true) ->andWhere(self::TABLE . '.billing_bill_performance_date', '>=', $start) ->andWhere(self::TABLE . '.billing_bill_performance_date', '<=', $end) ->orderBy('net_sales', 'DESC') @@ -294,28 +297,27 @@ final class SalesBillMapper extends BillMapper * Placeholder * @todo Implement */ - public static function getItemBills(int $id, \DateTime $start, \DateTime $end) : array + public static function getItemBills(int $id, \DateTime $start, \DateTime $end, int $limit = 10000) : array { $query = self::reader() ->with('type') ->with('type/l11n') ->where('type/l11n/language', 'en') + ->where('createdAt', $start, '>=') + ->where('createdAt', $end, '<=') + ->sort('id', OrderType::DESC) + ->limit($limit) ->getQuery(); $query->leftJoin(BillElementMapper::TABLE, BillElementMapper::TABLE . '_d1') ->on(self::TABLE . '_d1.billing_bill_id', '=', BillElementMapper::TABLE . '_d1.billing_bill_element_bill') ->where(BillElementMapper::TABLE . '_d1.billing_bill_element_item', '=', $id); - /** @phpstan-ignore-next-line */ - if (!empty(self::CREATED_AT)) { - $query->orderBy(self::TABLE . '_d1.' . self::COLUMNS[self::CREATED_AT]['name'], 'DESC'); - } else { - $query->orderBy(self::TABLE . '_d1.' . self::COLUMNS[self::PRIMARYFIELD]['name'], 'DESC'); - } - return self::getAll() ->with('type') ->with('type/l11n') + ->sort('id', OrderType::DESC) + ->limit($limit) ->execute($query); } @@ -353,26 +355,43 @@ final class SalesBillMapper extends BillMapper * Placeholder * @todo Implement */ - public static function getItemCountrySales(int $id, \DateTime $start, \DateTime $end, int $limit = 10) : array + public static function getItemCountrySales(int $item, \DateTime $start, \DateTime $end, int $limit = 10) : array { - $query = new Builder(self::$db); - $result = $query->select(CountryMapper::TABLE . '.country_code2') - ->selectAs('SUM(billing_bill_element_total_netsalesprice)', 'net_sales') - ->from(self::TABLE) - ->leftJoin(BillElementMapper::TABLE) - ->on(self::TABLE . '.billing_bill_id', '=', BillElementMapper::TABLE . '.billing_bill_element_bill') - ->leftJoin(CountryMapper::TABLE) - ->on(self::TABLE . '.billing_bill_billCountry', '=', CountryMapper::TABLE . '.country_code2') - ->where(BillElementMapper::TABLE . '.billing_bill_element_item', '=', $id) - ->andWhere(self::TABLE . '.billing_bill_performance_date', '>=', $start) - ->andWhere(self::TABLE . '.billing_bill_performance_date', '<=', $end) - ->groupBy(CountryMapper::TABLE . '.country_code2') - ->orderBy('net_sales', 'DESC') - ->limit($limit) - ->execute() - ?->fetchAll(\PDO::FETCH_KEY_PAIR); + $sql = <<= '{$start->format('Y-m-d H:i:s')}' + AND billing_bill_performance_date <= '{$end->format('Y-m-d H:i:s')}' + GROUP BY + billing_bill_billCountry + LIMIT {$limit}; + SQL; - return $result ?? []; + $query = new Builder(self::$db); + $results = $query->raw($sql)->execute()?->fetchAll(\PDO::FETCH_ASSOC) ?? []; + + if ($results === false) { + return []; + } + + $hasData = false; + foreach ($results as $result) { + if ($result !== "0" || $result > 0) { + $hasData = true; + break; + } + } + + return $hasData ? $results : []; } /** @@ -390,14 +409,16 @@ final class SalesBillMapper extends BillMapper $sql = <<= '{$start->format('Y-m-d H:i:s')}' AND billing_bill_performance_date <= '{$end->format('Y-m-d H:i:s')}' GROUP BY billing_bill_element_item, year, month @@ -405,9 +426,23 @@ final class SalesBillMapper extends BillMapper SQL; $query = new Builder(self::$db); - $result = $query->raw($sql)->execute()?->fetchAll(\PDO::FETCH_ASSOC) ?? []; + $results = $query->raw($sql)->execute()?->fetchAll(\PDO::FETCH_ASSOC) ?? []; - return $result ?? []; + if ($results === false) { + return []; + } + + $hasData = false; + foreach ($results as $result) { + if ($result['net_sales'] !== "0" || $result['net_sales'] > 0 + || $result['net_costs'] !== "0" || $result['net_costs'] > 0 + ) { + $hasData = true; + break; + } + } + + return $hasData ? $results : []; } /** @@ -452,13 +487,15 @@ final class SalesBillMapper extends BillMapper { $sql = <<= '{$start->format('Y-m-d H:i:s')}' AND billing_bill_performance_date <= '{$end->format('Y-m-d H:i:s')}' GROUP BY year, month @@ -493,6 +530,55 @@ final class SalesBillMapper extends BillMapper return new FloatInt((int) ($result[0]['net_sales'] ?? 0)); } + /** + * Placeholder + * @todo Implement + */ + public static function getClientAttributeNetSales( + int $client, + string $attribute, + string $language, + \DateTime $start, + \DateTime $end + ) : array + { + $sql = <<= '{$start->format('Y-m-d H:i:s')}' + AND billing_bill_performance_date <= '{$end->format('Y-m-d H:i:s')}' + AND itemmgmt_attr_type_name = '{$attribute}' + GROUP BY + itemmgmt_attr_value_l11n_title; + SQL; + + $query = new Builder(self::$db); + $result = $query->raw($sql)->execute()?->fetchAll(\PDO::FETCH_ASSOC) ?? []; + + return $result; + } + /** * Placeholder * @todo Implement diff --git a/Models/SettingsEnum.php b/Models/SettingsEnum.php index e087a8b..d846c0a 100755 --- a/Models/SettingsEnum.php +++ b/Models/SettingsEnum.php @@ -37,4 +37,7 @@ abstract class SettingsEnum extends Enum public const BILLING_CUSTOMER_EMAIL_TEMPLATE = '1005100004'; // Email template for customer billing public const BILLING_SUPPLIER_EMAIL_TEMPLATE = '1005100005'; // Email template for supplier billing + + public const BILLING_DOCUMENT_SPACER_COLOR = '1005100101'; + public const BILLING_DOCUMENT_SPACER_TOLERANCE = '1005100102'; } diff --git a/Theme/Backend/Lang/de.lang.php b/Theme/Backend/Lang/de.lang.php index 1393a2f..0df065f 100755 --- a/Theme/Backend/Lang/de.lang.php +++ b/Theme/Backend/Lang/de.lang.php @@ -81,6 +81,9 @@ return ['Billing' => [ 'Upload' => 'Hochladen', 'Zip' => 'Zip', 'Files' => 'Files', + 'TaxCode' => 'Steuerkz.', + 'PL' => 'GuV', + 'TaxCombinations' => 'Steuerkomb.', 'PaymentTerms' => 'Zahlungsbedingungen', 'ShippingTerms' => 'Lieferbedingungen', 'PaymentTerm' => 'Zahlungsbedingung', diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php index 40d00c6..9d8cf50 100755 --- a/Theme/Backend/Lang/en.lang.php +++ b/Theme/Backend/Lang/en.lang.php @@ -81,6 +81,9 @@ return ['Billing' => [ 'Upload' => 'Upload', 'Zip' => 'Zip', 'Files' => 'Files', + 'TaxCode' => 'Tax Code', + 'PL' => 'PL', + 'TaxCombinations' => 'Tax Combinations', 'PaymentTerms' => 'Payment Terms', 'ShippingTerms' => 'Shipping Terms', 'PaymentTerm' => 'Payment Term', diff --git a/Theme/Backend/finance-taxcombination-list.tpl.php b/Theme/Backend/finance-taxcombination-list.tpl.php new file mode 100644 index 0000000..1aa6472 --- /dev/null +++ b/Theme/Backend/finance-taxcombination-list.tpl.php @@ -0,0 +1,72 @@ +data['taxcombination']; + +$previous = empty($taxcombination) ? '{/base}/finance/tax/combination/list' : '{/base}/finance/tax/combination/list?{?}&id=' . \reset($taxcombination)->id . '&ptype=p'; +$next = empty($taxcombination) ? '{/base}/finance/tax/combination/list' : '{/base}/finance/tax/combination/list?{?}&id=' . \end($taxcombination)->id . '&ptype=n'; + +echo $this->data['nav']->render(); ?> +
+
+
+
getHtml('TaxCombinations'); ?>download
+ + + + + $value) : ++$count; + $url = UriFactory::build('{/base}/finance/tax/combination/view?{?}&id=' . $value->id); ?> + +
getHtml('ID', '0', '0'); ?> + getHtml('Client'); ?> + getHtml('Supplier'); ?> + getHtml('Item'); ?> + getHtml('TaxCode'); ?> + getHtml('Tax'); ?> + getHtml('PL'); ?> +
+ id; ?> + + printHtml($value->clientCode->getValue()); ?> + + printHtml($value->supplierCode->getValue()); ?> + + printHtml($value->itemCode->getValue()); ?> + + printHtml($value->taxCode->abbr); ?> + + taxCode->percentageInvoice / 10000; ?> % + + printHtml($value->account); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+ +
+
diff --git a/Theme/Backend/payment-view.tpl.php b/Theme/Backend/payment-view.tpl.php index 59f591d..072775f 100644 --- a/Theme/Backend/payment-view.tpl.php +++ b/Theme/Backend/payment-view.tpl.php @@ -22,7 +22,7 @@ echo $this->data['nav']->render(); ?>
-
@@ -30,7 +30,7 @@ echo $this->data['nav']->render(); ?>
- +
@@ -47,7 +47,7 @@ echo $this->data['nav']->render(); ?> data['l11nView']->render( $this->data['l11nValues'], [], - '{/api}bill/payment/l11n' + '{/api}bill/payment/l11n?csrf={$CSRF}' ); ?>
\ No newline at end of file diff --git a/Theme/Backend/purchase-bill.tpl.php b/Theme/Backend/purchase-bill.tpl.php index e912d1f..a03c8dc 100755 --- a/Theme/Backend/purchase-bill.tpl.php +++ b/Theme/Backend/purchase-bill.tpl.php @@ -438,7 +438,7 @@ echo $this->data['nav']->render(); ?>
@@ -453,7 +453,7 @@ echo $this->data['nav']->render(); ?>
diff --git a/Theme/Backend/shipping-view.tpl.php b/Theme/Backend/shipping-view.tpl.php index 796d49d..6f7a540 100644 --- a/Theme/Backend/shipping-view.tpl.php +++ b/Theme/Backend/shipping-view.tpl.php @@ -22,7 +22,7 @@ echo $this->data['nav']->render(); ?>
- @@ -30,7 +30,7 @@ echo $this->data['nav']->render(); ?>
- +
@@ -47,7 +47,7 @@ echo $this->data['nav']->render(); ?> data['l11nView']->render( $this->data['l11nValues'], [], - '{/api}bill/shipping/l11n' + '{/api}bill/shipping/l11n?csrf={$CSRF}' ); ?>
\ No newline at end of file