private function _setLocation(Product &$product, $param) { if (isset($param->CallbackParameter->locations) && count($locations = $param->CallbackParameter->locations) > 0) { //delete all price first $deleteIds = array(); foreach ($locations as $location) { if (trim($location->active) === '0' && isset($location->id)) { $deleteIds[] = trim($location->id); } } if (count($deleteIds) > 0) { PreferredLocation::updateByCriteria('active = 0', 'id in (' . str_repeat('?', count($deleteIds)) . ')', $deleteIds); } //update or create new foreach ($locations as $location) { if (isset($location->id) && in_array(trim($location->id), $deleteIds)) { continue; } if (!($type = PreferredLocationType::get(trim($location->typeId))) instanceof PreferredLocationType) { continue; } $locationName = trim($location->value); $locs = Location::getAllByCriteria('name = ?', array($locationName), true, 1, 1); $loc = count($locs) > 0 ? $locs[0] : Location::create($locationName, $locationName); if (!isset($location->id) || ($id = trim($location->id)) === '') { if (trim($location->active) === '1') { PreferredLocation::create($loc, $product, $type); } //if it's deactivated one, ignore } else { if (($preferredLocation = PreferredLocation::get($id)) instanceof PreferredLocation) { $preferredLocation->setLocation($loc)->setActive(trim($location->active) === '1')->setProduct($product)->setType($type)->save(); } } } } return $this; }
/** * adding the location * * @param PreferredLocationType $type * @param Location $location * @return Product */ public function addLocation(PreferredLocationType $type, Location $location) { PreferredLocation::create($location, $this, $type); return $this; }