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 0000000..d7fc0be Binary files /dev/null and b/resources/assets/images/accounts-graphic.png differ diff --git a/resources/assets/vue/app.js b/resources/assets/vue/app.js index 50734f3..4835544 100644 --- a/resources/assets/vue/app.js +++ b/resources/assets/vue/app.js @@ -112,6 +112,7 @@ Vue.component('warehouse-form-component', require('./components/warehouse/forms/ Vue.component('order-form-component', require('./components/order/forms/OrderFormComponent.vue')); Vue.component('addon-order-form-component', require('./components/order/forms/AddonOrderFormComponent.vue')); Vue.component('warehouse-receive-note-form-component', require('./components/order/forms/WarehouseReceiveNoteFormComponent.vue')); +Vue.component('warehouse-bulk-receive-note-form-component', require('./components/order/forms/WarehouseBulkReceiveNoteFormComponent.vue')); Vue.component('packing-list-form-component', require('./components/order/forms/PackingFormComponenet.vue')); Vue.component('shipping-arrangement-form-component', require('./components/order/forms/ShippingArrangmentFormComponenet.vue')); Vue.component('delivery-arrangement-form-component', require('./components/order/forms/DeliveryArrangmentFormComponenet.vue')); diff --git a/resources/assets/vue/components/common/AccountsSearchComponent.vue b/resources/assets/vue/components/common/AccountsSearchComponent.vue index 1d5a8cc..472633a 100644 --- a/resources/assets/vue/components/common/AccountsSearchComponent.vue +++ b/resources/assets/vue/components/common/AccountsSearchComponent.vue @@ -36,7 +36,6 @@
-
\ No newline at end of file diff --git a/resources/assets/vue/components/order/elements/OrderProfileComponent.vue b/resources/assets/vue/components/order/elements/OrderProfileComponent.vue index 7536e96..a00da4d 100644 --- a/resources/assets/vue/components/order/elements/OrderProfileComponent.vue +++ b/resources/assets/vue/components/order/elements/OrderProfileComponent.vue @@ -50,7 +50,7 @@ -
+
@@ -66,21 +66,22 @@
-
-
-
-
Receive Note
+
+
+
+
+
Receive Note
-
+
-
Warehouse
+
Warehouse
-

GZ-BY-V01 广州白云江高仓库

+

{{order.receive_note.warehouse_name}}

@@ -88,32 +89,39 @@
-
Receive Date
+
Receive Date
-

06/05/2019

+

{{order.receive_note.receive_date ? order.receive_note.receive_date : 'empty' }}

-
Tracking Number
+
Tracking Number
-

432456453

+

{{order.receive_note.tracking_number ? order.receive_note.tracking_number : 'empty' }}

-
Edit Note
+
Edit Note
+ +
+
+ +
+
+
@@ -260,7 +268,7 @@ Shipping
- Reschedule Shipping + Reschedule Shipping
@@ -289,7 +297,7 @@
Remark
-
{{schedule.remark}}...
+
{{schedule.issue_remark}}...
@@ -335,7 +343,7 @@ Delivery
- Reschedule Delivery + Reschedule Delivery
@@ -359,7 +367,19 @@
{{schedule.ETA}}
-
+
+
+
Remark
+
+
+
{{schedule.issue_remark}}...
+
+
+
+ + + +
diff --git a/resources/assets/vue/components/order/forms/AddonOrderFormComponent.vue b/resources/assets/vue/components/order/forms/AddonOrderFormComponent.vue index 589ccc9..493a2af 100644 --- a/resources/assets/vue/components/order/forms/AddonOrderFormComponent.vue +++ b/resources/assets/vue/components/order/forms/AddonOrderFormComponent.vue @@ -40,7 +40,7 @@
- +
diff --git a/resources/assets/vue/components/order/forms/PackingFormComponenet.vue b/resources/assets/vue/components/order/forms/PackingFormComponenet.vue index 79950f9..305fb44 100644 --- a/resources/assets/vue/components/order/forms/PackingFormComponenet.vue +++ b/resources/assets/vue/components/order/forms/PackingFormComponenet.vue @@ -147,7 +147,7 @@
- +
@@ -260,6 +260,16 @@ } }, methods: { + openMessurments(event){ + var code = event.keyCode || event.which; + + if (code === 9) { + event.preventDefault(); + $(event.target).parents('.package-thumbnail').find('.dropdown').addClass('show'); + $(event.target).parents('.package-thumbnail').find('.dropdown-menu').addClass('show'); + $(event.target).parents('.package-thumbnail').find('.dropdown-menu input').first().select(); + } + }, updatePackingList() { //turn on loading animation this.isLoading = true; diff --git a/resources/assets/vue/components/order/forms/WarehouseBulkReceiveNoteFormComponent.vue b/resources/assets/vue/components/order/forms/WarehouseBulkReceiveNoteFormComponent.vue new file mode 100644 index 0000000..85c4ba6 --- /dev/null +++ b/resources/assets/vue/components/order/forms/WarehouseBulkReceiveNoteFormComponent.vue @@ -0,0 +1,180 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/order/forms/WarehouseReceiveNoteFormComponent.vue b/resources/assets/vue/components/order/forms/WarehouseReceiveNoteFormComponent.vue index 85c4ba6..798d635 100644 --- a/resources/assets/vue/components/order/forms/WarehouseReceiveNoteFormComponent.vue +++ b/resources/assets/vue/components/order/forms/WarehouseReceiveNoteFormComponent.vue @@ -1,179 +1,111 @@ +