All seeds

pull/3/head
Rustem 2024-12-22 16:45:12 +05:00
parent 3fddf8f343
commit 161c28c942
10 changed files with 49849 additions and 51 deletions

View File

@ -11,7 +11,7 @@ class PipiCarInstallCommands extends InstallCommand
protected $signature = 'pipicar:install {--install} {--upgrade} {--apps}';
protected $description = 'CRM Аренды автомобилей';
protected $module_name = 'pipicar';
protected $module_version = '0.0.0';
protected $module_version = '1.0.0';
protected $storage = 'pipicar_crm';
@ -29,6 +29,7 @@ class PipiCarInstallCommands extends InstallCommand
'auto_tariffs', // Тарифы авто
'brand_models', // Модель авто
'auto_classes', // Класс авто
'owner_contracts', // Договор Владельца
'owners', // Владелец авто
'auto' // авто
];

View File

@ -35,55 +35,60 @@ return new class extends \A7kz\Platform\Commands\InstallScript {
$segments = Segment::listActive();
foreach ($segments as $segment) {
$count = UniModel::model('pipi_auto')->count();
foreach ($data as $value) {
$car = UniModel::model('pipi_auto', $segment->connector);
$car->code = $value['Код'];
$car->name = $value['Наименование'];
$car->type_id = UniModel::model('pipi_auto_types', $segment->connector)
->firstOrCreate([
'name' => $value['Тип']
])->id;
$car->class_id = UniModel::model('pipi_auto_classes', $segment->connector)
->firstOrCreate([
'name' => $value['Класс']
])->id;
$autoBrand = UniModel::model('pipi_auto_brands', $segment->connector)
->firstOrCreate([
'name' => $value['Марка']
]);
$car->brand_id = $autoBrand->id;
$car->model_id = UniModel::model('pipi_brand_models', $segment->connector)
->firstOrCreate([
'name' => $value['Модель'],
'brand_id' => $autoBrand->id,
])->id;
$car->color_id = UniModel::model('pipi_auto_colors', $segment->connector)
->firstOrCreate([
'name' => $value['Цвет']
])->id;
$car->serial_number = $value['СерийныйНомер'];
$car->state_number = $value['ГосНомер'];
$car->manufacture_year = $value['ГодПроизводства'];
$car->passport_number = $value['НомерТехПаспорта'];
$car->passport_date = $value['ДатаТехпаспорта'];
$car->estimated_cost = $value['ОценочнаяСтоимость'];
$owner = UniModel::model('pipi_owners', $segment->connector)
->firstOrCreate([
'fio' =>$value['ВладелецИмущества']
]);
$car->owner_id = $owner->id;
$car->is_trust_management = (bool) $value['ВДоверенномУправлении'];
$car->owner_percentage = $value['ПроцентВладельца'];
$car->owner_contract = $owner->contract_file_path;
$car->is_inactive = (bool) $value['НеИспользовать'];
$car->is_predefined = (bool) $value['Предопределенный'];
$car->predefined_data_name = $value['ИмяПредопределенныхДанных'];
$car->save();
if ($count === 0) {
foreach ($segments as $segment) {
foreach ($data as $value) {
$car = UniModel::model('pipi_auto', $segment->connector);
$car->code = $value['Код'];
$car->name = $value['Наименование'];
$car->type_id = UniModel::model('pipi_auto_types', $segment->connector)
->firstOrCreate([
'name' => $value['Тип']
])->id;
$car->class_id = UniModel::model('pipi_auto_classes', $segment->connector)
->firstOrCreate([
'name' => $value['Класс']
])->id;
$autoBrand = UniModel::model('pipi_auto_brands', $segment->connector)
->firstOrCreate([
'name' => $value['Марка']
]);
$car->brand_id = $autoBrand->id;
$car->model_id = UniModel::model('pipi_brand_models', $segment->connector)
->firstOrCreate([
'name' => $value['Модель'],
'brand_id' => $autoBrand->id,
])->id;
$car->color_id = UniModel::model('pipi_auto_colors', $segment->connector)
->firstOrCreate([
'name' => $value['Цвет']
])->id;
$car->serial_number = $value['СерийныйНомер'];
$car->state_number = $value['ГосНомер'];
$car->manufacture_year = $value['ГодПроизводства'];
$car->passport_number = $value['НомерТехПаспорта'];
$car->passport_date = $value['ДатаТехпаспорта'];
$car->estimated_cost = $value['ОценочнаяСтоимость'];
$owner = UniModel::model('pipi_owners', $segment->connector)
->firstOrCreate([
'name' =>$value['ВладелецИмущества']
]);
$car->owner_id = $owner->id;
$car->is_trust_management = (bool) $value['ВДоверенномУправлении'];
$car->owner_percentage = $value['ПроцентВладельца'];
$car->owner_contract = $owner->contract_file_path;
$car->is_inactive = (bool) $value['НеИспользовать'];
$car->is_predefined = (bool) $value['Предопределенный'];
$car->predefined_data_name = $value['ИмяПредопределенныхДанных'];
if ((bool) $value['ПометкаУдаления']) {
$car->deleted_at = now();
}
$car->save();
}
}
}
}
private function upgrade(): void

View File

@ -0,0 +1,9 @@
{
"admin": [
"default",
"add",
"show",
"edit",
"delete"
]
}

View File

@ -0,0 +1,545 @@
{
"module": "pipicar",
"name": "pipicar.auto",
"type": "crud",
"title": "Автомобили",
"data": {
"table": "auto",
"pk": "id",
"limit": 25,
"sort_order": "asc",
"sort_field": "code",
"segment": true,
"timestamp": false,
"fields": {
"id": {
"type": "pk"
},
"code": {
"type": "string",
"validation": "required"
},
"name_ru": {
"type": "text"
},
"name_kz": {
"type": "text"
},
"account_type": {
"type": "foreign",
"table": "ref_base_group",
"foreign": "id",
"display": [
"data_name_{lk}"
],
"where": "data_type = 'T01'"
},
"article_source": {
"type": "string",
"validation": "nullable"
},
"element_source": {
"type": "string",
"validation": "nullable"
},
"mo_num": {
"type": "int",
"validation": "nullable|integer"
},
"used_by_documents": {
"type": "bool",
"validation": "nullable"
},
"used_by_system": {
"type": "bool",
"validation": "nullable"
},
"type_of_organization": {
"type": "foreign",
"table": "ref_property_types",
"foreign": "id",
"display": [
"value",
"name"
],
"validation": "nullable|int",
"label": "Тип собственности"
},
"accounts_plan_part": {
"type": "foreign",
"table": "ref_accounts_plan_part",
"foreign": "id",
"display": [
"code",
"name_{lk}"
],
"validation": "nullable|string",
"label": "Раздел плана счетов"
},
"accounts_plan_particle": {
"type": "foreign",
"table": "ref_accounts_plan_particle",
"foreign": "id",
"display": [
"code",
"name_{lk}"
],
"validation": "required|string",
"label": "Подраздел плана счетов"
},
"started_at": {
"type": "date",
"validation": "required|date"
},
"ended_at": {
"type": "date",
"validation": "nullable|date"
},
"whitespace": {
"type": "virtual"
}
}
},
"ui": {
"grid": {
"title": "План счетов",
"template": "app.base.crud.grid",
"cols": [
{
"name": "code",
"caption": "Счёт"
},
{
"name": "name_kz",
"caption": "Наименование на казахском"
},
{
"name": "name_ru",
"caption": "Наименование на русском"
},
{
"name": "account_type",
"caption": "Тип счёта"
},
{
"name": "used_by_documents",
"caption": "Исп. в первич. док-тах"
},
{
"name": "used_by_system",
"caption": "Исп. системой"
},
{
"name": "accounts_plan_particle",
"caption": "Подраздел плана счетов"
},
{
"name": "type_of_organization",
"caption": "Тип плана счетов"
},
{
"name": "started_at",
"caption": "Дата начала действия"
},
{
"name": "ended_at",
"caption": "Дата окончания действия"
},
{
"name": "id",
"caption": "ИД"
}
],
"action": {
"head": [
"add"
]
},
"filter": {
"template": "app.base.crud.filter",
"rows": [
{
"cols": [
{
"size": 1,
"input": {
"name": "code",
"label": "Cчёт"
}
},
{
"size": 3,
"input": {
"name": "account_type",
"label": "Тип счёта"
}
},
{
"size": 1,
"input": {
"name": "mo_num",
"label": "МО №"
}
},
{
"size": 1,
"input": {
"name": "id",
"label": "ИД"
}
},
{
"size": 3,
"input": {
"name": "used_by_documents",
"label": "Исп. только в первич. документах"
}
},
{
"size": 3,
"input": {
"name": "used_by_system",
"label": "Исп. только системой"
}
}
]
},
{
"cols": [
{
"size": 6,
"input": {
"name": "name_kz",
"label": "Наименование на казахском"
}
},
{
"size": 6,
"input": {
"name": "name_ru",
"label": "Наименование на русском"
}
},
{
"size": 4,
"input": {
"name": "accounts_plan_particle",
"label": "Подраздел плана счетов"
}
},
{
"size": 4,
"input": {
"name": "accounts_plan_part",
"label": "Раздел плана счетов"
}
},
{
"size": 4,
"input": {
"name": "type_of_organization",
"label": "Тип плана счетов"
}
},
{
"size": 4,
"input": {
"name": "started_at",
"label": "Дата начала действия"
}
},
{
"size": 4,
"input": {
"name": "ended_at",
"label": "Дата окончания действия"
}
}
]
}
]
}
},
"forms": {
"add": {
"title": "Добавление записи в справочник \"План счетов\"",
"template": "app.base.crud.form",
"form": {
"inject_component": [
"Js.Refs.AccountsPlan"
],
"submits": "struct:accounting.form.edit.submits",
"rows": [
{
"cols": [
{
"size": 2,
"input": {
"name": "code",
"label": "Cчёт"
}
},
{
"size": 2,
"input": {
"name": "mo_num",
"label": "МО №"
}
},
{
"size": 4,
"input": {
"name": "started_at",
"label": "Дата начала действия"
}
},
{
"size": 4,
"input": {
"name": "ended_at",
"label": "Дата окончания действия"
}
}
]
},
{
"cols": [
{
"size": 12,
"input": {
"name": "type_of_organization",
"label": "Тип плана счетов",
"readonly": true
}
},
{
"size": 12,
"input": {
"name": "accounts_plan_part",
"label": "Раздел плана счетов",
"readonly": true
}
},
{
"size": 12,
"input": {
"name": "accounts_plan_particle",
"label": "Подраздел плана счетов",
"js_event": {
"onchange": "accountPlanParticleChange"
}
}
}
]
},
{
"cols": [
{
"size": 12,
"input": {
"name": "name_kz",
"label": "Наименование на казахском"
}
},
{
"size": 12,
"input": {
"name": "name_ru",
"label": "Наименование на русском"
}
}
]
},
{
"cols": [
{
"size": 4,
"input": {
"name": "account_type",
"label": "Тип счёта"
}
},
{
"size": 12,
"input": {
"name": "article_source",
"label": "Источник статьи"
}
},
{
"size": 12,
"input": {
"name": "element_source",
"label": "Источник элемента"
}
}
]
},
{
"cols": [
{
"size": 12,
"input": {
"name": "used_by_documents",
"label": "Используется только в первичных документах"
}
}
]
},
{
"cols": [
{
"size": 12,
"input": {
"name": "used_by_system",
"label": "Используется только системой"
}
}
]
}
]
}
},
"edit": {
"title": "Редактирование записи в справочнике \"План счетов\"",
"template": "app.base.crud.form",
"form": {
"inject_component": [
"Js.Refs.AccountsPlan"
],
"rows": [
{
"cols": [
{
"size": 2,
"input": {
"name": "code",
"label": "Cчёт"
}
},
{
"size": 2,
"input": {
"name": "mo_num",
"label": "МО №"
}
},
{
"size": 4,
"input": {
"name": "started_at",
"label": "Дата начала действия"
}
},
{
"size": 4,
"input": {
"name": "ended_at",
"label": "Дата окончания действия"
}
}
]
},
{
"cols": [
{
"size": 12,
"input": {
"name": "type_of_organization",
"label": "Тип плана счетов",
"readonly": true
}
},
{
"size": 12,
"input": {
"name": "accounts_plan_part",
"label": "Раздел плана счетов",
"readonly": true
}
},
{
"size": 12,
"input": {
"name": "accounts_plan_particle",
"label": "Подраздел плана счетов",
"js_event": {
"onchange": "accountPlanParticleChange"
}
}
}
]
},
{
"cols": [
{
"size": 12,
"input": {
"name": "name_kz",
"label": "Наименование на казахском"
}
},
{
"size": 12,
"input": {
"name": "name_ru",
"label": "Наименование на русском"
}
}
]
},
{
"cols": [
{
"size": 4,
"input": {
"name": "account_type",
"label": "Тип счёта"
}
},
{
"size": 12,
"input": {
"name": "article_source",
"label": "Источник статьи"
}
},
{
"size": 12,
"input": {
"name": "element_source",
"label": "Источник элемента"
}
}
]
},
{
"cols": [
{
"size": 12,
"input": {
"name": "used_by_documents",
"label": "Используется только в первичных документах"
}
}
]
},
{
"cols": [
{
"size": 12,
"input": {
"name": "used_by_system",
"label": "Используется только системой"
}
}
]
}
],
"submits": "struct:accounting.form.edit.submits"
}
}
}
},
"actions": "struct:crud.actions"
}

View File

@ -0,0 +1,36 @@
<?php
use A7kz\Platform\Modules\Platform\Segment\Facades\Segment;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
$segments = Segment::listActive();
foreach ($segments as $segment) {
Schema::connection($segment->connector)->create('pipi_owner_contracts', static function (Blueprint $table) {
$table->id();
$table->boolean('is_group')->default(false)->comment('Это группа');
$table->string('code')->nullable()->comment('Код');
$table->string('name')->nullable()->comment('Наименование');
$table->string('comments')->nullable()->comment('Комментарий');
$table->string('organization')->nullable()->comment('Организация');
$table->string('contract_number')->nullable()->comment('Номер договора');
$table->date('contract_date')->nullable()->comment('Дата договора');
$table->date('started_at')->nullable()->comment('Дата начала действия');
$table->date('ended_at')->nullable()->comment('Дата окончания');
$table->string('payment_type')->nullable()->comment('Условия оплаты');
$table->timestamps();
$table->softDeletes();
$table->unsignedBigInteger('parent_id');
$table->foreign('parent_id')->references('id')->on('pipi_owner_contracts');
});
}
}
};

