diff --git a/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php b/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php
index afd8f3d7..eee596b0 100644
--- a/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php
+++ b/app/Classes/Modules/PackingLists/ControllersLogic/CreatePackingListLogic.php
@@ -2,24 +2,26 @@
namespace App\Classes\Modules\PackingLists\ControllersLogic;
-use App\Classes\Modules\Companies\Services\FetchesCompany;
-use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
-use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor;
-use App\Classes\Modules\Orders\Services\FetchesOrder;
-use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage;
-use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\General\Abstracts\AbstractControllerLogic;
-use App\Classes\Modules\PackingLists\Services\CreatesPackingList;
-use App\Classes\Modules\PackingLists\Services\CreatesPackingListPackage;
-use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList;
-use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingListPackage;
+use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor;
+use App\Classes\Modules\PackingLists\Processors\CreatePackageProcessor;
+use App\Classes\Modules\Orders\Services\FetchesOrder;
+use App\Classes\Modules\Transports\Services\CreatesTransport;
+use App\Classes\Modules\PackingLists\Services\GeneratesPackingListReferenceNumber;
+use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
+use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
+use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
+use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
+use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
+use App\Classes\ValueObjects\Constants\TransportType;
use App\Http\Resources\PackingListResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
+use Carbon\Carbon;
class CreatePackingListLogic extends AbstractControllerLogic
{
@@ -38,6 +40,18 @@ class CreatePackingListLogic extends AbstractControllerLogic
/** @var CreatePackingListProcessor */
private $createPackingListProcessor;
+ /** @var GeneratesPackingListReferenceNumber */
+ private $generatesPackingListReferenceNumber;
+
+ /** @var CreatesTransport */
+ private $createsTransport;
+
+ /** @var CreatePackageProcessor */
+ private $createPackageProcessor;
+
+ /** @var CreatesSchedule */
+ private $createsSchedule;
+
/** @var FetchesOrder */
private $fetchesOrder;
@@ -46,9 +60,20 @@ class CreatePackingListLogic extends AbstractControllerLogic
* @param CreatePackingListProcessor $createPackingListProcessor
* @param FetchesOrder $fetchesOrder
*/
- public function __construct(CreatePackingListProcessor $createPackingListProcessor, FetchesOrder $fetchesOrder)
+ public function __construct(
+ CreatePackingListProcessor $createPackingListProcessor,
+ CreatesTransport $createsTransport,
+ CreatesSchedule $createsSchedule,
+ CreatePackageProcessor $createPackageProcessor,
+ GeneratesPackingListReferenceNumber $generatesPackingListReferenceNumber,
+ FetchesOrder $fetchesOrder
+ )
{
$this->createPackingListProcessor = $createPackingListProcessor;
+ $this->createsTransport = $createsTransport;
+ $this->createsSchedule = $createsSchedule;
+ $this->createPackageProcessor = $createPackageProcessor;
+ $this->generatesPackingListReferenceNumber = $generatesPackingListReferenceNumber;
$this->fetchesOrder = $fetchesOrder;
}
@@ -58,15 +83,42 @@ class CreatePackingListLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
+ $order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]);
- $order = $this->fetchesOrder->execute(['reference' => $request->input('reference_number')]);
-
- $packingListObject = new PackingListObject($request->input('reference_number'), $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::PENDING_SUBMISSION);
+ $reference_number = $this->generatesPackingListReferenceNumber->execute();
+ $packingListObject = new PackingListObject(
+ $reference_number,
+ $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id,
+ PackingListType::WAREHOUSE_RECEIVE_LIST,
+ ApprovalStatus::PENDING_SUBMISSION
+ );
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
- return $this->resourceResponse(new PackingListResource($packingList));
+ $transportObject = new TransportObject(TransportType::LAND, null, $request->input('tracking'), Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED);
+ $transport = $this->createsTransport->execute($transportObject, $packingList);
+ $scheduleObject = new ScheduleObject(Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED);
+ $schedule = $this->createsSchedule->execute($transport, $scheduleObject);
+
+ $packages = $request->input('packages');
+
+ foreach ($packages as $key => $row) {
+ $packageObject = new PackageObject(
+ $row['type'],
+ $row['description'],
+ $row['width'],
+ $row['height'],
+ $row['length'],
+ $row['weight'],
+ $row['quantity'],
+ ApprovalStatus::APPROVED,
+ $row['reference'],
+ );
+ $this->createPackageProcessor->execute($packageObject, $packingList);
+ }
+
+ return $this->resourceResponse(new PackingListResource($packingList));
}
}
diff --git a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php
index 7b5a86d1..982b7307 100644
--- a/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php
+++ b/app/Classes/Modules/PackingLists/Processors/CreatePackingListProcessor.php
@@ -20,7 +20,7 @@ class CreatePackingListProcessor
/**
- * CreatePackingListLogic constructor.
+ * CreatePackingListProcessor constructor.
* @param CanCreatePackingList $canCreatePackingList
* @param CreatesPackingList $createsPackingList
*/
diff --git a/app/Classes/Modules/PackingLists/Services/ChecksIfPackingListReferenceNumberExists.php b/app/Classes/Modules/PackingLists/Services/ChecksIfPackingListReferenceNumberExists.php
new file mode 100644
index 00000000..6ff6d0e6
--- /dev/null
+++ b/app/Classes/Modules/PackingLists/Services/ChecksIfPackingListReferenceNumberExists.php
@@ -0,0 +1,21 @@
+repository = $repository;
+ }
+
+ public function execute(string $reference_number): bool {
+ return $this->repository->where('reference', $reference_number)->exists();
+ }
+
+}
\ No newline at end of file
diff --git a/app/Classes/Modules/PackingLists/Services/GeneratesPackageListReferenceNumber.php b/app/Classes/Modules/PackingLists/Services/GeneratesPackageListReferenceNumber.php
new file mode 100644
index 00000000..7054facf
--- /dev/null
+++ b/app/Classes/Modules/PackingLists/Services/GeneratesPackageListReferenceNumber.php
@@ -0,0 +1,30 @@
+checksIfPackingListReferenceNumberExists = $checksIfPackingListReferenceNumberExists;
+ }
+
+ /**
+ * @return string
+ */
+ public function execute(): string {
+
+ $referenceNumber = mt_rand(10000000, 99999999);
+
+ return !$this->checksIfPackingListReferenceNumberExists->execute($referenceNumber) ? $referenceNumber : self::execute();
+ }
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index 26b57108..d5b37663 100644
--- a/package.json
+++ b/package.json
@@ -30,6 +30,7 @@
"v-money": "^0.8.1",
"vue": "^2.6.10",
"vue-avatar": "^2.1.8",
+ "vue-bootstrap-datetimepicker": "^5.0.1",
"vue-debounce": "^2.6.0",
"vue-template-compiler": "^2.6.10",
"vue-the-mask": "^0.11.1",
diff --git a/resources/assets/sass/modules/_form_elements.scss b/resources/assets/sass/modules/_form_elements.scss
index e242894f..00b41ed2 100644
--- a/resources/assets/sass/modules/_form_elements.scss
+++ b/resources/assets/sass/modules/_form_elements.scss
@@ -560,7 +560,6 @@ input[type=checkbox]:checked + label{
padding-left: 12px;
padding-right: 12px;
padding-bottom: 4px;
- overflow: hidden;
width: 100%;
@include transition(background-color .2s ease);
&.required:after {
diff --git a/resources/assets/vue/components/general/forms/DatePickerComponent.vue b/resources/assets/vue/components/general/forms/DatePickerComponent.vue
new file mode 100644
index 00000000..c11eee85
--- /dev/null
+++ b/resources/assets/vue/components/general/forms/DatePickerComponent.vue
@@ -0,0 +1,37 @@
+
+