コード例 #1
0
 /** 
  * observe point log event saving
  * 1. Check if reference were from user
  * 2. Check if reference were from voucher
  * 3. act, accept or refuse
  * 
  * @param $model
  * @return bool
  */
 public function saving($model)
 {
     $errors = new MessageBag();
     //1. Check if reference were from user
     if ($model->reference_type == 'App\\Models\\User') {
         //1a. Check referee
         $reference = PointLog::userid($model->reference_id)->referencetype('App\\Models\\User')->first();
         $user = PointLog::userid($model->user_id)->referencetype('App\\Models\\User')->first();
         $alreadyhasvoucher = PointLog::userid($model->user_id)->referencetype('App\\Models\\Voucher')->first();
         //1ai. If user alerady has voucher or referral, refuse
         if ($user || $alreadyhasvoucher) {
             $errors->add('PointLog', 'Maaf, Anda tidak dapat menambahkan referral code, karena anda sudah menggunakan referral code ' . $model->reference->referral_code);
         } elseif ($reference && $model->user_id == $reference->reference_id) {
             $errors->add('PointLog', 'Tidak dapat memakai referensi dari pemberi referens.');
         } elseif ($model->user_id == $model->reference_id) {
             $errors->add('PointLog', 'Tidak memakai dapat referral code anda sebagai pemberi referens.');
         } elseif ($model->reference->quota_referral <= 0) {
             $errors->add('PointLog', 'Untuk saat ini tidak dapat menggunakan referral code ' . $model->reference->name);
         } else {
             $gift = StoreSetting::type('invitation_royalty')->Ondate('now')->first();
             //check if no royalti, refuse
             if (!$gift) {
                 $errors->add('PointLog', 'Tidak ada campaign untuk point reference.');
             } elseif ($model->reference->referral->value != 0) {
                 $model->amount = $model->reference->referral->value;
                 $model->notes = 'Referensi promo ' . $model->reference->name;
             } else {
                 $model->amount = $gift->value;
                 $model->notes = 'Direferensikan ' . $model->reference->name;
             }
         }
         if (!$errors->count()) {
             $result = $model->CreditQuota($model->reference->referral, 'Mereferensikan ' . $model->user->name);
             if (!$result) {
                 return false;
             }
         }
     } elseif ($model->reference_type == 'App\\Models\\Voucher') {
         $reference = PointLog::userid($model->reference->user_id)->referencetype('App\\Models\\User')->first();
         $user = PointLog::userid($model->reference->user_id)->referencetype('App\\Models\\User')->first();
         $alreadyhasvoucher = PointLog::userid($model->user_id)->referencetype('App\\Models\\Voucher')->first();
         $alreadyhasreferral = PointLog::userid($model->user_id)->referencetype('App\\Models\\User')->first();
         //2bi. If user alerady has voucher or referral, refuse
         if ($alreadyhasvoucher || $alreadyhasreferral) {
             $errors->add('PointLog', 'Maaf, Anda tidak dapat menambahkan referral code, karena anda sudah menggunakan referral code ' . $model->reference->referral_code);
         } elseif ($reference && $model->user_id == $reference->reference_id) {
             $errors->add('PointLog', 'Tidak dapat memakai referensi dari pemberi referens.');
         } elseif ($model->user_id == $model->reference->user_id) {
             $errors->add('PointLog', 'Tidak memakai dapat referral code anda sebagai pemberi referens.');
         } elseif ($model->reference->quota <= 0) {
             $errors->add('PointLog', 'Untuk saat ini tidak dapat menggunakan referral code ' . $model->reference->name);
         } else {
             $prev_reference = $model->reference_id;
             $gift = StoreSetting::type('invitation_royalty')->Ondate('now')->first();
             //check if no royalti, refuse
             if (!$gift) {
                 $errors->add('PointLog', 'Tidak ada campaign untuk point reference.');
             } elseif ($model->reference->value != 0) {
                 $model->amount = $model->reference->value;
                 $model->notes = 'Referensi promo #' . $model->reference->code;
             } else {
                 $model->amount = $gift->value;
                 $model->notes = 'Direferensikan ' . $model->reference->user->name;
             }
             if (!$errors->count()) {
                 $result = $model->CreditQuota(\App\Models\Voucher::findorfail($prev_reference), 'Mereferensikan ' . $model->user->name);
                 if (!$result) {
                     return false;
                 }
             }
         }
     }
     if ($errors->count()) {
         $model['errors'] = $errors;
         return false;
     }
     return true;
 }
コード例 #2
0
ファイル: HasPaidTrait.php プロジェクト: ThunderID/SHOP-API
 /**
  * Credit point.
  *
  * @param model transaction
  * @return boolean
  */
 public function CreditPoint($transaction)
 {
     //cek all  in debit active point
     $points = PointLog::userid($transaction->user_id)->onactive('now')->debit(true)->get();
     //count leftover active point
     $sumpoints = PointLog::userid($transaction->user_id)->onactive('now')->sum('amount');
     $idx = 0;
     $currentamount = 0;
     $transactionamount = $transaction['bills'];
     while ($transactionamount <= $transaction['bills'] && $points && isset($points[$idx]) && $transactionamount > 0 && $sumpoints > 0) {
         $sumpoints = PointLog::userid($transaction->user_id)->onactive('now')->sum('amount');
         //count left over point per debit to credit
         $currentamount = $points[$idx]['amount'];
         foreach ($points[$idx]->pointlogs as $key => $value) {
             $currentamount = $currentamount + $value['amount'];
         }
         //if leftover more than 0
         if ($currentamount > 0 && $currentamount >= $transactionamount) {
             $camount = 0 - $transactionamount;
         } else {
             $camount = 0 - $currentamount;
         }
         if ($currentamount > 0) {
             $point = new PointLog();
             $point->fill(['user_id' => $points[$idx]->user_id, 'reference_id' => $transaction->id, 'reference_type' => get_class($transaction), 'point_log_id' => $points[$idx]->id, 'amount' => $camount, 'expired_at' => $points[$idx]->expired_at, 'notes' => 'Pembayaran Belanja #' . $transaction->ref_number]);
             if (!$point->save()) {
                 $this->errors = $point->getError();
                 return false;
             }
             $transactionamount = $transactionamount + $camount;
         }
         $idx++;
     }
     return $transactionamount;
 }