From 74138388beb3bdd1405b7b630ec2b7fd025e7509 Mon Sep 17 00:00:00 2001 From: Omair Saleh Date: Sat, 20 Jul 2019 11:02:05 +0800 Subject: [PATCH] large commit --- .../Orders/UpdateReceiveNoteLogic.php | 20 +- .../Orders/UpdateWarehouseLogic.php | 2 +- .../Modules/Orders/Services/ListsOrder.php | 2 - .../Orders/Services/ListsOrderHistory.php | 6 +- .../Orders/Services/SetsOrderWarehouse.php | 8 +- app/Http/Controllers/TestController.php | 1 + app/Http/Resources/Company.php | 9 +- app/Http/Resources/Order.php | 17 +- app/Providers/AppServiceProvider.php | 6 +- app/Traits/ChecksIfFirstOrder.php | 14 + database/factories/AddressBookFactory .php | 11 +- database/factories/CompanyFactory.php | 2 +- ...18_09_08_072451_create_companies_table.php | 2 +- ...10_09_093427_create_address_book_table.php | 2 +- ...8_11_07_163923_create_warehouses_table.php | 2 +- database/seeds/AddressBookTableSeeder.php | 2 +- database/seeds/CompaniesTableSeeder.php | 4 +- database/seeds/DatabaseSeeder.php | 2 +- resources/assets/images/accounts-graphic.png | Bin 0 -> 72579 bytes resources/assets/vue/app.js | 1 + .../common/AccountsSearchComponent.vue | 1 - .../company/elements/CompanyComponenet.vue | 267 +++++++++----- .../company/lists/CompaniesListComponenet.vue | 11 +- .../form_elements/SelectComponent.vue | 4 +- .../order/elements/OrderHeaderComponenet.vue | 5 +- .../order/elements/OrderProfileComponent.vue | 54 ++- .../order/forms/AddonOrderFormComponent.vue | 2 +- .../order/forms/PackingFormComponenet.vue | 12 +- .../WarehouseBulkReceiveNoteFormComponent.vue | 180 ++++++++++ .../WarehouseReceiveNoteFormComponent.vue | 230 +++++------- .../order/lists/OrdersListComponent.vue | 2 - .../views/pages/accounts/index.blade.php | 329 +++++++++++------- .../views/pages/orders/receive_note.blade.php | 2 +- routes/api.php | 2 +- routes/web.php | 2 +- 35 files changed, 786 insertions(+), 430 deletions(-) create mode 100644 app/Traits/ChecksIfFirstOrder.php create mode 100644 resources/assets/images/accounts-graphic.png create mode 100644 resources/assets/vue/components/order/forms/WarehouseBulkReceiveNoteFormComponent.vue diff --git a/app/Classes/Modules/ControllersLogic/Orders/UpdateReceiveNoteLogic.php b/app/Classes/Modules/ControllersLogic/Orders/UpdateReceiveNoteLogic.php index 3310c37..7cb9665 100644 --- a/app/Classes/Modules/ControllersLogic/Orders/UpdateReceiveNoteLogic.php +++ b/app/Classes/Modules/ControllersLogic/Orders/UpdateReceiveNoteLogic.php @@ -6,6 +6,8 @@ use App\Classes\Constants; use App\Classes\Modules\ControllerLogic\Exceptions\InternalServerErrorException; use App\Classes\Modules\Orders\DataTransferObjects\OrderObject; use App\Classes\Modules\Orders\DataTransferObjects\StepObject; +use App\Classes\Modules\Orders\DataTransferObjects\TrackingNumberObject; +use App\Classes\Modules\Orders\Services\Attachments\UpdatesTrackingNumber; use App\Classes\Modules\Orders\Services\SetsOrderWarehouse; use App\Classes\Modules\Orders\Services\Steps\UpdatesStepCompleteDate; use App\Classes\ValueObjects\Constants\HttpStatus; @@ -20,15 +22,20 @@ class UpdateReceiveNoteLogic /** @var UpdatesStepCompleteDate */ private $updatesStepCompleteDate; + /** @var UpdatesTrackingNumber */ + private $updatesTrackingNumber; + /** * UpdateReceiveNoteLogic constructor. * @param SetsOrderWarehouse $setsOrderWarehouse * @param UpdatesStepCompleteDate $updatesStepCompleteDate + * @param UpdatesTrackingNumber $updatesTrackingNumber */ - public function __construct(SetsOrderWarehouse $setsOrderWarehouse, UpdatesStepCompleteDate $updatesStepCompleteDate) + public function __construct(SetsOrderWarehouse $setsOrderWarehouse, UpdatesStepCompleteDate $updatesStepCompleteDate, UpdatesTrackingNumber $updatesTrackingNumber) { $this->setsOrderWarehouse = $setsOrderWarehouse; $this->updatesStepCompleteDate = $updatesStepCompleteDate; + $this->updatesTrackingNumber = $updatesTrackingNumber; } @@ -41,17 +48,20 @@ class UpdateReceiveNoteLogic public function execute(string $orderId, Request $request){ try{ + $orderObject = new OrderObject($orderId, null, $request->input('warehouse_id')); - $this->setsOrderWarehouse->execute($orderObject); - $stepObject = new StepObject(Constants::ORDER_WAREHOUSE_RECEIVING_STEP, $request->input('complete_date')); - $this->updatesStepCompleteDate->execute($orderObject, $stepObject); + $this->setsOrderWarehouse->execute($orderObject); + $this->updatesStepCompleteDate->execute($orderId, $stepObject); + + $trackingNumberObject = new TrackingNumberObject(0, $request->input('tracking_number')); + $this->updatesTrackingNumber->execute($orderObject, $trackingNumberObject); return new JsonResponse([], HttpStatus::RESOURCE_CREATED); }catch(\Exception $exception) { - throw new InternalServerErrorException("Failed to update order's packing list because {$exception->getMessage()}"); + throw new InternalServerErrorException("Failed to update order's receive note because {$exception->getMessage()}"); } diff --git a/app/Classes/Modules/ControllersLogic/Orders/UpdateWarehouseLogic.php b/app/Classes/Modules/ControllersLogic/Orders/UpdateWarehouseLogic.php index 64e3709..e03c3cf 100644 --- a/app/Classes/Modules/ControllersLogic/Orders/UpdateWarehouseLogic.php +++ b/app/Classes/Modules/ControllersLogic/Orders/UpdateWarehouseLogic.php @@ -43,7 +43,7 @@ class UpdateWarehouseLogic return new JsonResponse(null, HttpStatus::REQUEST_ACCEPTED); } catch (\Exception $exception){ - throw new InternalServerErrorException("Failed to update order's packing list because {$exception->getMessage()}"); + throw new InternalServerErrorException("Failed to set warehouse because {$exception->getMessage()}"); } diff --git a/app/Classes/Modules/Orders/Services/ListsOrder.php b/app/Classes/Modules/Orders/Services/ListsOrder.php index 8801ae3..d00f05a 100644 --- a/app/Classes/Modules/Orders/Services/ListsOrder.php +++ b/app/Classes/Modules/Orders/Services/ListsOrder.php @@ -23,8 +23,6 @@ class ListsOrder public function execute(String $category){ - //$order = $this->repository->where('complete',1)->paginate(10); - $category === 'complete' ? $order = $this->repository->where('complete',true)->paginate(10) : $order = $this->repository->where('complete',false)->paginate(10); return OrderResource::collection($order); diff --git a/app/Classes/Modules/Orders/Services/ListsOrderHistory.php b/app/Classes/Modules/Orders/Services/ListsOrderHistory.php index 4ba4f2c..2ecb9ad 100644 --- a/app/Classes/Modules/Orders/Services/ListsOrderHistory.php +++ b/app/Classes/Modules/Orders/Services/ListsOrderHistory.php @@ -25,7 +25,7 @@ class ListsOrderHistory } - public function execute(string $orderId, Carbon $createdAt, bool $complete, Carbon $lastUpdate){ + public function execute(string $orderId, Carbon $createdAt){ /** @var Order $order */ $order = Order::findOrFail($orderId); @@ -39,14 +39,14 @@ class ListsOrderHistory switch ($step->reference_id){ case Constants::ORDER_PROCESSING_STEP: if($order->warehouse_id){ - $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => Warehouse::find($order->warehouse_id)->first()->name.' confirmed as your order\'s warehouse']); + $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => Warehouse::where('id', $order->warehouse_id)->first()->name.' confirmed as your order\'s warehouse']); } break; case Constants::ORDER_NO_WAREHOUSE_PENDING_SUPPLIER: $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => 'Your Order has been loaded into container']); break; case Constants::ORDER_WAREHOUSE_RECEIVING_STEP: - $warehouse = Warehouse::find($order->warehouse_id)->first(); + $warehouse = Warehouse::where('id', $order->warehouse_id)->first(); $this->history->push(['type' => 1, 'date' => $completeDate, 'description' => 'Arrived at '. $warehouse->name .' warehouse in china']); break; case Constants::ORDER_WAREHOUSE_PACKING_STEP: diff --git a/app/Classes/Modules/Orders/Services/SetsOrderWarehouse.php b/app/Classes/Modules/Orders/Services/SetsOrderWarehouse.php index 2bd408d..de0683b 100644 --- a/app/Classes/Modules/Orders/Services/SetsOrderWarehouse.php +++ b/app/Classes/Modules/Orders/Services/SetsOrderWarehouse.php @@ -29,10 +29,10 @@ class SetsOrderWarehouse */ public function execute(OrderObject $order){ try { - /** @var Order $repository */ - $repository = $this->repository->findOrFail($order->getOrderId()); - $repository->warehouse_id = $order->getWarehouseId(); - $repository->save(); + /** @var Order $orderRepository */ + $orderRepository = $this->repository->findOrFail($order->getOrderId()); + $orderRepository->warehouse_id = $order->getWarehouseId(); + $orderRepository->save(); } catch (\Exception $exception){ throw new CannotUpdateOrderWarehouseException($exception->getMessage()); diff --git a/app/Http/Controllers/TestController.php b/app/Http/Controllers/TestController.php index b835847..235c395 100644 --- a/app/Http/Controllers/TestController.php +++ b/app/Http/Controllers/TestController.php @@ -29,6 +29,7 @@ class TestController extends Controller public function index(Request $request){ + dd(Company::find(1)->contacts()->get()); $companiesImport = Excel::toArray(new CompaniesImport(), $request->file('xsl')); $companies = new Collection(); diff --git a/app/Http/Resources/Company.php b/app/Http/Resources/Company.php index 7ea7547..8f33496 100644 --- a/app/Http/Resources/Company.php +++ b/app/Http/Resources/Company.php @@ -6,6 +6,7 @@ use App\Classes\Constants; use App\Classes\Modules\Documents\ListDocuments; use Illuminate\Http\Resources\Json\JsonResource; use App\Models\AddressBook; +use Illuminate\Support\Facades\DB; class Company extends JsonResource { @@ -20,7 +21,7 @@ class Company extends JsonResource { $billing = AddressBook::where('company_id', $this->id) ->where('billing', true)->first(); - + $reports = \App\Models\Order::select(DB::raw('count(*) total'), DB::raw('SUM(CASE WHEN complete = 0 THEN 0 ELSE 1 END) active'))->where('company_id', $this->id)->first(); return [ 'id' => $this->id, 'name' => $this->name, @@ -35,7 +36,11 @@ class Company extends JsonResource 'post_code' => $billing ? $billing->post_code : null, 'country' => $billing ? $billing->country : null, 'registration_certificate' => (new ListDocuments(Constants::MODULE_TYPES['company'], $this->id, 'registration_certificate'))->execute(), - 'logo' => (new ListDocuments(Constants::MODULE_TYPES['company'], $this->id, 'logo'))->execute() + 'logo' => (new ListDocuments(Constants::MODULE_TYPES['company'], $this->id, 'logo'))->execute(), + 'order_reports' => [ + 'total' => (int) $reports->total, + 'active' => (int) $reports->active + ] ]; } } diff --git a/app/Http/Resources/Order.php b/app/Http/Resources/Order.php index 78f2344..cd27bcf 100644 --- a/app/Http/Resources/Order.php +++ b/app/Http/Resources/Order.php @@ -7,11 +7,15 @@ use App\Classes\Modules\Steps\GetStep; use App\Classes\Modules\Steps\StepAttachments; use App\Models\OrderStep; use App\Http\Resources\OrderStep as OrderStepResource; +use App\Models\TrackingNumber; +use Carbon\Carbon; use Illuminate\Http\Resources\Json\JsonResource; use App\Models\AddressBook as AddressBookModel; use App\Models\DeliveryArrangement as DeliveryArrangementModel; use App\Models\PackingList as PackingListModel; use App\Models\ShippingArrangement as ShippingArrangementModel; +use App\Models\Warehouse as WarehouseModel; +use App\Models\Company as CompanyModel; class Order extends JsonResource { @@ -23,14 +27,16 @@ class Order extends JsonResource */ public function toArray($request) { - $addressBook = AddressBookModel::where('id', $this->address_id)->first(); + $warehouse = $this->warehouse_id ? WarehouseModel::where('id', $this->warehouse_id)->first() : null; + $receiveDate = OrderStep::where('order_id', $this->id)->where('reference_id', 'MS_WAREHOUSE_RECEIVING')->pluck('complete_date')->first(); return [ 'id' => $this->id, 'marking' => $this->marking, + 'company' => CompanyModel::where('id', $this->company_id)->first(), 'forwarder_id' => $this->forwarder_id, 'supplier_id' => $this->supplier_id, 'warehouse_id' => $this->warehouse_id, - 'address' => new AddressBook($addressBook), + 'address' => new AddressBook(AddressBookModel::where('id', $this->address_id)->first()), 'complete' => (int)$this->complete, 'date' => $this->created_at->format('d/m/Y'), 'current_step' => [ @@ -38,7 +44,12 @@ class Order extends JsonResource 'attachments' => (new StepAttachments())->execute($this->id, $this->current_step) ], 'steps' => OrderStepResource::collection(OrderStep::where('order_id', $this->id)->orderBy('sequence')->get()), - 'details' => (new ListsOrderHistory())->execute($this->id, $this->created_at, $this->complete, $this->updated_at), + 'details' => (new ListsOrderHistory())->execute($this->id, $this->created_at), + 'receive_note' => [ + 'warehouse_name' => $warehouse ? $warehouse->name : null, + 'tracking_number' => TrackingNumber::Where('order_id', $this->id)->where('type', 0)->pluck('tracking_no')->first(), + 'receive_date' => $receiveDate ? Carbon::parse($receiveDate)->format('d-m-Y') : null + ], 'packing_list' => new PackingList(PackingListModel::where('order_id', $this->id)->first()), 'shipping_arrangement' => new ShippingArrangement(ShippingArrangementModel::where('order_id', $this->id)->first()), 'delivery_arrangement' => new DeliveryArrangement(DeliveryArrangementModel::where('order_id', $this->id)->first()) diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index e4b6e1a..ec2e7de 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -3,6 +3,8 @@ namespace App\Providers; use App\Http\ViewComposers\CountriesListComposer; +use Faker\Factory; +use Faker\Generator; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; @@ -28,6 +30,8 @@ class AppServiceProvider extends ServiceProvider */ public function register() { - // + $this->app->singleton(Generator::class, function () { + return Factory::create('ms_MY'); + }); } } diff --git a/app/Traits/ChecksIfFirstOrder.php b/app/Traits/ChecksIfFirstOrder.php new file mode 100644 index 0000000..52b25bf --- /dev/null +++ b/app/Traits/ChecksIfFirstOrder.php @@ -0,0 +1,14 @@ +get()->isEmpty(); + } + +} \ No newline at end of file diff --git a/database/factories/AddressBookFactory .php b/database/factories/AddressBookFactory .php index 4f8d70f..5e559bb 100644 --- a/database/factories/AddressBookFactory .php +++ b/database/factories/AddressBookFactory .php @@ -4,13 +4,14 @@ use Faker\Generator as Faker; $factory->define(App\Models\AddressBook::class, function (Faker $faker) { return [ - 'company_id' => $faker->numberBetween(1, 30), - 'reference' => $faker->name, - 'contact' => $faker->numerify('01########'), + 'reference' => $faker->firstName.' '.$faker->lastName, + 'contact' => $faker->phoneNumber, 'street_one' => $faker->streetAddress, 'city' => $faker->city, - 'state' => $faker->city, + 'state' => $faker->state, 'post_code' => $faker->postcode, - 'country' => $faker->country + 'country' => 'Malaysia', + 'default' => 1, + 'billing' => 1 ]; }); diff --git a/database/factories/CompanyFactory.php b/database/factories/CompanyFactory.php index 9cf7b9c..84264d7 100644 --- a/database/factories/CompanyFactory.php +++ b/database/factories/CompanyFactory.php @@ -4,7 +4,7 @@ use Faker\Generator as Faker; $factory->define(App\Models\Company::class, function (Faker $faker) { return [ - 'name' => $faker->company, + 'name' => $faker->firstName.' '.$faker->companySuffix, 'marking' => 'CIEF/'.$faker->numerify('###').$faker->regexify('[A-Z]{3}'), 'email' => $faker->companyEmail, 'registration_no' => $faker->numerify('######-W'), diff --git a/database/migrations/2018_09_08_072451_create_companies_table.php b/database/migrations/2018_09_08_072451_create_companies_table.php index 7470a22..a80d4e9 100644 --- a/database/migrations/2018_09_08_072451_create_companies_table.php +++ b/database/migrations/2018_09_08_072451_create_companies_table.php @@ -15,7 +15,7 @@ class CreateCompaniesTable extends Migration { Schema::create('companies', function (Blueprint $table) { $table->increments('id'); - $table->string('name', 80); + $table->string('name'); $table->string('marking', 80)->unique(); $table->string('email', 80)->nullable(); $table->string('wechat_id', 80)->nullable(); diff --git a/database/migrations/2018_10_09_093427_create_address_book_table.php b/database/migrations/2018_10_09_093427_create_address_book_table.php index 935eb8b..f016833 100644 --- a/database/migrations/2018_10_09_093427_create_address_book_table.php +++ b/database/migrations/2018_10_09_093427_create_address_book_table.php @@ -16,7 +16,7 @@ class CreateAddressBookTable extends Migration Schema::create('address_book', function (Blueprint $table) { $table->increments('id'); $table->integer('company_id')->unsigned()->index(); - $table->string('reference', 50)->nullable(); + $table->string('reference')->nullable(); $table->string('contact', 25)->nullable(); $table->string('street_one', 80)->nullable(); $table->string('street_two', 80)->nullable(); diff --git a/database/migrations/2018_11_07_163923_create_warehouses_table.php b/database/migrations/2018_11_07_163923_create_warehouses_table.php index 1d59e51..6a1a879 100644 --- a/database/migrations/2018_11_07_163923_create_warehouses_table.php +++ b/database/migrations/2018_11_07_163923_create_warehouses_table.php @@ -15,7 +15,7 @@ class CreateWarehousesTable extends Migration { Schema::create('warehouses', function (Blueprint $table) { $table->increments('id'); - $table->string('name', 50); + $table->string('name'); $table->string('email', 80)->nullable(); $table->string('street_one', 80)->nullable(); $table->string('street_two', 80)->nullable(); diff --git a/database/seeds/AddressBookTableSeeder.php b/database/seeds/AddressBookTableSeeder.php index 4289f0b..01e69d0 100644 --- a/database/seeds/AddressBookTableSeeder.php +++ b/database/seeds/AddressBookTableSeeder.php @@ -11,6 +11,6 @@ class AddressBookTableSeeder extends Seeder */ public function run() { - factory(App\Models\AddressBook::class, 300)->create(); + factory(App\Models\AddressBook::class, 2)->create(); } } diff --git a/database/seeds/CompaniesTableSeeder.php b/database/seeds/CompaniesTableSeeder.php index eacee77..0783108 100644 --- a/database/seeds/CompaniesTableSeeder.php +++ b/database/seeds/CompaniesTableSeeder.php @@ -11,6 +11,8 @@ class CompaniesTableSeeder extends Seeder */ public function run() { - factory(App\Models\Company::class, 30)->create(); + factory(App\Models\Company::class, 30)->create()->each(function ($company) { + $company->addressBook()->save(factory(App\Models\AddressBook::class)->make()); + }); } } diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php index 514b2d7..bac94c5 100644 --- a/database/seeds/DatabaseSeeder.php +++ b/database/seeds/DatabaseSeeder.php @@ -12,7 +12,7 @@ class DatabaseSeeder extends Seeder public function run(): void { if(app()->environment() !== "production"){ $this->call(CompaniesTableSeeder::class); - $this->call(AddressBookTableSeeder::class); +// $this->call(AddressBookTableSeeder::class); $this->call(ContactsTableSeeder::class); $this->call(WarehousesTableSeeder::class); // $this->call(OrdersTableSeeder::class); diff --git a/resources/assets/images/accounts-graphic.png b/resources/assets/images/accounts-graphic.png new file mode 100644 index 0000000000000000000000000000000000000000..d7fc0bed3858ee79c2ed6b59b942621ab081bd25 GIT binary patch literal 72579 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