1c api
parent
b0f2bcfb58
commit
5cfd5dd0e4
|
|
@ -1,175 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
|
||||||
|
|
||||||
use A7kz\Platform\Models\UniModel;
|
|
||||||
use A7kz\Platform\Modules\Platform\Segment\Facades\Segment;
|
|
||||||
use Exception;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\DB;
|
|
||||||
use Illuminate\Support\Facades\Log;
|
|
||||||
|
|
||||||
class ApiController extends Controller
|
|
||||||
{
|
|
||||||
public function syncData(Request $request, $modelName, $validationRules, $extraProcessing = null)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
DB::beginTransaction();
|
|
||||||
|
|
||||||
$validatedData = $request->validate($validationRules);
|
|
||||||
$segments = Segment::listActive();
|
|
||||||
|
|
||||||
foreach ($segments as $segment) {
|
|
||||||
foreach ($validatedData as $value) {
|
|
||||||
UniModel::model($modelName, $segment->connector)->updateOrCreate(
|
|
||||||
['code' => $value['Код']],
|
|
||||||
array_merge($this->mapAttributes($value), $extraProcessing ? $extraProcessing($value, $segment) : [])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($extraProcessing)) {
|
|
||||||
foreach ($validatedData as $value) {
|
|
||||||
$this->processParentRelation($modelName, $value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DB::commit();
|
|
||||||
return response()->json(['message' => ucfirst($modelName) . ' data synchronized successfully'], 200);
|
|
||||||
} catch (Exception $e) {
|
|
||||||
DB::rollBack();
|
|
||||||
Log::error('Error syncing ' . $modelName . ' data: ' . $e->getMessage());
|
|
||||||
return response()->json(['error' => 'Failed to synchronize ' . $modelName . ' data'], 500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function mapAttributes($data)
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
'is_group' => (bool)($data['ЭтоГруппа'] ?? false),
|
|
||||||
'name' => $data['Наименование'] ?? null,
|
|
||||||
'comments' => $data['Комментарий'] ?? null,
|
|
||||||
'iin' => $data['ИдентификационныйКодЛичности'] ?? null,
|
|
||||||
'kbe' => $data['КБЕ'] ?? null,
|
|
||||||
'okpo_code' => $data['КодПоОКПО'] ?? null,
|
|
||||||
'main_contact' => $data['ОсновноеКонтактноеЛицо'] ?? null,
|
|
||||||
'bank_account' => $data['ОсновнойБанковскийСчет'] ?? null,
|
|
||||||
'address' => $data['Адрес'] ?? null,
|
|
||||||
'phone' => $data['Телефон'] ?? null,
|
|
||||||
'mail' => $data['Почта'] ?? null,
|
|
||||||
'id_number' => $data['УдНомер'] ?? null,
|
|
||||||
'id_date' => $data['УдДата'] ?? null,
|
|
||||||
'issued' => $data['УдВыдан'] ?? null,
|
|
||||||
'contract_id' => $data['ОсновнойДоговор'] ?? null,
|
|
||||||
'deleted_at' => $data['ПометкаУдаления'] ? now() : null,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
private function processParentRelation($modelName, $data)
|
|
||||||
{
|
|
||||||
$model = UniModel::model($modelName)->where('name', $data['Наименование'])->first();
|
|
||||||
|
|
||||||
if ($model && !empty($data['Родитель'])) {
|
|
||||||
$parent = UniModel::model($modelName)->where('name', $data['Родитель'])->first();
|
|
||||||
if ($parent) {
|
|
||||||
$model->parent_id = $parent->id;
|
|
||||||
$model->save();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function syncAutoData(Request $request)
|
|
||||||
{
|
|
||||||
$validationRules = [
|
|
||||||
'*.Код' => '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',
|
|
||||||
];
|
|
||||||
|
|
||||||
$extraProcessing = function ($value, $segment) {
|
|
||||||
return [
|
|
||||||
'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,
|
|
||||||
'owner_id' => UniModel::model('pipi_owners', $segment->connector)
|
|
||||||
->firstOrCreate(['name' => $value['ВладелецИмущества']])->id,
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
return $this->syncData($request, 'pipi_auto', $validationRules, $extraProcessing);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function syncOwners(Request $request)
|
|
||||||
{
|
|
||||||
$validationRules = [
|
|
||||||
'*.Код' => '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',
|
|
||||||
];
|
|
||||||
|
|
||||||
return $this->syncData($request, 'pipi_owners', $validationRules);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function syncOwnerContracts(Request $request)
|
|
||||||
{
|
|
||||||
$validationRules = [
|
|
||||||
'*.Код' => 'required|string',
|
|
||||||
'*.Наименование' => 'required|string',
|
|
||||||
'*.Комментарий' => 'nullable|string',
|
|
||||||
'*.Организация' => 'nullable|string',
|
|
||||||
'*.НомерДоговора' => 'required|string',
|
|
||||||
'*.ДатаДоговора' => 'nullable|date',
|
|
||||||
'*.ДатаНачалаДействияДоговора' => 'nullable|date',
|
|
||||||
'*.ДатаОкончанияДействияДоговора' => 'nullable|date',
|
|
||||||
'*.УсловияОплаты' => 'nullable|string',
|
|
||||||
'*.ЭтоГруппа' => 'required|boolean',
|
|
||||||
'*.ПометкаУдаления' => 'required|boolean',
|
|
||||||
'*.Родитель' => 'nullable|string',
|
|
||||||
];
|
|
||||||
|
|
||||||
return $this->syncData($request, 'pipi_owner_contracts', $validationRules);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,236 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use A7kz\Platform\Models\UniModel;
|
||||||
|
use A7kz\Platform\Modules\Platform\Segment\Facades\Segment;
|
||||||
|
use Exception;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class Sync1cApiController extends Controller
|
||||||
|
{
|
||||||
|
public function syncAutoData(Request $request)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
DB::beginTransaction();
|
||||||
|
|
||||||
|
$validatedData = $request->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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -13,10 +13,10 @@ use Illuminate\Support\Facades\Route;
|
||||||
| be assigned to the "api" middleware group. Make something great!
|
| be assigned to the "api" middleware group. Make something great!
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
use App\Http\Controllers\ApiController;
|
use App\Http\Controllers\Sync1cApiController;
|
||||||
|
|
||||||
Route::prefix('1c')->group(function () {
|
Route::prefix('1c')->group(function () {
|
||||||
Route::post('syncAutoData', [ApiController::class, 'syncAutoData']);
|
Route::post('syncAutoData', [Sync1cApiController::class, 'syncAutoData']);
|
||||||
Route::post('syncOwners', [ApiController::class, 'syncOwners']);
|
Route::post('syncOwners', [Sync1cApiController::class, 'syncOwners']);
|
||||||
Route::post('syncOwnerContracts', [ApiController::class, 'syncOwnerContracts']);
|
Route::post('syncOwnerContracts', [Sync1cApiController::class, 'syncOwnerContracts']);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue