validate([ '*.Код' => 'required|string', '*.Наименование' => 'required|string', '*.Тип' => 'required|string', '*.Класс' => 'required|string', '*.Марка' => 'required|string', '*.Модель' => 'required|string', '*.Цвет' => 'required|string', '*.СерийныйНомер' => 'nullable|string', '*.ГосНомер' => 'nullable|string', '*.ГодПроизводства' => 'nullable|integer', '*.НомерТехПаспорта' => 'nullable|string', '*.ДатаТехпаспорта' => 'nullable|date', '*.ОценочнаяСтоимость' => 'nullable|numeric', '*.ВладелецИмущества' => 'required|string', '*.ВДоверенномУправлении' => 'required|boolean', '*.ПроцентВладельца' => 'nullable|numeric', '*.НеИспользовать' => 'required|boolean', '*.Предопределенный' => 'required|boolean', '*.ИмяПредопределенныхДанных' => 'nullable|string', '*.ПометкаУдаления' => 'required|boolean', ]); $segments = Segment::listActive(); foreach ($segments as $segment) { foreach ($validatedData as $value) { UniModel::model('pipi_auto', $segment->connector)->updateOrCreate( [ 'code' => $value['Код'], ], [ 'name' => $value['Наименование'], 'type_id' => UniModel::model('pipi_auto_types', $segment->connector) ->firstOrCreate(['name' => $value['Тип']])->id, 'class_id' => UniModel::model('pipi_auto_classes', $segment->connector) ->firstOrCreate(['name' => $value['Класс']])->id, 'brand_id' => UniModel::model('pipi_auto_brands', $segment->connector) ->firstOrCreate(['name' => $value['Марка']])->id, 'model_id' => UniModel::model('pipi_brand_models', $segment->connector) ->firstOrCreate([ 'name' => $value['Модель'], 'brand_id' => UniModel::model('pipi_auto_brands', $segment->connector) ->firstOrCreate(['name' => $value['Марка']])->id, ])->id, 'color_id' => UniModel::model('pipi_auto_colors', $segment->connector) ->firstOrCreate(['name' => $value['Цвет']])->id, 'serial_number' => $value['СерийныйНомер'], 'state_number' => $value['ГосНомер'], 'manufacture_year' => $value['ГодПроизводства'], 'passport_number' => $value['НомерТехПаспорта'], 'passport_date' => $value['ДатаТехпаспорта'], 'estimated_cost' => $value['ОценочнаяСтоимость'], 'owner_id' => UniModel::model('pipi_owners', $segment->connector) ->firstOrCreate(['name' => $value['ВладелецИмущества']])->id, 'is_trust_management' => (bool)$value['ВДоверенномУправлении'], 'owner_percentage' => $value['ПроцентВладельца'], 'is_inactive' => (bool)$value['НеИспользовать'], 'is_predefined' => (bool)$value['Предопределенный'], 'predefined_data_name' => $value['ИмяПредопределенныхДанных'], 'deleted_at' => $value['ПометкаУдаления'] ? now() : null, ] ); } } DB::commit(); return response()->json(['message' => 'Data synchronized successfully'], 200); } catch (Exception $e) { DB::rollBack(); Log::error('Error syncing auto data: ' . $e->getMessage()); return response()->json(['error' => 'Failed to synchronize data'], 500); } } public function syncOwners(Request $request) { try { DB::beginTransaction(); $validatedData = $request->validate([ '*.Код' => 'required|string', '*.Наименование' => 'required|string', '*.Комментарий' => 'nullable|string', '*.ИдентификационныйКодЛичности' => 'nullable|string', '*.КБЕ' => 'nullable|string', '*.КодПоОКПО' => 'nullable|string', '*.ОсновноеКонтактноеЛицо' => 'nullable|string', '*.ОсновнойБанковскийСчет' => 'nullable|string', '*.Адрес' => 'nullable|string', '*.Телефон' => 'nullable|string', '*.Почта' => 'nullable|string', '*.УдНомер' => 'nullable|string', '*.УдДата' => 'nullable|date', '*.УдВыдан' => 'nullable|string', '*.ОсновнойДоговор' => 'nullable|string', '*.ЭтоГруппа' => 'required|boolean', '*.ПометкаУдаления' => 'required|boolean', '*.Родитель' => 'nullable|string', ]); $segments = Segment::listActive(); foreach ($segments as $segment) { foreach ($validatedData as $value) { UniModel::model('pipi_owners', $segment->connector)->updateOrCreate( [ 'code' => $value['Код'], ], [ 'is_group' => (bool)$value['ЭтоГруппа'], 'name' => $value['Наименование'], 'comments' => $value['Комментарий'], 'iin' => $value['ИдентификационныйКодЛичности'], 'kbe' => $value['КБЕ'], 'okpo_code' => $value['КодПоОКПО'], 'main_contact' => $value['ОсновноеКонтактноеЛицо'], 'bank_account' => $value['ОсновнойБанковскийСчет'], 'address' => $value['Адрес'], 'phone' => $value['Телефон'], 'mail' => $value['Почта'], 'id_number' => $value['УдНомер'], 'id_date' => $value['УдДата'], 'issued' => $value['УдВыдан'], 'contract_id' => $value['ОсновнойДоговор'] ? UniModel::model('pipi_owner_contracts', $segment->connector)->firstOrCreate([ 'name' => $value['ОсновнойДоговор'] ])->id : null, 'deleted_at' => $value['ПометкаУдаления'] ? now() : null, ] ); } } foreach ($validatedData as $value) { $model = UniModel::model('pipi_owners')->where('name', $value['Наименование'])->first(); if ($model && $value['Родитель']) { $parent = UniModel::model('pipi_owners')->where('name', $value['Родитель'])->first(); if ($parent) { $model->parent_id = $parent->id; $model->save(); } } } DB::commit(); return response()->json(['message' => 'Owners synchronized successfully'], 200); } catch (Exception $e) { DB::rollBack(); Log::error('Error syncing owners: ' . $e->getMessage()); return response()->json(['error' => 'Failed to synchronize owners'], 500); } } public function syncOwnerContracts(Request $request) { try { DB::beginTransaction(); $validatedData = $request->validate([ '*.Код' => 'required|string', '*.Наименование' => 'required|string', '*.Комментарий' => 'nullable|string', '*.Организация' => 'nullable|string', '*.НомерДоговора' => 'required|string', '*.ДатаДоговора' => 'nullable|date', '*.ДатаНачалаДействияДоговора' => 'nullable|date', '*.ДатаОкончанияДействияДоговора' => 'nullable|date', '*.УсловияОплаты' => 'nullable|string', '*.ЭтоГруппа' => 'required|boolean', '*.ПометкаУдаления' => 'required|boolean', '*.Родитель' => 'nullable|string', ]); $segments = Segment::listActive(); foreach ($segments as $segment) { foreach ($validatedData as $value) { UniModel::model('pipi_owner_contracts', $segment->connector)->updateOrCreate( [ 'code' => $value['Код'], ], [ 'is_group' => (bool)$value['ЭтоГруппа'], 'name' => $value['Наименование'], 'comments' => $value['Комментарий'], 'organization' => $value['Организация'], 'contract_number' => $value['НомерДоговора'], 'contract_date' => $value['ДатаДоговора'], 'started_at' => $value['ДатаНачалаДействияДоговора'], 'ended_at' => $value['ДатаОкончанияДействияДоговора'], 'payment_type' => $value['УсловияОплаты'], 'deleted_at' => $value['ПометкаУдаления'] ? now() : null, ] ); } } foreach ($validatedData as $value) { $model = UniModel::model('pipi_owner_contracts')->where('name', $value['Наименование'])->first(); if ($model && $value['Родитель']) { $parent = UniModel::model('pipi_owner_contracts')->where('name', $value['Родитель'])->first(); if ($parent) { $model->parent_id = $parent->id; $model->save(); } } } DB::commit(); return response()->json(['message' => 'Owner contracts synchronized successfully'], 200); } catch (Exception $e) { DB::rollBack(); Log::error('Error syncing owner contracts: ' . $e->getMessage()); return response()->json(['error' => 'Failed to synchronize owner contracts'], 500); } } }