public function report() { $s = Supplier::get(); $c = Customer::get(); $bankaccount = Bankaccount::joining(); $voucher = Voucher::orderBy('id', 'desc')->take(10)->get(); return view('ledger', compact('bankaccount', 'c', 's', 'voucher')); }
public function search($input) { $query = Voucher::query(); $columns = Schema::getColumnListing('vouchers'); $attributes = array(); foreach ($columns as $attribute) { if (isset($input[$attribute]) and !empty($input[$attribute])) { $query->where($attribute, $input[$attribute]); $attributes[$attribute] = $input[$attribute]; } else { $attributes[$attribute] = null; } } return [$query->get(), $attributes]; }
public function updateStatus() { $voucher_code = $this->code; if (!$this->validate($voucher_code)) { return false; } $original_voucher = Voucher::where('code', $this->voucher->code)->first(); $voucher = Voucher::find($original_voucher->id); if ($voucher->limit_count >= $voucher->limit) { return false; } $voucher->limit_count += 1; if ($voucher->limit_count == $voucher->limit) { $voucher->status = false; } if ($voucher->save()) { return true; } }
/** * 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; }
/** * boot * observing model * */ public static function boot() { parent::boot(); Voucher::observe(new VoucherObserver()); }
/** * Display store customer order * * @return Response */ public function store() { if (!Input::has('order')) { return new JSend('error', (array) Input::all(), 'Tidak ada data order.'); } $errors = new MessageBag(); $order = Input::get('order'); DB::beginTransaction(); $user_id = Request::route()[2]['user_id']; $order = Input::get('order'); if (is_null($order['id'])) { $is_new = true; } else { $is_new = false; } if (isset($order['voucher_code'])) { //a. check if voucher code is voucher $voucher = \App\Models\Voucher::code($order['voucher_code'])->type(['free_shipping_cost', 'debit_point'])->first(); if (!$voucher) { //b. check if voucher is referral $voucher_data = \App\Models\Referral::code($order['voucher_code'])->first(); if (!$voucher_data) { $voucher_data = \App\Models\Voucher::code($order['voucher_code'])->type('promo_referral')->ondate('now')->first(); } if (!$voucher_data) { return new JSend('error', (array) Input::all(), ['Voucher tidak valid.']); } elseif ($voucher_data->quota <= 0) { $errors->add('Redeem', 'Quota referral sudah habis.'); } else { $store = \App\Models\StoreSetting::type('voucher_point_expired')->Ondate('now')->first(); if ($store) { $expired_at = new Carbon($store->value); } else { $expired_at = new Carbon('+ 3 months'); } //if validator passed, save voucher if ($voucher_data['type'] == 'referral') { $reference_id = $voucher_data['user_id']; $reference_type = 'App\\Models\\User'; } else { $reference_id = $voucher_data['id']; $reference_type = 'App\\Models\\Voucher'; } $point = ['user_id' => $user_id, 'reference_id' => $reference_id, 'reference_type' => $reference_type, 'expired_at' => $expired_at->format('Y-m-d H:i:s')]; $point_data = new \App\Models\PointLog(); $point_data->fill($point); if (!$point_data->save()) { $errors->add('Redeem', $point_data->getError()); } } } else { $order['voucher_id'] = $voucher['id']; } } if (isset($order['voucher_id']) && $order['voucher_id'] == 0) { $order['voucher_id'] = ''; } $order_rules = ['voucher_id' => 'exists:tmp_vouchers,id']; //1a. Get original data $order_data = \App\Models\Sale::findornew($order['id']); //1b. Validate Basic Order Parameter $validator = Validator::make($order, $order_rules); if (!$validator->passes() && !$errors->count()) { $errors->add('Sale', $validator->errors()); } elseif (!$errors->count()) { //if validator passed, save order $order_data = $order_data->fill(['user_id' => $user_id, 'voucher_id' => isset($order['voucher_id']) ? $order['voucher_id'] : '0']); if (!$order_data->save()) { $errors->add('Sale', $order_data->getError()); } } //2. Validate Order Detail Parameter if (!$errors->count() && isset($order['transactiondetails']) && is_array($order['transactiondetails'])) { $detail_current_ids = []; foreach ($order['transactiondetails'] as $key => $value) { if (!$errors->count() && isset($value['quantity']) && $value['quantity'] > 0) { $detail_data = \App\Models\TransactionDetail::findornew($value['id']); $detail_rules = ['transaction_id' => 'exists:transactions,id|' . ($is_new ? '' : 'in:' . $order_data['id']), 'varian_id' => 'required|exists:varians,id', 'quantity' => 'required|numeric', 'price' => 'required|numeric', 'discount' => 'numeric']; $validator = Validator::make($value, $detail_rules); //if there was detail and validator false if (!$validator->passes()) { $errors->add('Detail', $validator->errors()); } else { $check_prev_trans = \App\Models\TransactionDetail::transactionid($order_data['id'])->varianid($value['varian_id'])->first(); if ($check_prev_trans) { $detail_data = $check_prev_trans; } $value['transaction_id'] = $order_data['id']; $detail_data = $detail_data->fill($value); if (!$detail_data->save()) { $errors->add('Detail', $detail_data->getError()); } else { $detail_current_ids[] = $detail_data['id']; } } } } //if there was no error, check if there were things need to be delete if (!$errors->count()) { $details = \App\Models\TransactionDetail::transactionid($order['id'])->get(['id'])->toArray(); $detail_should_be_ids = []; foreach ($details as $key => $value) { $detail_should_be_ids[] = $value['id']; } $difference_detail_ids = array_diff($detail_should_be_ids, $detail_current_ids); if ($difference_detail_ids) { foreach ($difference_detail_ids as $key => $value) { $detail_data = \App\Models\TransactionDetail::find($value); if (!$detail_data->delete()) { $errors->add('Detail', $detail_data->getError()); } } } } } //3. Validate Order Detail Parameter if (!$errors->count() && isset($order['transactionextensions']) && is_array($order['transactionextensions'])) { $extend_current_ids = []; foreach ($order['transactionextensions'] as $key => $value) { if (!$errors->count()) { $extend_data = \App\Models\TransactionExtension::findornew($value['id']); $extend_rules = ['transaction_id' => 'exists:transactions,id|' . ($is_new ? '' : 'in:' . $order_data['id']), 'product_extension_id' => 'required|exists:product_extensions,id', 'price' => 'required|numeric']; $validator = Validator::make($value, $extend_rules); //if there was extend and validator false if (!$validator->passes()) { $errors->add('Extend', $validator->errors()); } else { $check_prev_trans = \App\Models\TransactionExtension::transactionid($order_data['id'])->productextensionid($value['product_extension_id'])->first(); if ($check_prev_trans) { $extend_data = $check_prev_trans; } $value['transaction_id'] = $order_data['id']; $extend_data = $extend_data->fill($value); if (!$extend_data->save()) { $errors->add('Extend', $extend_data->getError()); } else { $extend_current_ids[] = $extend_data['id']; } } } } //if there was no error, check if there were things need to be delete if (!$errors->count()) { $extends = \App\Models\TransactionExtension::transactionid($order['id'])->get(['id'])->toArray(); $extend_should_be_ids = []; foreach ($extends as $key => $value) { $extend_should_be_ids[] = $value['id']; } $difference_extend_ids = array_diff($extend_should_be_ids, $extend_current_ids); if ($difference_extend_ids) { foreach ($difference_extend_ids as $key => $value) { $extend_data = \App\Models\TransactionExtension::find($value); if (!$extend_data->delete()) { $errors->add('Extend', $extend_data->getError()); } } } } } //4. Check if need to save address if (!$errors->count() && isset($order['shipment']['address'])) { $address_data = \App\Models\Address::findornew($order['shipment']['address']['id']); $address_rules = ['owner_id' => 'exists:users,id|' . ($is_new ? '' : 'in:' . $user_id), 'owner_type' => $is_new ? '' : 'in:App\\Models\\Customer', 'phone' => 'required|max:255', 'address' => 'required', 'zipcode' => 'required|max:255']; $validator = Validator::make($order['shipment']['address'], $address_rules); //4a. save address //if there was address and validator false if (!$validator->passes()) { $errors->add('Sale', $validator->errors()); } else { //if validator passed, save address $order['shipment']['address']['owner_id'] = $user_id; $order['shipment']['address']['owner_type'] = 'App\\Models\\Customer'; $address_data = $address_data->fill($order['shipment']['address']); if (!$address_data->save()) { $errors->add('Sale', $address_data->getError()); } } } //4b. save shipment if (!$errors->count() && isset($order['shipment'])) { if ($order_data->shipment()->count()) { $shipment_data = \App\Models\Shipment::findorfail($order_data->shipment->id); } else { $shipment_data = \App\Models\Shipment::findornew($order['shipment']['id']); } $shipment_rules = ['courier_id' => 'required|exists:couriers,id', 'receiver_name' => 'required|max:255']; $validator = Validator::make($order['shipment'], $shipment_rules); //4c. save shipment //if there was shipment and validator false if (!$validator->passes()) { $errors->add('Sale', $validator->errors()); } else { //if validator passed, save shipment $order['shipment']['transaction_id'] = $order['id']; if (isset($address_data['id'])) { $order['shipment']['address_id'] = $address_data['id']; } $shipment_data = $shipment_data->fill($order['shipment']); if (!$shipment_data->save()) { $errors->add('Sale', $shipment_data->getError()); } } } //5. update status if (!$errors->count() && isset($order['status']) && $order_data['status'] != $order['status']) { //3a. check cart price and product current price if ($order['status'] == 'wait') { foreach ($order_data['transactiondetails'] as $key => $value) { $discount = $value['varian']['product']['promo_price'] == 0 ? 0 : $value['varian']['product']['price'] - $value['varian']['product']['promo_price']; if ($value['price'] != $value['varian']['product']['price'] || $value['discount'] != $discount) { $errors->add('Price', 'Harga item ' . $value['varian']['product']['name'] . ' telah berubah sejak ' . $value['varian']['product']['price_start'] . '. Silahkan update keranjang Anda.'); } } foreach ($order_data['transactionextensions'] as $key => $value) { if ($value['price'] != $value['productextension']['price']) { $errors->add('Price', 'Biaya ' . $value['productextension']['name'] . ' telah berubah sejak ' . $value['productextension']['updated_at'] . '. Silahkan update keranjang Anda.'); } if (!$value['productextension']['is_active']) { $errors->add('Active', $value['productextension']['name'] . ' telah di non aktif kan sejak ' . $value['productextension']['updated_at'] . '. Silahkan update keranjang Anda.'); } } } if (!$errors->count()) { $log_data = new \App\Models\TransactionLog(); $log_data = $log_data->fill(['status' => $order['status'], 'transaction_id' => $order_data['id']]); if (!$log_data->save()) { $errors->add('Log', $log_data->getError()); } } } if ($errors->count()) { DB::rollback(); return new JSend('error', (array) Input::all(), $errors); } DB::commit(); $final_order = \App\Models\Sale::userid($user_id)->id($order_data['id'])->status(['cart', 'wait', 'payment_process', 'canceled', 'paid', 'shipping', 'packed', 'delivered'])->with(['payment', 'orderlogs', 'transactiondetails', 'transactiondetails.varian', 'transactiondetails.varian.product', 'shipment', 'shipment.courier', 'shipment.address', 'voucher', 'user', 'transactionextensions', 'transactionextensions.productextension'])->first()->toArray(); return new JSend('success', (array) $final_order); }
/** * Redeem code * * @return Response */ public function redeem($user_id = null) { if (!Input::has('code')) { return new JSend('error', (array) Input::all(), 'Tidak ada data code.'); } $code = Input::get('code'); $errors = new MessageBag(); DB::beginTransaction(); //1. Check Link $voucher_data = \App\Models\Referral::code($code)->first(); if (!$voucher_data) { $voucher_data = \App\Models\Voucher::code($code)->type('promo_referral')->ondate('now')->first(); } if (!$voucher_data) { $errors->add('Redeem', 'Code tidak valid.'); } elseif ($voucher_data->quota <= 0) { $errors->add('Redeem', 'Quota referral sudah habis.'); } else { $store = StoreSetting::type('voucher_point_expired')->Ondate('now')->first(); if ($store) { $expired_at = new Carbon($store->value); } else { $expired_at = new Carbon('+ 3 months'); } //if validator passed, save voucher if ($voucher_data['type'] == 'referral') { $reference_id = $voucher_data['user_id']; $reference_type = 'App\\Models\\User'; } else { $reference_id = $voucher_data['id']; $reference_type = 'App\\Models\\Voucher'; } $point = ['user_id' => $user_id, 'reference_id' => $reference_id, 'reference_type' => $reference_type, 'expired_at' => $expired_at->format('Y-m-d H:i:s')]; $point_data = new \App\Models\PointLog(); $point_data->fill($point); if (!$point_data->save()) { $errors->add('Redeem', $point_data->getError()); } } if ($errors->count()) { DB::rollback(); return new JSend('error', (array) Input::all(), $errors); } DB::commit(); $final_costumer = \App\Models\Customer::id($user_id)->with(['myreferrals', 'myreferrals.user'])->first()->toArray(); return new JSend('success', (array) $final_costumer); }
public function banktobankregister(Request $request) { $v = new Voucher(); $v->vnno = $request->input('vnno'); $v->vdate = CommonController::date_format($request->input('vdate')); $v->status = 3; $v->type = 5; $v->amount = $request->input('amount'); $v->userid = $request->input('userid'); $v->save(); $LastInsertId = $v->id; //echo $LastInsertId; if ($LastInsertId != NULL) { $b = new Vouchercontra(); $b->vid = $LastInsertId; $b->baccid = $request->input('baccid'); $b->cashid = $request->input('cashid'); $b->checkno = $request->input('checkno'); $b->userid = $request->input('userid'); $b->save(); $b = new Bankbook(); $b->vid = $LastInsertId; $b->baccid = $request->input('baccid'); $b->dc = 1; $b->amount = $request->input('amount'); //$b->sid = $request->input('sid'); $b->checkno = $request->input('checkno'); $b->userid = $request->input('userid'); $b->save(); $b1 = new Bankbook(); $b1->vid = $LastInsertId; $b1->baccid = $request->input('cashid'); $b1->dc = 0; $b1->amount = $request->input('amount'); //$b->sid = $request->input('sid'); $b1->checkno = $request->input('checkno'); $b1->userid = $request->input('userid'); $b1->save(); } return redirect('contravoucher'); }
public function save_unapproved(Request $request) { if ($request->ajax()) { $sales_id = $request->input('sales_id'); $voucher = Voucher::find($sales_id); if (!empty($voucher)) { if ($voucher->sid == NULL && $voucher->cid != NULL) { $customer = Customer::find($voucher->cid); $sales = Physicalsale::where('status', 1)->where('customerid', $voucher->cid)->where('presentbalance', '<>', 0)->orderBy('id', 'desc')->get(); foreach ($sales as $s) { $s->presentbalance = $s->presentbalance + $voucher->amount; $s->previousdue = $s->previousdue + $voucher->amount; $s->save(); } $salesasc = Physicalsale::where('status', 1)->where('customerid', $voucher->cid)->orderBy('id', 'asc')->get(); foreach ($salesasc as $sasc) { $presentbalance = $sasc->presentbalance; } $customer->lastdue = $presentbalance; $customer->save(); } $voucher->vstatus = 0; $voucher->save(); } else { return response()->json(0); } return response()->json(1); } }
/** * Delete a voucher * * @param product id * @return Response */ public function delete($id = null) { // $voucher = \App\Models\Voucher::id($id)->with(['quotalogs', 'transactions'])->first(); if (!$voucher) { return new JSend('error', (array) Input::all(), 'Produk tidak ditemukan.'); } $result = $voucher->toArray(); if ($voucher->delete()) { return new JSend('success', (array) $result); } return new JSend('error', (array) $result, $voucher->getError()); }