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]);
 }
예제 #2
0
 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);
 }