View File

@ -0,0 +1,103 @@
<?php
use A7kz\Platform\Models\UniModel;
use A7kz\Platform\Modules\Platform\Core\Facades\Core;
use A7kz\Platform\Modules\Platform\Segment\Facades\Segment;
use Carbon\Carbon;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Storage;
use \A7kz\Platform\Commands\InstallScript;
use JetBrains\PhpStorm\NoReturn;
return new class extends \A7kz\Platform\Commands\InstallScript {
public function install($module_name, $module_version)
{
}
public function update($module_name, $module_version): void
{
$this->upgrade();
$this->seed();
}
private function upgrade(): void
{
$segments = Segment::listActive();
foreach ($segments as $segment) {
if (!Schema::connection($segment->connector)->hasTable('pipi_owner_contracts')) {
Schema::connection($segment->connector)->create('pipi_owner_contracts', static function (Blueprint $table) {
$table->id();
$table->boolean('is_group')->default(false)->comment('Это группа');
$table->string('code')->nullable()->comment('Код');
$table->string('name')->nullable()->comment('Наименование');
$table->string('comments')->nullable()->comment('Комментарий');
$table->string('organization')->nullable()->comment('Организация');
$table->string('contract_number')->nullable()->comment('Номер договора');
$table->date('contract_date')->nullable()->comment('Дата договора');
$table->date('started_at')->nullable()->comment('Дата начала действия');
$table->date('ended_at')->nullable()->comment('Дата окончания');
$table->string('payment_type')->nullable()->comment('Условия оплаты');
$table->timestamps();
$table->softDeletes();
$table->unsignedBigInteger('parent_id')->nullable();
$table->foreign('parent_id')->references('id')->on('pipi_owner_contracts');
});
}
}
}
#[NoReturn] private function seed(): void
{
$seed = Storage::disk('pipicar_crm')->get('owner_contracts/seeds/seed.json');
if (str_starts_with($seed, "\xef\xbb\xbf")) {
$seed = substr($seed, 3); // Удаляем первые 3 байта
}
$data = json_decode($seed, true);
$segments = Segment::listActive();
$count = UniModel::model('pipi_owner_contracts')->count();
if ($count === 0) {
foreach ($segments as $segment) {
foreach ($data as $value) {
$model = UniModel::model('pipi_owner_contracts', $segment->connector);
$model->is_group = (bool) $value['ЭтоГруппа'];
$model->code = $value['Код'];
$model->name = $value['Наименование'];
$model->comments = $value['Комментарий'];
$model->organization = $value['Организация'];
$model->contract_number = $value['НомерДоговора'];
$model->contract_date = $value['ДатаДоговора'];
$model->started_at = $value['ДатаНачалаДействияДоговора'];
$model->ended_at = $value['ДатаОкончанияДействияДоговора'];
$model->payment_type = $value['УсловияОплаты'];
if ((bool) $value['ПометкаУдаления']) {
$model->deleted_at = now();
}
$model->save();
}
}
foreach ($data 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();
}
}
}
}
}
};

