Ejemplo n.º 1
0
 public static function generate($input)
 {
     $res = [];
     $plan = Plan::findOrFail($input['plan_id']);
     $voucher['expires_on'] = self::_makeExpiry($input['validity'], $input['validity_unit']);
     $voucher['created_at'] = time();
     $voucher['plan_name'] = $plan->name;
     $voucher['plan_type'] = $plan->plan_type;
     $voucher['sim_sessions'] = $plan->sim_sessions;
     $voucher['interim_updates'] = $plan->interim_updates;
     $voucher['price'] = $plan->price;
     $voucher['validity'] = $plan->validity;
     $voucher['validity_unit'] = $plan->validity_unit;
     $voucher['policy_type'] = $plan->policy_type;
     if ($plan->plan_type == 1) {
         //if limited
         $limit = $plan->limit->toArray();
         if ($plan->limit->aq_access == 1) {
             // $limit['aq_access'] = 1;
             $aq_policy = Policy::findOrFail($plan->limit->aq_policy);
             $limit['aq_policy'] = mikrotikRateLimit($aq_policy->toArray());
         }
         $voucher_limit = VoucherLimit::create($limit);
         $voucher['limit_id'] = $voucher_limit->id;
     }
     if ($plan->policy_type == 'Policy') {
         $policy = new VoucherPolicy(['bw_policy' => mikrotikRateLimit($plan->policy->toArray())]);
         $policy->save();
     } elseif ($plan->policy_type == 'PolicySchema') {
         $days = ['mo' => 'monday', 'tu' => 'tuesday', 'we' => 'wednesday', 'th' => 'thursday', 'fr' => 'friday', 'sa' => 'saturday', 'su' => 'sunday'];
         foreach ($days as $d => $day) {
             $tpl = $plan->policy->{$day}->toArray();
             $type = ['bw_policy', 'pr_policy', 'sec_policy'];
             foreach ($type as $t) {
                 if (!is_null($tpl[$t])) {
                     $policy = Policy::find($tpl[$t])->toArray();
                     $tpl[$t] = mikrotikRateLimit($policy);
                 }
             }
             $template = VoucherPolicySchemaTemplate::create($tpl);
             $schema[$d] = $template->id;
         }
         $policy = VoucherPolicySchema::create($schema);
     }
     $voucher['policy_id'] = $policy->id;
     for ($i = 0; $i < $input['count']; $i++) {
         $voucher['pin'] = self::generatePin();
         $voucher['expires_on'] = self::_makeExpiry($input['validity'], $input['validity_unit']);
         $v = new Voucher($voucher);
         if (!$v->save()) {
             return FALSE;
         }
         $res[] = $v->pin;
     }
     return $res;
 }
 public static function refillPrepaid($coupon, $recharge)
 {
     $limit = VoucherLimit::findOrFail($recharge->limit_id);
     $balance = Recharge::findOrFail($recharge->id);
     if ($coupon->have_time && $coupon->have_data && $limit->limit_type != BOTH_LIMITS) {
         throw new Exception("Coupon having both Time and Data can only be applied to account having both limits.");
     }
     if ($coupon->have_time && !$coupon->have_data && $limit->limit_type != TIME_LIMIT) {
         throw new Exception("Time Balance coupons can only be applied to accounts with Time Limit.");
     }
     if ($coupon->have_data && !$coupon->have_time && $limit->limit_type != DATA_LIMIT) {
         throw new Exception("Data Balance coupons can only be applied to account with Data Limit");
     }
     $result = FALSE;
     if ($coupon->have_time && ($limit->limit_type == TIME_LIMIT || $limit->limit_type == BOTH_LIMITS)) {
         if ($limit->time_limit >= 0) {
             $balance->increment('time_limit', $coupon->time_limit * constant($coupon->time_unit));
         } else {
             $balance->time_limit = $coupon->time_limit * constant($coupon->time_unit);
             $balance->save();
         }
         $result = TRUE;
     }
     if ($coupon->have_data && ($limit->limit_type == DATA_LIMIT || $limit->limit_type == BOTH_LIMITS)) {
         if ($limit->data_limit >= 0) {
             $balance->increment('data_limit', $coupon->data_limit * constant($coupon->data_unit));
         } else {
             $balance->data_limit = $coupon->data_limit * constant($coupon->data_unit);
             $balance->save();
         }
         $result = TRUE;
     }
     if ($result == TRUE && $recharge->aq_access == ALLOWED) {
         DB::table('user_recharges')->where(['user_id' => $recharge->id])->update(['aq_invocked' => 0]);
         $this->_invokeCoA($recharge->uname);
     }
     return $result;
 }