diff --git a/.gitignore b/.gitignore
index a4dfdd60..95d268cf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,4 +13,15 @@ npm-debug.log
yarn-error.log
/storage/file
composer.lock
-yarn.lock
\ No newline at end of file
+yarn.lock
+.DS_Store
+public/.DS_Store
+public/images/.DS_Store
+gox.iml
+rebuild_docker.sh
+docker/*
+db/*
+docker-compose.yml
+package-lock.json
+public/*
+/public/*
\ No newline at end of file
diff --git a/app/Classes/General/Eloquent/Filters/ConvertibleCurrencyId.php b/app/Classes/General/Eloquent/Filters/ConvertibleCurrencyId.php
new file mode 100644
index 00000000..3d5701f7
--- /dev/null
+++ b/app/Classes/General/Eloquent/Filters/ConvertibleCurrencyId.php
@@ -0,0 +1,20 @@
+where('convertible_currency_id', $value);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Classes/General/Eloquent/Filters/FixedCurrencyId.php b/app/Classes/General/Eloquent/Filters/FixedCurrencyId.php
new file mode 100644
index 00000000..bd582f82
--- /dev/null
+++ b/app/Classes/General/Eloquent/Filters/FixedCurrencyId.php
@@ -0,0 +1,20 @@
+where('fix_currency_id', $value);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Classes/General/Eloquent/Filters/IdIn.php b/app/Classes/General/Eloquent/Filters/IdIn.php
new file mode 100644
index 00000000..cfe9358e
--- /dev/null
+++ b/app/Classes/General/Eloquent/Filters/IdIn.php
@@ -0,0 +1,20 @@
+whereIn('id', $value);
+ }
+
+}
\ No newline at end of file
diff --git a/app/Classes/Modules/Bookings/ControllersLogic/MergeBookingLogic.php b/app/Classes/Modules/Bookings/ControllersLogic/MergeBookingLogic.php
new file mode 100644
index 00000000..23cce87f
--- /dev/null
+++ b/app/Classes/Modules/Bookings/ControllersLogic/MergeBookingLogic.php
@@ -0,0 +1,98 @@
+ 'Merge Booking',
+ 'message' => 'You have successfully merged Booking'
+ ];
+ }
+
+ /** @var CanCreateBooking */
+ private $canMergeBooking;
+
+ /** @var CreatesBooking */
+ private $createsBooking;
+
+ /** @var GeneratesBookingMarking */
+ private $generatesBookingMarking;
+
+ /** @var FetchesCompany */
+ private $fetchesCompany;
+
+ /** @var FetchesCompany */
+ private $fetchesBooking;
+
+ /**
+ * CreateBookingLogic constructor.
+ * @param CanMergeBooking $canMergeBooking
+ * @param CreatesBooking $createsBooking
+ * @param GeneratesBookingMarking $generatesBookingMarking
+ * @param FetchesCompany $fetchesCompany
+ */
+ public function __construct(CanMergeBooking $canMergeBooking, CreatesBooking $createsBooking, GeneratesBookingMarking $generatesBookingMarking, FetchesCompany $fetchesCompany, FetchesBooking $fetchesBooking)
+ {
+ $this->canMergeBooking = $canMergeBooking;
+ $this->createsBooking = $createsBooking;
+ $this->generatesBookingMarking = $generatesBookingMarking;
+ $this->fetchesCompany = $fetchesCompany;
+ $this->fetchesBooking = $fetchesBooking;
+ }
+
+
+ /**
+ * @param Request $request
+ * @return JsonResponse
+ * @throws \App\Classes\Exceptions\AccessForbiddenException
+ * @throws \App\Classes\Exceptions\RequestValidationException
+ * @throws \App\Classes\Exceptions\ResourceNotFoundException
+ */
+ public function logic(Request $request) : JsonResponse
+ {
+ $object = new BookingMergeObject($request->get('booking_ids'));
+
+ $this->canMergeBooking->passes($object);
+
+ /*
+ $bookings = $this->fetchesBooking->execute([
+ 'id_in'=> $object->getBookingIds(),
+ 'status' => ApprovalStatus::APPROVED,
+ ]);
+ */
+ #TODO: Fetch transaction (+details) record, reassign transaction id & recalculate amount
+
+ //dd($bookings);
+
+ return $this->response();
+
+ }
+}
\ No newline at end of file
diff --git a/app/Classes/Modules/Bookings/DataTransferObjects/BookingMergeObject.php b/app/Classes/Modules/Bookings/DataTransferObjects/BookingMergeObject.php
new file mode 100644
index 00000000..5b590145
--- /dev/null
+++ b/app/Classes/Modules/Bookings/DataTransferObjects/BookingMergeObject.php
@@ -0,0 +1,30 @@
+bookingIds = $bookingIds;
+ }
+
+ /**
+ * @return array
+ */
+ public function getBookingIds(): array
+ {
+ return $this->bookingIds;
+ }
+
+}
\ No newline at end of file
diff --git a/app/Classes/Modules/Bookings/Standards/Rules/CanMergeBooking.php b/app/Classes/Modules/Bookings/Standards/Rules/CanMergeBooking.php
new file mode 100644
index 00000000..64e89127
--- /dev/null
+++ b/app/Classes/Modules/Bookings/Standards/Rules/CanMergeBooking.php
@@ -0,0 +1,51 @@
+bookingMergeValidation = $bookingMergeValidation;
+ }
+
+ /**
+ * @return bool
+ */
+ protected function authorized(): bool
+ {
+ return true;
+ }
+
+ /**
+ * @param BookingObject $object
+ * @return bool
+ * @throws \App\Classes\Exceptions\RequestValidationException
+ */
+ protected function validators($object): bool
+ {
+ return $this->bookingMergeValidation->validate($object);
+ }
+
+ /**
+ * @param BookingObject $object
+ * @return bool
+ */
+ protected function criteria($object): bool
+ {
+ return true;
+ }
+}
\ No newline at end of file
diff --git a/app/Classes/Modules/Bookings/Standards/Validators/BookingMergeValidation.php b/app/Classes/Modules/Bookings/Standards/Validators/BookingMergeValidation.php
new file mode 100644
index 00000000..b7e77712
--- /dev/null
+++ b/app/Classes/Modules/Bookings/Standards/Validators/BookingMergeValidation.php
@@ -0,0 +1,39 @@
+ $object->getBookingIds()
+ ];
+ }
+
+ /**
+ * @return array
+ */
+ protected function rules(): array
+ {
+ return [
+ 'booking_ids' => 'required|array|min:2',
+ ];
+ }
+
+ /**
+ * @return array
+ */
+ protected function messages(): array
+ {
+ return [];
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Bookings/MergeBookingController.php b/app/Http/Controllers/Bookings/MergeBookingController.php
new file mode 100644
index 00000000..40d733a9
--- /dev/null
+++ b/app/Http/Controllers/Bookings/MergeBookingController.php
@@ -0,0 +1,19 @@
+execute($request);
+ }
+}
\ No newline at end of file
diff --git a/resources/assets/vue/components/bookings/elements/BookingMergeableComponent.vue b/resources/assets/vue/components/bookings/elements/BookingMergeableComponent.vue
new file mode 100644
index 00000000..a8aea8a2
--- /dev/null
+++ b/resources/assets/vue/components/bookings/elements/BookingMergeableComponent.vue
@@ -0,0 +1,58 @@
+
+ Merge multiple transfer orders to generate a single invoice for your purchase order Select Transfer Orders to merge with the order above