public function getCountriesAndZones() { $coutnry_service = new CountryService(); $countries = $coutnry_service->getAll(['columns' => ['id', 'name'], 'sort_column' => 'name']); $zone_service = new ZoneService(); $zones = $zone_service->getAll(['columns' => ['id', 'name', 'country_id'], 'sort_column' => 'name'])->toArray(); return Response::json(['countries' => $countries, 'zones' => $zones]); }
public function calculateTaxes($price, $zone_id, $tax_class_id) { $taxes = []; //find tax class $tax_class = $this->tax_classes->find($tax_class_id); if ($tax_class == null) { return $taxes; } $zone_service = new ZoneService(); $zone = $zone_service->getById($zone_id, ['geoZones']); if ($zone == null) { return $taxes; } foreach ($this->tax_classes as $tax_class) { foreach ($tax_class->taxRules as $tax_rule) { $tax_rate = $this->tax_rates->find($tax_rule->tax_rate_id); if ($tax_rate == null) { continue; } if (!$zone->isinGeoZone($tax_rate->geo_zone_id)) { continue; } if (!array_key_exists($tax_rule->tax_rate_id, $taxes)) { $tax = new AppliedTax(); $tax->id = $tax_rate->id; $tax->name = $tax_rate->name; $tax->amount = $tax_rate->calculateTax($price); $taxes[$tax_rule->tax_rate_id] = $tax; } else { $tax = $taxes[$tax_rule->tax_rate_id]; $tax->amount += $tax_rate->calculateTax($price); } } } return array_values($taxes); }