File diff suppressed because it is too large Load Diff

View File

@ -14,11 +14,28 @@ return new class extends Migration
foreach ($segments as $segment) {
Schema::connection($segment->connector)->create('pipi_owners', static function (Blueprint $table) {
$table->id();
$table->string('fio')->nullable()->comment('ФИО владельца');
$table->string('contract_file_path')->nullable()->comment('Путь до договора');
$table->string('name')->nullable()->comment('Наименование');
$table->boolean('is_group')->default(false)->comment('Это группа');
$table->string('code')->nullable()->comment('Код');
$table->string('iin')->nullable()->comment('ИИН');
$table->string('kbe')->nullable()->comment('КБЕ');
$table->string('okpo_code')->nullable()->comment('Код по ОКПО');
$table->string('comments')->nullable()->comment('Комментарий');
$table->string('main_contact')->nullable()->comment('Основное контактное лицо');
$table->string('bank_account')->nullable()->comment('Оснойной банковский счет');
$table->string('address')->nullable()->comment('Адрес');
$table->string('phone')->nullable()->comment('Телефон');
$table->string('mail')->nullable()->comment('Почта');
$table->string('id_number')->nullable()->comment('Номер удостоверения');
$table->date('id_date')->nullable()->comment('Дата удостоверения');
$table->string('issued')->nullable()->comment('Удостоверение выдано');
$table->timestamps();
$table->softDeletes();
$table->unsignedBigInteger('contract_id')->nullable()->comment('id Договора');
$table->foreign('contract_id')->references('id')->on('pipi_owner_contracts')->onDelete('cascade');
$table->unsignedBigInteger('parent_id')->nullable()->comment('Парент');
$table->foreign('parent_id')->references('id')->on('pipi_owners');
$table->unsignedBigInteger('user_id')->nullable()->comment('Пользователь в системе');
$table->foreign('user_id')->references('id')->on('core_users');
});

View File

@ -19,6 +19,7 @@ return new class extends \A7kz\Platform\Commands\InstallScript {
public function update($module_name, $module_version): void
{
$this->upgrade();
$this->seed();
}
private function upgrade(): void
@ -28,15 +29,92 @@ return new class extends \A7kz\Platform\Commands\InstallScript {
if (!Schema::connection($segment->connector)->hasTable('pipi_owners')) {
Schema::connection($segment->connector)->create('pipi_owners', static function (Blueprint $table) {
$table->id();
$table->string('fio')->nullable()->comment('ФИО владельца');
$table->string('contract_file_path')->nullable()->comment('Путь до договора');
$table->string('name')->nullable()->comment('Наименование');
$table->boolean('is_group')->default(false)->comment('Это группа');
$table->string('code')->nullable()->comment('Код');
$table->string('iin')->nullable()->comment('ИИН');
$table->string('kbe')->nullable()->comment('КБЕ');
$table->string('okpo_code')->nullable()->comment('Код по ОКПО');
$table->string('comments')->nullable()->comment('Комментарий');
$table->string('main_contact')->nullable()->comment('Основное контактное лицо');
$table->string('bank_account')->nullable()->comment('Оснойной банковский счет');
$table->string('address')->nullable()->comment('Адрес');
$table->string('phone')->nullable()->comment('Телефон');
$table->string('mail')->nullable()->comment('Почта');
$table->string('id_number')->nullable()->comment('Номер удостоверения');
$table->date('id_date')->nullable()->comment('Дата удостоверения');
$table->string('issued')->nullable()->comment('Удостоверение выдано');
$table->timestamps();
$table->softDeletes();
$table->unsignedBigInteger('contract_id')->nullable()->comment('id Договора');
$table->foreign('contract_id')->references('id')->on('pipi_owner_contracts')->onDelete('cascade');
$table->unsignedBigInteger('parent_id')->nullable()->comment('Парент');
$table->foreign('parent_id')->references('id')->on('pipi_owners');
$table->unsignedBigInteger('user_id')->nullable()->comment('Пользователь в системе');
$table->foreign('user_id')->references('id')->on('core_users');
});
}
}
}
private function seed(): void
{
$seed = Storage::disk('pipicar_crm')->get('owners/seeds/seed.json');
if (str_starts_with($seed, "\xef\xbb\xbf")) {
$seed = substr($seed, 3); // Удаляем первые 3 байта
}
$data = json_decode($seed, true);
$count = UniModel::model('pipi_owners')->count();
if ($count === 0) {
$segments = Segment::listActive();
foreach ($segments as $segment) {
foreach ($data as $value) {
$model = UniModel::model('pipi_owners', $segment->connector);
$model->is_group = (bool) $value['ЭтоГруппа'];
$model->code = $value['Код'];
$model->name = $value['Наименование'];
$model->comments = $value['Комментарий'];
$model->iin = $value['ИдентификационныйКодЛичности'];
$model->kbe = $value['КБЕ'];
$model->okpo_code = $value['КодПоОКПО'];
$model->main_contact = $value['ОсновноеКонтактноеЛицо'];
$model->bank_account = $value['ОсновнойБанковскийСчет'];
$model->address = $value['Адрес'];
$model->phone = $value['Телефон'];
$model->mail = $value['Почта'];
$model->id_number = $value['УдНомер'];
if ($value['УдДата']) {
$model->id_date = $value['УдДата'];
}
$model->issued = $value['УдВыдан'];
if ($value['ОсновнойДоговор']) {
$model->contract_id = UniModel::model('pipi_owner_contracts', $segment->connector)
->firstOrCreate([
'name' => $value['ОсновнойДоговор']
])->id;
}
if ((bool) $value['ПометкаУдаления']) {
$model->deleted_at = now();
}
$model->save();
}
}
foreach ($data 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();
}
}
}
}
}
};

27002
modules/owners/seeds/seed.json Normal file

File diff suppressed because it is too large Load Diff