public function getDealersByGid($gid, $attributes = array(), $segments = array(), $groupDealersByCreditCode = false, $offset = 0, $count = null) { // The first character of the gid is type $gidType = substr($gid, 0, 1); // The rest is the id $id = substr($gid, 1); // Sort the attributes if (!empty($attributes)) { $attributes = $this->_sortAttributes($attributes); } if (strcmp($gidType, 'C') === 0) { // Dealer (Customer) return array(\Akzo\Dealer::find($id)); //$query = \Akzo\Dealer::where("id", "=",(int) $id); } else { if (strcmp($gidType, 'D') === 0) { // Depot $query = \Akzo\Geography\Depot::find($id)->dealers(); } else { if (strcmp($gidType, 'Z') === 0) { // Zones $query = \Akzo\Geography\Zone::find($id)->dealers(); //->all(); } } } // Add the attributes to the query if (!empty($attributes)) { foreach ($attributes as $attrKey => $attr) { if (isset($attr['included']) && !empty($attr['included'])) { $query = $query->whereIn($attrKey, $attr['included']); } if (isset($attr['excluded']) && !empty($attr['excluded'])) { $query = $query->whereNotIn($attrKey, $attr['excluded']); } } } if (!empty($segments)) { // $this->logger->info("Has segments"); $query = $query->whereIn('segment', $segments); } if (!empty($count)) { $query = $query->take($count)->skip($offset); } if ($groupDealersByCreditCode) { // Group concat ids and code $query = $query->selectRaw("GROUP_CONCAT(`ak_sales_dealers`.`id`) `cids`, GROUP_CONCAT(`ak_sales_dealers`.`code`) `ccodes`")->groupBy('credit_code'); } return $query->orderBy('id')->get()->all(); }