diff --git a/app/Modules/CardOrder/CardOrderModule.php b/app/Modules/CardOrder/CardOrderModule.php index 2c3809e..0723c5d 100644 --- a/app/Modules/CardOrder/CardOrderModule.php +++ b/app/Modules/CardOrder/CardOrderModule.php @@ -2,6 +2,8 @@ namespace App\Modules\CardOrder; +use App\Modules\Core\ModulePackage; +use App\Modules\Core\ModulePackageType; use App\Modules\Makeable; use App\Modules\ModuleContract; @@ -51,7 +53,13 @@ class CardOrderModule implements ModuleContract */ public function getComposerRequirements(): array { - return []; + return [ + new ModulePackage( + type: ModulePackageType::MODULE, + name: 'Branch', + message: 'This module is used for branches.', + ), + ]; } /** diff --git a/app/Modules/CardOrder/Database/Migrations/2025_10_23_012416_create_card_orders_table.php b/app/Modules/CardOrder/Database/Migrations/2025_10_23_012416_create_card_orders_table.php new file mode 100644 index 0000000..36463ca --- /dev/null +++ b/app/Modules/CardOrder/Database/Migrations/2025_10_23_012416_create_card_orders_table.php @@ -0,0 +1,72 @@ +id(); + + $table->string('unique_id')->nullable()->unique(); + + $table->foreignId('card_state_id')->constrained('card_states')->restrictOnDelete(); + $table->foreignId('card_type_id')->constrained('card_types')->restrictOnDelete(); + + $table->string('region', 2)->index(); + $table->foreignId('branch_id')->constrained('branches')->restrictOnDelete(); + + $table->string('customer_name')->index(); + $table->string('customer_surname')->index(); + $table->string('customer_patronic_name')->nullable(); + $table->date('born_at')->nullable(); + $table->string('old_surname')->nullable(); + + $table->string('citizenship'); + $table->string('passport_serie')->index(); + $table->string('passport_id')->index(); + $table->date('passport_given_at'); + $table->string('passport_given_by'); + $table->string('born_place'); + + $table->string('job_location')->nullable(); + + $table->string('passport_address')->nullable(); + $table->string('real_address')->nullable(); + + $table->string('phone')->nullable()->index(); + $table->string('phone_additional')->nullable()->index(); + + $table->string('status')->nullable()->default(OrderStatusRepository::defaultStatus())->index(); + + $table->text('passport_one'); + $table->text('passport_two'); + $table->text('passport_three'); + $table->text('passport_four'); + + $table->text('notes')->nullable(); + + $table->foreignId('user_id')->constrained('users')->restrictOnDelete(); + + $table->boolean('paid')->default(false); + + $table->timestamps(); + $table->softDeletes(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('card_orders'); + } +}; diff --git a/app/Modules/CardOrder/Models/CardOrder.php b/app/Modules/CardOrder/Models/CardOrder.php index d237048..1830d49 100644 --- a/app/Modules/CardOrder/Models/CardOrder.php +++ b/app/Modules/CardOrder/Models/CardOrder.php @@ -2,6 +2,113 @@ namespace App\Modules\CardOrder\Models; +use App\Models\User; +use App\Modules\Branch\Interfaces\BelongsToBranch; +use App\Modules\Branch\Models\Branch; +use App\Modules\LoanOrder\Repositories\LoanOrderRepository; +use App\Modules\OrderStatus\Interfaces\HasStatus; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\SoftDeletes; -class CardOrder extends Model {} +/** + * @property int $id + * @property null|string $unique_id + * @property int $card_state_id + * @property int $card_type_id + * @property string $region + * @property int $branch_id + * @property string $customer_name + * @property string $customer_surname + * @property null|string $customer_patronic_name + * @property \Illuminate\Support\Carbon $born_at + * @property null|string $old_surname + * @property string $citizenship + * @property string $passport_serie + * @property string $passport_id + * @property \Illuminate\Support\Carbon $passport_given_at + * @property string $passport_given_by + * @property string $born_place + * @property null|string $job_location + * @property null|string $passport_address + * @property null|string $real_address + * @property null|string $phone + * @property null|string $phone_additional + * @property null|string $status + * @property string $passport_one + * @property string $passport_two + * @property string $passport_three + * @property string $passport_four + * @property null|string $notes + * @property int $user_id + * @property null|\Illuminate\Support\Carbon $created_at + * @property null|\Illuminate\Support\Carbon $updated_at + * @property null|\Illuminate\Support\Carbon $deleted_at + * @property bool $paid + */ +class CardOrder extends Model implements BelongsToBranch, HasStatus +{ + use SoftDeletes; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'born_at' => 'date', + 'passport_given_at' => 'date', + 'paid' => 'boolean', + ]; + + /** + * User + * + * @return BelongsTo + */ + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + /** + * Card state + * + * @return BelongsTo + */ + public function cardState(): BelongsTo + { + return $this->belongsTo(CardState::class, 'card_state_id'); + } + + /** + * Card type + * + * @return BelongsTo + */ + public function cardType(): BelongsTo + { + return $this->belongsTo(CardType::class, 'card_type_id'); + } + + /** + * Branch + * + * @return BelongsTo + */ + public function branch(): BelongsTo + { + return $this->belongsTo(Branch::class, 'branch_id'); + } + + /** + * "boot" method for model + */ + protected static function boot() + { + parent::boot(); + + static::creating(LoanOrderRepository::creating()); + static::created(LoanOrderRepository::created()); + } +}