public function consolidate($reseller_id = null) { $q = Model::Product(); if (!is_null($reseller_id)) { $q->where(['reseller_id', '=', (int) $reseller_id]); } $products = $q->cursor(); foreach ($products as $product) { if (isset($product['reseller_id']) && isset($product['segment_id']) && isset($product['sellzone_id'])) { $row = Model::Productdata()->firstOrCreate(['reseller_id' => (int) $product['reseller_id'], 'segment_id' => (int) $product['segment_id'], 'sellzone_id' => (int) $product['sellzone_id']]); unset($product['_id']); $row->product = $product; $family = repo('segment')->getFamilyfromItem((int) $product['segment_id']); if (!empty($family)) { $market = current($family); $market_id = (int) $market['id']; } else { $market_id = $segment_id; } $company = Model::Company()->where(['reseller_id', '=', (int) $product['reseller_id']])->first(false); $reseller = Model::Reseller()->find((int) $product['reseller_id'], false); $segment = Model::Segment()->find((int) $product['segment_id'], false); $location = lib('utils')->remember('has.locations.companies.' . $product['reseller_id'], function ($reseller_id) { $company = Model::Company()->where(['reseller_id', '=', (int) $reseller_id])->first(true); if ($company) { $coords = lib('geo')->getCoordsMap($company->address . ' ' . $company->zip . ' ' . $company->city); $loc = ['lng' => $coords['lng'], 'lat' => $coords['lat']]; } return $loc; }, Model::Company()->getAge(), [$product['reseller_id']]); $status = (int) lib('status')->getId('reseller', 'REGISTER') == $reseller['status_id']; $row->company = $company; $row->segment = $segment; $row->status = $status; $row->location = $location; $row->reseller = $reseller; $options = []; $resellerObj = Model::Reseller()->model($reseller); $hasAgenda = lib('option')->get('agenda.partage', $resellerObj, false); $distanceMaxReseller = (double) lib('option')->get('zone.intervention.' . $market_id, $resellerObj, 0); $delai_presta = lib('option')->get('delai.intervention.' . $market_id, $resellerObj, 0); $minAmount = lib('option')->get('montant.intervention.' . $market_id, $resellerObj, 0); $options['has_agenda'] = $hasAgenda; $options['distance_max'] = $distanceMaxReseller; $options['delai_min'] = $delai_presta; $options['amount_min'] = $minAmount; $options['languages'] = []; $languages = ['anglais', 'espagnol', 'allemand', 'italien', 'néerlandais', 'portugais', 'russe', 'japonais', 'chinois']; foreach ($languages as $language) { $speak = lib('option')->get('langue.' . $market_id . '.' . $language, $resellerObj, false); $options['languages'][$language] = $speak; } $row->options = $options; $row->save(); } } }