validateTaxCombinationCreate($request))) { $response->set('tax_combination_create', new FormValidation($val)); $response->header->status = RequestStatusCode::R_400; return; } $tax = $this->createTaxCombinationFromRequest($request); $this->createModel($request->header->account, $tax, TaxCombinationMapper::class, 'tax_combination', $request->getOrigin()); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Tax combination', 'Tax combination successfully created', $tax); } /** * Method to create item attribute from request. * * @param RequestAbstract $request Request * * @return TaxCombination * * @since 1.0.0 */ private function createTaxCombinationFromRequest(RequestAbstract $request) : TaxCombination { $tax = new TaxCombination(); $tax->taxType = (int) $request->getData('tax_type') ?? 1; $tax->taxCode = (string) $request->getData('tax_code'); $tax->itemCode = new NullItemAttributeValue((int) $request->getData('item_code')); if ($tax->taxType === 1) { $tax->clientCode = new NullClientAttributeValue((int) $request->getData('account_code')); } else { $tax->supplierCode = new NullSupplierAttributeValue((int) $request->getData('account_code')); } return $tax; } /** * Validate item attribute create request * * @param RequestAbstract $request Request * * @return array * * @since 1.0.0 */ private function validateTaxCombinationCreate(RequestAbstract $request) : array { $val = []; if (($val['tax_type'] = empty($request->getData('tax_type'))) || ($val['tax_code'] = empty($request->getData('tax_code'))) || ($val['item_code'] = empty($request->getData('item_code'))) || ($val['account_code'] = empty($request->getData('account_code'))) ) { return $val; } return []; } public function getClientTaxCode(Client $client, Address $taxOfficeAddress) : ClientAttributeValue { $codes = ClientAttributeTypeMapper::get() ->with('defaults') ->where('name', 'sales_tax_code') ->execute(); $taxCode = new NullClientAttributeValue(); if ($taxOfficeAddress->getCountry() === $client->mainAddress->getCountry()) { $taxCode = $codes->getDefaultByValue($client->mainAddress->getCountry()); } elseif (\in_array($taxOfficeAddress->getCountry(), ISO3166CharEnum::getRegion('eu')) && \in_array($client->mainAddress->getCountry(), ISO3166CharEnum::getRegion('eu')) ) { if (!empty($client->getAttribute('vat_id')?->value->getValue())) { // Is EU company $taxCode = $codes->getDefaultByValue('EU'); } else { // Is EU private customer $taxCode = $codes->getDefaultByValue($client->mainAddress->getCountry()); } } elseif (\in_array($taxOfficeAddress->getCountry(), ISO3166CharEnum::getRegion('eu'))) { // None EU company but we are EU company $taxCode = $codes->getDefaultByValue('INT'); } else { // None EU company and we are also none EU company $taxCode = $codes->getDefaultByValue('INT'); } return $taxCode; } }