diff --git a/app/Classes/General/Eloquent/Filters/HasActiveReward.php b/app/Classes/General/Eloquent/Filters/HasActiveReward.php
index 5770ca6e..26385b96 100644
--- a/app/Classes/General/Eloquent/Filters/HasActiveReward.php
+++ b/app/Classes/General/Eloquent/Filters/HasActiveReward.php
@@ -2,7 +2,6 @@
namespace App\Classes\General\Eloquent\Filters;
-use App\Classes\ValueObjects\Constants\RoleTypes;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\Auth;
@@ -12,33 +11,17 @@ class HasActiveReward implements Filter
/**
* @param Builder $builder
* @param $value
- * @return mixed
+ * @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
- if(in_array(Auth::user()->type, RoleTypes::ADMIN_ROLES)){
- // $userId = $value !== 1 ? $value : Auth::user()->id;
- $userId = $value;
- return $builder->where('user_id', $userId)
- ->where(function ($query) {
- $query->whereHas('reward', function ($subquery) {
- $subquery->where('is_active', true);
- })
- ->orWhereDoesntHave('reward');
- })
- ->whereDoesntHave('voucher.redemptions.transaction.booking.company.employees', function ($query) use ($userId) {
- $query->where('user_id', $userId);
+ return $builder->where('user_id', Auth::user()->id) //cief todo: should not use Auth::user()->id
+ ->where(function ($query) {
+ $query->whereHas('reward', function ($subquery) {
+ $subquery->where('is_active', true);
});
- }
- else{
- return $builder->where('user_id', Auth::user()->id)
- ->where(function ($query) {
- $query->whereHas('reward', function ($subquery) {
- $subquery->where('is_active', true);
- })
- ->orWhereDoesntHave('reward');
- })
- ->whereDoesntHave('voucher.redemptions.transaction.owner');
- }
+ // ->orWhereDoesntHave('reward');
+ });
}
+
}
diff --git a/app/Classes/General/Eloquent/Filters/HasActiveRewardForAdmin.php b/app/Classes/General/Eloquent/Filters/HasActiveRewardForAdmin.php
new file mode 100644
index 00000000..5d69aa4b
--- /dev/null
+++ b/app/Classes/General/Eloquent/Filters/HasActiveRewardForAdmin.php
@@ -0,0 +1,26 @@
+where('user_id', $value)
+ ->where(function ($query) {
+ $query->whereHas('reward', function ($subquery) {
+ $subquery->where('is_active', true);
+ });
+ // ->orWhereDoesntHave('reward');
+ });
+ }
+
+}
diff --git a/app/Classes/General/Eloquent/Filters/HasVouchersAll.php b/app/Classes/General/Eloquent/Filters/HasVouchersAll.php
new file mode 100644
index 00000000..d2ff7a2e
--- /dev/null
+++ b/app/Classes/General/Eloquent/Filters/HasVouchersAll.php
@@ -0,0 +1,44 @@
+type, RoleTypes::ADMIN_ROLES)){
+ // $userId = $value !== 1 ? $value : Auth::user()->id;
+ $userId = $value;
+ return $builder->where('user_id', $userId)
+ ->where(function ($query) {
+ $query->whereHas('reward', function ($subquery) {
+ $subquery->where('is_active', true);
+ })
+ ->orWhereDoesntHave('reward');
+ })
+ ->whereDoesntHave('voucher.redemptions.transaction.booking.company.employees', function ($query) use ($userId) {
+ $query->where('user_id', $userId);
+ });
+ }
+ else{
+ return $builder->where('user_id', Auth::user()->id)
+ ->where(function ($query) {
+ $query->whereHas('reward', function ($subquery) {
+ $subquery->where('is_active', true);
+ })
+ ->orWhereDoesntHave('reward');
+ })
+ ->whereDoesntHave('voucher.redemptions.transaction.owner');
+ }
+ }
+}
diff --git a/app/Classes/General/Eloquent/Filters/RandomName.php b/app/Classes/General/Eloquent/Filters/RandomName.php
deleted file mode 100644
index 54024e96..00000000
--- a/app/Classes/General/Eloquent/Filters/RandomName.php
+++ /dev/null
@@ -1,20 +0,0 @@
-where('is_active', $value);
- }
-
-}
diff --git a/app/Classes/Jobs/CreateMilestoneRewardByTransactionJob.php b/app/Classes/Jobs/CreateMilestoneRewardByTransactionJob.php
new file mode 100644
index 00000000..86208cc9
--- /dev/null
+++ b/app/Classes/Jobs/CreateMilestoneRewardByTransactionJob.php
@@ -0,0 +1,38 @@
+transaction = $transaction;
+ $this->milestones = $milestones;
+ }
+
+ public function handle()
+ {
+ (App()->make(MilestoneRewardByTransactionProcessor::class))->execute($this->transaction, $this->milestones);
+ }
+}
diff --git a/app/Classes/Jobs/ListDocumentsJob.php b/app/Classes/Jobs/ListDocumentsJob.php
index 6e93062b..25247c50 100644
--- a/app/Classes/Jobs/ListDocumentsJob.php
+++ b/app/Classes/Jobs/ListDocumentsJob.php
@@ -44,17 +44,6 @@ class ListDocumentsJob implements ShouldQueue
}
$result = (App()->make(ListDocumentsJobProcessor::class))->execute($this->listGenericJobObject);
-
- //cief todo: Insert into DB: job id, query result, timestamp
- // Store the result in the job_results table
-
- //cief todo: why cannot save data in table like this
- // $model = new JobResult();
- // $model->job_id = $this->job->getJobId();
- // $model->result = json_encode($result);
- // $model->save();
-
- // Log::error(json_encode($model->id));
}
public function getJobId(){
diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php
index 0f7bdb61..e56c0727 100644
--- a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php
+++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php
@@ -11,7 +11,6 @@ use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
use App\Classes\Modules\Companies\Processors\AssignSegmentProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
-use App\Classes\Modules\Milestones\Processors\CheckMilestonesForRewardProcessor;
use App\Classes\Modules\Vouchers\Processors\Voucherify\NewCustomerToVoucherifyProcessor;
use App\Classes\Modules\Vouchers\Processors\CreateVoucherProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
@@ -69,9 +68,6 @@ class CreateCustomerLogic extends AbstractControllerLogic
/** @var CreatesSeasonalSegment */
private $createsSeasonalSegment;
- /** @var CheckMilestonesForRewardProcessor */
- private $checkMilestonesForRewardProcessor;
-
/** @var NewCustomerToVoucherifyProcessor */
private $newCustomerToVoucherifyProcessor;
@@ -88,12 +84,11 @@ class CreateCustomerLogic extends AbstractControllerLogic
* @param AuthenticationProcessor $authenticationProcessor
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
* @param CreatesSeasonalSegment $createsSeasonalSegment
- * @param CheckMilestonesForRewardProcessor $checkMilestonesForRewardProcessor
* @param NewCustomerToVoucherifyProcessor $newCustomerToVoucherifyProcessor
* @param CreateVoucherProcessor $createVoucherProcessor
*/
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateContactProcessor $createContactProcessor, AssignEmployeeProcessor $assignEmployeeProcessor, AssignSegmentProcessor $assignSegmentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor,
- CreatesSeasonalSegment $createsSeasonalSegment, CheckMilestonesForRewardProcessor $checkMilestonesForRewardProcessor, NewCustomerToVoucherifyProcessor $newCustomerToVoucherifyProcessor, CreateVoucherProcessor $createVoucherProcessor)
+ CreatesSeasonalSegment $createsSeasonalSegment, NewCustomerToVoucherifyProcessor $newCustomerToVoucherifyProcessor, CreateVoucherProcessor $createVoucherProcessor)
{
$this->createUserProcessor = $createUserProcessor;
$this->createCompanyProcessor = $createCompanyProcessor;
@@ -103,7 +98,6 @@ class CreateCustomerLogic extends AbstractControllerLogic
$this->authenticationProcessor = $authenticationProcessor;
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
$this->createsSeasonalSegment = $createsSeasonalSegment;
- $this->checkMilestonesForRewardProcessor = $checkMilestonesForRewardProcessor;
$this->newCustomerToVoucherifyProcessor = $newCustomerToVoucherifyProcessor;
$this->createVoucherProcessor = $createVoucherProcessor;
}
diff --git a/app/Classes/Modules/Accounts/Processors/AuthenticationProcessor.php b/app/Classes/Modules/Accounts/Processors/AuthenticationProcessor.php
index 707369e9..7e5fca53 100644
--- a/app/Classes/Modules/Accounts/Processors/AuthenticationProcessor.php
+++ b/app/Classes/Modules/Accounts/Processors/AuthenticationProcessor.php
@@ -82,7 +82,7 @@ class AuthenticationProcessor
}
//cief todo: case study 1
- //$this->checkMilestonesForRewardProcessor->execute($user, [Milestones::MILESTONE_1]);
+ //$this->checkMilestonesForRewardProcessor->execute($user, [Milestones::MILESTONE_DEMO_1]);
return ['access_token' => $this->generatesAuthenticationToken->execute($user), 'redirect_url' => $this->authenticationRedirect->url($user)];
}
diff --git a/app/Classes/Modules/Billplzs/ControllersLogic/CallbackBillplzLogic.php b/app/Classes/Modules/Billplzs/ControllersLogic/CallbackBillplzLogic.php
index 186ef3b6..a4b80fc4 100644
--- a/app/Classes/Modules/Billplzs/ControllersLogic/CallbackBillplzLogic.php
+++ b/app/Classes/Modules/Billplzs/ControllersLogic/CallbackBillplzLogic.php
@@ -26,6 +26,8 @@ use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use App\Classes\Modules\Wallets\Services\RecalculatesWalletBalance;
+use App\Classes\Jobs\CreateMilestoneRewardByTransactionJob;
+use App\Classes\ValueObjects\Constants\Milestones;
class CallbackBillplzLogic
{
@@ -55,7 +57,9 @@ class CallbackBillplzLogic
* @param FetchesTransaction $fetchesTransaction
* @param UpdatesTransactionStatus $updatesTransactionStatus
* @param UpdatesWalletBalance $updatesWalletBalance
+ * @param CreateCashBackTransactionProcessor $createCashBackTransactionProcessor
* @param RecalculatesWalletBalance $recalculatesWalletBalance
+ * @param CreateMilestoneRewardJob $createMilestoneRewardJob
*/
public function __construct(GetBillplzBill $getBillplzBill, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, UpdatesWalletBalance $updatesWalletBalance, CreateCashBackTransactionProcessor $createCashBackTransactionProcessor, RecalculatesWalletBalance $recalculatesWalletBalance)
{
@@ -87,7 +91,8 @@ class CallbackBillplzLogic
if(!$billPlz) throw new ResourceNotFoundException('Billplz bill not found.');
$transaction = $this->fetchesTransaction->execute(['payment_reference' => $billplzXSignatureObject->getBillPlzId()]);
-
+ CreateMilestoneRewardByTransactionJob::dispatch($transaction, [Milestones::MILESTONE_1]);
+
if($billPlz->state === 'paid') {
$status = ApprovalStatus::APPROVED;
}
@@ -117,4 +122,4 @@ class CallbackBillplzLogic
return $request->method() === 'POST' ? true : view('pages.payments_redirect', ['marking' => $marking ?? null, 'transaction' => $transaction, 'status' => $status]);
}
-}
\ No newline at end of file
+}
diff --git a/app/Classes/Modules/Milestones/Processors/CheckMilestonesForRewardProcessor.php b/app/Classes/Modules/Milestones/Processors/CheckMilestonesForRewardProcessor.php
index 597fa8bc..1a138dfa 100644
--- a/app/Classes/Modules/Milestones/Processors/CheckMilestonesForRewardProcessor.php
+++ b/app/Classes/Modules/Milestones/Processors/CheckMilestonesForRewardProcessor.php
@@ -81,9 +81,12 @@ class CheckMilestonesForRewardProcessor
try{
foreach($milestone_constants as $constant)
{
- //update milestone progress
- /** @var Milestone $milestone */
- $milestone = $this->fetchesMilestone->execute(['name' => $constant]);
+ //update milestone progres
+ $milestone = Milestone::where('name', $constant)->first();
+ if(!$milestone) {
+ Log::error("{$constant} NOT FOUND!");
+ continue;
+ }
$result = null;
if($user->milestoneProgress->count() > 0){
$result = $user->milestoneProgress->where('milestone_id', $milestone->id)->first();
@@ -130,6 +133,10 @@ class CheckMilestonesForRewardProcessor
//Voucherify - Create Voucher
$result = $this->createsVoucherifyVoucher->execute($user, intval($reward->value));
}
+ else if($reward->type == RewardType::REWARD_CODE){
+ //Voucherify - Get Voucher
+ $result = $this->fetchesVoucherifyVoucher->execute($user, $reward->value);
+ }
else{
//Voucherify - Validates Voucher
$ValidateVoucherifyVoucherObject = new ValidateVoucherifyVoucherObject(0, $reward->value, 0.00, $user);
diff --git a/app/Classes/Modules/Milestones/Processors/MilestoneRewardByTransactionProcessor.php b/app/Classes/Modules/Milestones/Processors/MilestoneRewardByTransactionProcessor.php
new file mode 100644
index 00000000..ea9abf9c
--- /dev/null
+++ b/app/Classes/Modules/Milestones/Processors/MilestoneRewardByTransactionProcessor.php
@@ -0,0 +1,48 @@
+checkMilestonesForRewardProcessor = $checkMilestonesForRewardProcessor;
+ }
+
+
+ /**
+ * @param Transaction $transaction
+ * @param array $milestones
+ * @throws \App\Classes\Exceptions\AccessForbiddenException
+ * @throws \App\Classes\Exceptions\MalformedRequestException
+ */
+ public function execute(Transaction $transaction, array $milestones)
+ {
+ $company = $transaction->owner instanceof Booking ? $transaction->owner()->first()->company : null;
+ if($company){
+ $completedBookingCount = count($company->bookings()->where('status', ApprovalStatus::COMPLETED)->get());
+ Log::info("Number of completed bookings completed for company ".$company->reference. ": " .$completedBookingCount);
+ if (in_array(Milestones::MILESTONE_1, $milestones)) {
+ if($completedBookingCount === 2){
+ $user = $company->employees()->first();
+ $this->checkMilestonesForRewardProcessor->execute($user, [Milestones::MILESTONE_1]);
+ }
+ }
+ }
+ }
+}
diff --git a/app/Classes/ValueObjects/Constants/MilestoneCreationOptions.php b/app/Classes/ValueObjects/Constants/MilestoneCreationOptions.php
index 4631b25b..6e94e610 100644
--- a/app/Classes/ValueObjects/Constants/MilestoneCreationOptions.php
+++ b/app/Classes/ValueObjects/Constants/MilestoneCreationOptions.php
@@ -6,8 +6,9 @@ class MilestoneCreationOptions
{
const OPTIONS_MILESTONE_NAME= [
['text' => 'MILESTONE 1', 'id' => Milestones::MILESTONE_1],
- ['text' => 'MILESTONE 2', 'id' => Milestones::MILESTONE_2],
- ['text' => 'MILESTONE 3', 'id' => Milestones::MILESTONE_3],
+ // ['text' => 'MILESTONE DEMO 1', 'id' => Milestones::MILESTONE_DEMO_1],
+ // ['text' => 'MILESTONE 2', 'id' => Milestones::MILESTONE_2],
+ // ['text' => 'MILESTONE 3', 'id' => Milestones::MILESTONE_3],
// ['text' => 'MILESTONE 4', 'id' => Milestones::MILESTONE_4],
// ['text' => 'MILESTONE 5', 'id' => Milestones::MILESTONE_5],
// ['text' => 'MILESTONE 6', 'id' => Milestones::MILESTONE_6],
diff --git a/app/Classes/ValueObjects/Constants/Milestones.php b/app/Classes/ValueObjects/Constants/Milestones.php
index 19961d68..6a85abbe 100644
--- a/app/Classes/ValueObjects/Constants/Milestones.php
+++ b/app/Classes/ValueObjects/Constants/Milestones.php
@@ -4,9 +4,10 @@ namespace App\Classes\ValueObjects\Constants;
class Milestones
{
- public const MILESTONE_1 = 'MILESTONE 1'; //Authentication (Sign in) or CreateCustomerLogic (Sign up)
- public const MILESTONE_2 = 'MILESTONE 2'; //Create Identification Document
- public const MILESTONE_3 = 'MILESTONE 3'; //Assign Company to Segment Logic -segment.assign when accept 1688
+ public const MILESTONE_1 = 'MILESTONE 1'; //Has 2 successful bookings
+ // public const MILESTONE_DEMO_1 = 'MILESTONE_DEMO_1 1'; //Authentication (Sign in) or CreateCustomerLogic (Sign up)
+ // public const MILESTONE_2 = 'MILESTONE 2'; //Create Identification Document
+ // public const MILESTONE_3 = 'MILESTONE 3'; //Assign Company to Segment Logic -segment.assign when accept 1688
// public const MILESTONE_4 = 'MILESTONE 4'; //Create Bank Logic (Transfer Now from dashboard)
// public const MILESTONE_5 = 'MILESTONE 5'; //Create Booking Logic
// public const MILESTONE_6 = 'MILESTONE 6'; //Create Address Logic (At transfer page before create booking)
diff --git a/app/Http/Resources/VoucherResource.php b/app/Http/Resources/VoucherResource.php
index 3f3112bb..031cf39f 100644
--- a/app/Http/Resources/VoucherResource.php
+++ b/app/Http/Resources/VoucherResource.php
@@ -16,7 +16,7 @@ class VoucherResource extends JsonResource
public function toArray($request)
{
$filteredRedemptions = new ArrayObject([]);
- if ($request->has('filters') && str_contains($request->input('filters'), "has_active_reward")) {
+ if ($request->has('filters') && str_contains($request->input('filters'), "has_vouchers_all")) {
$filteredRedemptions = new ArrayObject([]);
}
else{
diff --git a/resources/assets/vue/components/accounts/elements/VouchersNavigationBarComponent.vue b/resources/assets/vue/components/accounts/elements/VouchersNavigationBarComponent.vue
new file mode 100644
index 00000000..60947cb9
--- /dev/null
+++ b/resources/assets/vue/components/accounts/elements/VouchersNavigationBarComponent.vue
@@ -0,0 +1,42 @@
+
+
RM{{ item.voucher.value/100 }} Discount
{{ item.voucher.value }}% Discount
-Voucher claimed
++ This voucher has expired. +
Valid till {{ item.voucher.end_date }}
- - + Non-expired
diff --git a/resources/assets/vue/components/companies/sections/CustomerDashboardSectionComponent.vue b/resources/assets/vue/components/companies/sections/CustomerDashboardSectionComponent.vue index 5a0766cb..074354ca 100644 --- a/resources/assets/vue/components/companies/sections/CustomerDashboardSectionComponent.vue +++ b/resources/assets/vue/components/companies/sections/CustomerDashboardSectionComponent.vue @@ -201,6 +201,7 @@