| Server IP : 14.225.204.176 / Your IP : 216.73.216.252 Web Server : nginx/1.24.0 System : Linux nodejs-ybgk 6.8.0-40-generic #40-Ubuntu SMP PREEMPT_DYNAMIC Fri Jul 5 10:34:03 UTC 2024 x86_64 User : root ( 0) PHP Version : 8.1.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/html/php/thanhphuong/app/Http/Controllers/ |
Upload File : |
<?php
namespace App\Http\Controllers;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Warehouse;
use App\Supplier;
use App\Product;
use App\Currency;
use App\Unit;
use App\Tax;
use App\Account;
use App\Purchase;
use App\ProductPurchase;
use App\Product_Warehouse;
use App\Payment;
use App\Variant;
use App\PaymentWithCheque;
use App\PaymentWithCreditCard;
use App\PosSetting;
use DB;
use App\GeneralSetting;
use Stripe\Stripe;
use Auth;
use App\User;
use App\ProductVariant;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use Illuminate\Support\Facades\Validator;
class PurchaseController extends Controller
{
public function index(Request $request)
{
$start_date = $request->input('start_date', date('Y-m').'-01');
$end_date = $request->input('end_date', date('Y-m-d'));
$start_date = date('Y-m-d', strtotime(str_replace('/', '-', $start_date)));
$end_date = date('Y-m-d', strtotime(str_replace('/', '-', $end_date)));
$role = Role::find(Auth::user()->role_id);
if ($role->hasPermissionTo('purchases-index')) {
if (Auth::user()->role_id > 2 && config('staff_access') == 'own')
$lims_purchase_list = Purchase::orderBy('id', 'desc')->where('user_id', Auth::id())->whereDate('created_at', '>=' , $start_date)->whereDate('created_at', '<=' , $end_date)->get();
else
$lims_purchase_list = Purchase::orderBy('id', 'desc')->whereDate('created_at', '>=' , $start_date)->whereDate('created_at', '<=' , $end_date)->get();
$permissions = Role::findByName($role->name)->permissions;
foreach ($permissions as $permission)
$all_permission[] = $permission->name;
if (empty($all_permission))
$all_permission[] = 'dummy text';
$lims_pos_setting_data = PosSetting::latest()->first();
$lims_account_list = Account::where('is_active', true)->get();
return view('purchase.index', compact('start_date', 'end_date', 'lims_purchase_list', 'lims_account_list', 'all_permission', 'lims_pos_setting_data'));
} else
return redirect()->back()->with('not_permitted', 'Sorry! You are not allowed to access this module');
}
public function purchaseData(Request $request)
{
$start_date = $request->input('start_date', date('Y-m').'-01');
$end_date = $request->input('end_date', date('Y-m-d'));
$start_date = date('Y-m-d', strtotime(str_replace('/', '-', $start_date)));
$end_date = date('Y-m-d', strtotime(str_replace('/', '-', $end_date)));
$columns = array(
1 => 'created_at',
2 => 'inventory_receiving_voucher',
7 => 'grand_total',
6 => 'paid_amount',
);
if (Auth::user()->role_id > 2 && config('staff_access') == 'own')
$totalData = Purchase::where('user_id', Auth::id())->where('method', '=', NULL)->whereDate('created_at', '>=' , $start_date)->whereDate('created_at', '<=' , $end_date)->count();
else
$totalData = Purchase::where('method', '=', NULL)->whereDate('created_at', '>=' , $start_date)->whereDate('created_at', '<=' , $end_date)->count();
$totalFiltered = $totalData;
if ($request->input('length') != -1)
$limit = $request->input('length');
else
$limit = $totalData;
$start = $request->input('start');
$order = $columns[$request->input('order.0.column')];
$dir = $request->input('order.0.dir');
if (empty($request->input('search.value'))) {
if (Auth::user()->role_id > 2 && config('staff_access') == 'own')
$purchases = Purchase::with('supplier', 'warehouse')
->where('method', '=', NULL)
->whereDate('created_at', '>=' , $start_date)->whereDate('created_at', '<=' , $end_date)
->offset($start)
->limit($limit)
->orderBy($order, $dir)
->get();
else
$purchases = Purchase::with('supplier', 'warehouse')
->where('method', '=', NULL)
->whereDate('created_at', '>=' , $start_date)->whereDate('created_at', '<=' , $end_date)
->offset($start)
->limit($limit)
->orderBy($order, $dir)
->get();
} else {
$search = $request->input('search.value');
$arr_created_search = explode('/', $search);
$created_search = "";
if (count($arr_created_search) > 2) {
$created_search = $arr_created_search[2] . '-' . $arr_created_search[1] . '-' . $arr_created_search[0];
} else if (count($arr_created_search) > 1) {
$created_search = $arr_created_search[1] . '-' . $arr_created_search[0];
} else {
$created_search = $search;
}
$products = Product::select('products.id')
->leftJoin('product_variants', 'product_variants.product_id', '=', 'products.id')
->where([
['products.name', 'LIKE', "%{$search}%"],
//['products.is_active', true]
])
->orwhere([
['products.code', 'LIKE', "%{$search}%"],
// ['products.is_active', true]
])
->orwhere([
['product_variants.item_code', 'LIKE', "%{$search}%"],
// ['products.is_active', true]
])
->get();
$arrProductSearchId = array();
foreach ($products as $key => $product) {
$arrProductSearchId[] = $product->id;
}
if (Auth::user()->role_id > 2 && config('staff_access') == 'own') {
$purchases = Purchase::select('purchases.*')
->with('supplier', 'warehouse')
->leftJoin('product_purchases', 'purchases.id', '=', 'product_purchases.purchase_id')
->leftJoin('suppliers', 'purchases.supplier_id', '=', 'suppliers.id')
->where('purchases.method', '=', NULL)
->whereDate('purchases.created_at', '>=' , $start_date)->whereDate('purchases.created_at', '<=' , $end_date)
->whereIn('product_purchases.product_id', $arrProductSearchId)
->orwhere([
['suppliers.name', 'LIKE', "%{$search}%"],
])
->orwhere([
['purchases.inventory_receiving_voucher', 'LIKE', "%{$search}%"],
])
->orwhere('purchases.created_at', 'LIKE', "%{$created_search}%")
->distinct()
->offset($start)
->limit($limit)
->orderBy($order, $dir)->get();
$totalFiltered = Purchase::leftJoin('suppliers', 'purchases.supplier_id', '=', 'suppliers.id')
->leftJoin('product_purchases', 'purchases.id', '=', 'product_purchases.purchase_id')
->whereDate('purchases.created_at', '>=' , $start_date)->whereDate('purchases.created_at', '<=' , $end_date)
->where('purchases.method', '=', NULL)
->whereIn('product_purchases.product_id', $arrProductSearchId)
->orwhere([
['suppliers.name', 'LIKE', "%{$search}%"],
])
->orwhere([
['purchases.inventory_receiving_voucher', 'LIKE', "%{$search}%"],
])
->orwhere('purchases.created_at', 'LIKE', "%{$created_search}%")
->distinct()
->count();
} else {
$purchases = Purchase::select('purchases.*')
->with('supplier', 'warehouse')
->leftJoin('product_purchases', 'purchases.id', '=', 'product_purchases.purchase_id')
->leftJoin('suppliers', 'purchases.supplier_id', '=', 'suppliers.id')
->where('purchases.method', '=', NULL)
->whereIn('product_purchases.product_id', $arrProductSearchId)
->orwhere('suppliers.name', 'LIKE', "%{$search}%")
->orwhere('purchases.created_at', 'LIKE', "%{$created_search}%")
->orwhere('purchases.inventory_receiving_voucher', 'LIKE', "%{$search}%")
->whereDate('purchases.created_at', '>=' , $start_date)
->whereDate('purchases.created_at', '<=' , $end_date)
->distinct()
->offset($start)
->limit($limit)
->orderBy($order, $dir)
->get();
$totalFiltered = Purchase::leftJoin('suppliers', 'purchases.supplier_id', '=', 'suppliers.id')
->leftJoin('product_purchases', 'purchases.id', '=', 'product_purchases.purchase_id')
->where('purchases.method', '=', NULL)
->whereDate('purchases.created_at', '>=' , $start_date)
->whereDate('purchases.created_at', '<=' , $end_date)
->whereIn('product_purchases.product_id', $arrProductSearchId)
->orwhere('suppliers.name', 'LIKE', "%{$search}%")
->orwhere('purchases.created_at', 'LIKE', "%{$created_search}%")
->orwhere('purchases.inventory_receiving_voucher', 'LIKE', "%{$search}%")
->distinct()
->count();
}
}
$data = array();
if (!empty($purchases)) {
foreach ($purchases as $key => $purchase) {
$role = Role::find(Auth::user()->role_id);
$permission_view_price = $role->hasPermissionTo('view_price');
if (!$permission_view_price) {
$purchase->total_cost = 0;
$purchase->grand_total = 0;
}
$nestedData['id'] = $purchase->id;
$nestedData['key'] = $key;
$nestedData['date'] = date(config('date_format'), strtotime($purchase->created_at->toDateString()));
$nestedData['reference_no'] = $purchase->reference_no;
$nestedData['inventory_receiving_voucher'] = $purchase->inventory_receiving_voucher;
if ($purchase->supplier_id) {
$supplier = $purchase->supplier;
} else {
$supplier = new Supplier();
}
$nestedData['supplier'] = $supplier->name;
$lims_product_purchase_data = ProductPurchase::where('purchase_id', $purchase->id)->get();
$nestedData['product_name'] = "";
$nestedData['product_code'] = "";
$nestedData['tr_number'] = "";
$nestedData['invoice_number'] = "";
$nestedData['oc_number'] = "";
$nestedData['contract_number'] = "";
$tr_number = "";
$invoice_number = "";
$oc_number = "";
foreach ($lims_product_purchase_data as $key => $product_purchase_data) {
$product = Product::find($product_purchase_data->product_id);
if (!empty($product)) {
if($product_purchase_data->variant_id){
$product_variant_code = ProductVariant::FindExactProduct($product_purchase_data->product_id, $product_purchase_data->variant_id)->first();
$product_variant_code = $product_variant_code ? $product_variant_code->item_code : "";
$variant_name = Variant::find($product_purchase_data->variant_id);
$variant_name = $variant_name ? $variant_name->name : "";
$nestedData['product_name'] .= $variant_name . "<br>";
$nestedData['product_code'] .= $product_variant_code . "<br>";
} else {
$nestedData['product_name'] .= $product->name . "<br>";
$nestedData['product_code'] .= $product->code . "<br>";
}
}
$nestedData['tr_number'] = $product_purchase_data->tr_number . "\n";
$nestedData['invoice_number'] = $product_purchase_data->invoice_number . "\n";
$nestedData['oc_number'] = $product_purchase_data->oc_number . "\n";
$nestedData['contract_number'] .= $product_purchase_data->contract_number . "\n";
if ($product_purchase_data->tr_number) {
$tr_number = $product_purchase_data->tr_number;
}
if ($product_purchase_data->invoice_number) {
$invoice_number = $product_purchase_data->invoice_number;
}
if ($product_purchase_data->oc_number) {
$oc_number = $product_purchase_data->oc_number;
}
}
if ($purchase->status == 1) {
$nestedData['purchase_status'] = '<div class="badge badge-success">' . trans('file.Recieved') . '</div>';
$purchase_status = trans('file.Recieved');
} elseif ($purchase->status == 2) {
$nestedData['purchase_status'] = '<div class="badge badge-success">' . trans('file.Partial') . '</div>';
$purchase_status = trans('file.Partial');
} elseif ($purchase->status == 3) {
$nestedData['purchase_status'] = '<div class="badge badge-danger">' . trans('file.Pending') . '</div>';
$purchase_status = trans('file.Pending');
} else {
$nestedData['purchase_status'] = '<div class="badge badge-danger">' . trans('file.Ordered') . '</div>';
$purchase_status = trans('file.Ordered');
}
if ($purchase->payment_status == 1)
$nestedData['payment_status'] = '<div class="badge badge-danger">' . trans('file.Due') . '</div>';
else
$nestedData['payment_status'] = '<div class="badge badge-success">' . trans('file.Paid') . '</div>';
$nestedData['grand_total'] = number_format((float)($purchase->grand_total), 0, '.', '.');
$nestedData['paid_amount'] = number_format((float)($purchase->paid_amount), 0, '.', '.');
$nestedData['due'] = number_format((float)($purchase->grand_total - $purchase->paid_amount), 0, '.', '.');
$nestedData['options'] = '<div class="btn-group">
<button type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">' . trans("file.action") . '
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu edit-options dropdown-menu-right dropdown-default" user="menu">
<li>
<button type="button" class="btn btn-link view"><i class="fa fa-eye"></i> ' . trans('file.View') . '</button>
</li>';
if (in_array("purchases-edit", $request['all_permission']))
$nestedData['options'] .= '<li>
<a href="' . route('purchases.edit', $purchase->id) . '" class="btn btn-link"><i class="dripicons-document-edit"></i> ' . trans('file.edit') . '</a>
</li>';
$nestedData['options'] .=
'<li>
<button type="button" class="add-payment btn btn-link" data-id = "' . $purchase->id . '" data-toggle="modal" data-target="#add-payment"><i class="fa fa-plus"></i> ' . trans('file.Add Payment') . '</button>
</li>
<li>
<button type="button" class="get-payment btn btn-link" data-id = "' . $purchase->id . '"><i class="fa fa-money"></i> ' . trans('file.View Payment') . '</button>
</li>';
if (in_array("purchases-delete", $request['all_permission']))
$nestedData['options'] .= \Form::open(["route" => ["purchases.destroy", $purchase->id], "method" => "DELETE"]) . '
<li>
<button type="submit" class="btn btn-link" onclick="return confirmDelete()"><i class="dripicons-trash"></i> ' . trans("file.delete") . '</button>
</li>' . \Form::close() . '
</ul>
</div>';
// data for purchase details by one click
$user = User::find($purchase->user_id);
$nestedData['purchase'] = array(
'[ "' . date(config('date_format'), strtotime($purchase->created_at->toDateString())) . '"', ' "' . $purchase->reference_no . '"', ' "' . $purchase_status . '"', ' "' . $purchase->id . '"', ' "' . $purchase->warehouse->name . '"', ' "' . $purchase->warehouse->phone . '"', ' "' . $purchase->warehouse->address . '"', ' "' . $supplier->name . '"', ' "' . $supplier->company_name . '"', ' "' . $supplier->email . '"', ' "' . $supplier->phone_number . '"', ' "' . $supplier->address . '"', ' "' . $supplier->city . '"', ' "' . $purchase->total_tax . '"', ' "' . $purchase->total_discount . '"', ' "' . $purchase->total_cost . '"', ' "' . $purchase->order_tax . '"', ' "' . $purchase->order_tax_rate . '"', ' "' . $purchase->order_discount . '"', ' "' . $purchase->shipping_cost . '"', ' "' . $purchase->grand_total . '"', ' "' . $purchase->paid_amount . '"', ' "' . preg_replace('/\s+/S', " ", $purchase->note) . '"', ' "' . $user->name . '"', ' "' . $user->email . '"', ' "' . $purchase->total_tax_import . '"', ' "' . $purchase->total_allocation_cost . '"', ' "' . $tr_number . '"', ' "' . $invoice_number . '"', ' "' . $oc_number . '"', ' "' . $purchase->inventory_receiving_voucher . '" ]' );
$data[] = self::utf8ize($nestedData);
}
}
$json_data = array(
"draw" => intval($request->input('draw')),
"recordsTotal" => intval($totalData),
"recordsFiltered" => intval($totalFiltered),
"data" => $data
);
echo json_encode($json_data);
}
function utf8ize($d)
{
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = self::utf8ize($v);
}
} else if (is_string($d)) {
return self::convertToUTF8($d);
}
return $d;
}
public function convertToUTF8($text)
{
$out = iconv(mb_detect_encoding($text . 'x', mb_detect_order(), false), "UTF-8//TRANSLIT//IGNORE", $text);
return $out;
}
public function getCurrency($id)
{
$currency = GeneralSetting::select('currency')->latest()->first();
$lims_currency_setting = Currency::find($currency->currency);
$lims_currency_data = Currency::find($id);
if ($lims_currency_setting->code == 'VND') {
$exchange_rate = $lims_currency_setting->exchange_rate / $lims_currency_data->exchange_rate;
$currency_data['exchange_rate'] = $exchange_rate;
$currency_data['code'] = $lims_currency_data->code;
return $currency_data;
}
}
public function getCurrency1($id, $currency_id)
{
$currency = GeneralSetting::select('currency')->latest()->first();
$lims_currency_setting = Currency::find($currency->currency);
$lims_currency_data = Currency::find($currency_id);
if($lims_currency_setting->code == 'VND'){
$exchange_rate = $lims_currency_setting->exchange_rate / $lims_currency_data->exchange_rate;
$currency_data['exchange_rate'] = $exchange_rate;
$currency_data['code'] = $lims_currency_data->code;
return $currency_data;
}
}
public function create()
{
$role = Role::find(Auth::user()->role_id);
if ($role->hasPermissionTo('purchases-add')) {
$lims_supplier_list = Supplier::where('is_active', true)->get();
$lims_warehouse_list = Warehouse::where('is_active', true)->get();
$lims_tax_list = Tax::where('is_active', true)->get();
$lims_product_list_without_variant = $this->productWithoutVariant();
$lims_product_list_with_variant = $this->productWithVariant();
$date_format = GeneralSetting::select('date_format')->latest()->first();
$lims_currency_list = Currency::all();
return view('purchase.create', compact('lims_supplier_list', 'lims_currency_list', 'lims_warehouse_list', 'lims_tax_list', 'lims_product_list_without_variant', 'lims_product_list_with_variant', 'date_format'));
} else
return redirect()->back()->with('not_permitted', 'Sorry! You are not allowed to access this module');
}
public function productWithoutVariant()
{
return Product::ActiveStandard()->select('id', 'name', 'code', DB::raw("CONCAT(code, ' (', replace(name, '\"', ''), ')') as search_code"))
->whereNull('is_variant')->get();
}
public function productWithVariant()
{
return Product::join('product_variants', 'products.id', 'product_variants.product_id')
->join('variants', 'product_variants.variant_id', 'variants.id')
->ActiveStandard()
->whereNotNull('is_variant')
->select('products.id', 'variants.name', 'product_variants.item_code', DB::raw("CONCAT(product_variants.item_code, ' (', variants.name, ')') as search_code"))
->orderBy('position')
->get();
}
public function limsProductSearch(Request $request)
{
$product_code = explode("(", $request['data']);
$product_code[0] = rtrim($product_code[0], " ");
$lims_product_data = Product::where('code', $product_code[0])->first();
if (!$lims_product_data) {
$lims_product_data = Product::join('product_variants', 'products.id', 'product_variants.product_id')
->select('products.*', 'product_variants.item_code')
->where('product_variants.item_code', $product_code[0])
->first();
}
if ($lims_product_data->is_variant){
$product_variant_data = ProductVariant::where('item_code', $lims_product_data->item_code)->first();
$variant_data = Variant::find($product_variant_data->variant_id);
$product[] = $variant_data->name;
$product[] = $lims_product_data->item_code;
}
else {
$product[] = $lims_product_data->name;
$product[] = $lims_product_data->code;
}
$role = Role::find(Auth::user()->role_id);
$permission_view_price = $role->hasPermissionTo('view_price');
if (!$permission_view_price) {
$lims_product_data->cost = 0;
}
$product[] = $lims_product_data->cost;
if ($lims_product_data->tax_id) {
$lims_tax_data = Tax::find($lims_product_data->tax_id);
$product[] = $lims_tax_data->rate;
$product[] = $lims_tax_data->name;
} else {
$product[] = 0;
$product[] = 'No Tax';
}
$product[] = $lims_product_data->tax_method;
$units = Unit::where("base_unit", $lims_product_data->unit_id)
->orWhere('id', $lims_product_data->unit_id)
->get();
$unit_name = array();
$unit_operator = array();
$unit_operation_value = array();
foreach ($units as $unit) {
if ($lims_product_data->purchase_unit_id == $unit->id) {
array_unshift($unit_name, $unit->unit_name);
array_unshift($unit_operator, $unit->operator);
array_unshift($unit_operation_value, $unit->operation_value);
} else {
$unit_name[] = $unit->unit_name;
$unit_operator[] = $unit->operator;
$unit_operation_value[] = $unit->operation_value;
}
}
$product[] = implode(",", $unit_name) . ',';
$product[] = implode(",", $unit_operator) . ',';
$product[] = implode(",", $unit_operation_value) . ',';
$product[] = $lims_product_data->id;
return $product;
}
public function store(Request $request)
{
$data = $request->except('document');
$data['user_id'] = Auth::id();
$data['reference_no'] = 'MH-' . date("Ymd") . '-' . date("his");
$date_format = GeneralSetting::select('date_format')->latest()->first();
$data['updated_at'] = $data['updated_at'] ? Carbon::createFromFormat($date_format->date_format, $data['updated_at']) : null;
$data['created_at'] = $data['updated_at'];
$document = $request->document;
if ($document) {
$v = Validator::make(
[
'extension' => strtolower($request->document->getClientOriginalExtension()),
],
[
'extension' => 'in:jpg,jpeg,png,gif,pdf,csv,docx,xlsx,txt',
]
);
if ($v->fails())
return redirect()->back()->withErrors($v->errors());
$documentName = $document->getClientOriginalName();
$document->move('public/documents/purchase', $documentName);
$data['document'] = $documentName;
}
Purchase::create($data);
$lims_purchase_id = Purchase::latest('id')->first()->id;
$product_id = $data['product_id'];
$product_code = $data['product_code'];
$qty = $data['qty'];
$recieved = $data['recieved'];
$purchase_unit = $data['purchase_unit'];
$net_unit_cost = $data['net_unit_cost'];
$discount_percent = $data['discount_percent'];
$tax_import = $data['tax_import'];
$allocation_cost = $data['allocation_cost'];
$discount = $data['discount'];
$tax_rate = $data['tax_rate'];
$tax = $data['tax'];
$total = $data['subtotal'];
$total_cost_unit = $data['total_cost_unit'];
$lot_number = $data['lot_number'];
$package_number = $data['package_number'];
$made_in = $data['made_in'];
$serial_number = $data['serial_number'];
$batch_number = $data['batch_number'];
$manufacturing_date = $data['manufacturing_date'];
$expiry_date = $data['expiry_date'];
$circulation_number = $data['circulation_number'];
$classify = $data['classify'];
$manufacturer = $data['manufacturer'];
$address_manufacturer = $data['address_manufacturer'];
$owner_circulation_number = $data['owner_circulation_number'];
$address_circulation = $data['address_circulation'];
$oc_number = $data['oc_number'];
$contract_number = $data['contract_number'];
$invoice_number = $data['invoice_number'];
$invoice_date = $data['invoice_date'];
$tr_number = $data['tr_number'];
$product_purchase = [];
foreach ($product_id as $i => $id) {
$lims_purchase_unit_data = Unit::where('unit_name', $purchase_unit[$i])->first();
if ($lims_purchase_unit_data->operator == '*') {
$quantity = $recieved[$i] * $lims_purchase_unit_data->operation_value;
} else {
$quantity = $recieved[$i] / $lims_purchase_unit_data->operation_value;
}
$lims_product_data = Product::find($id);
if ($lims_product_data->is_variant) {
$lims_product_variant_data = ProductVariant::select('id', 'variant_id', 'qty')->FindExactProductWithCode($lims_product_data->id, $product_code[$i])->first();
$lims_product_warehouse_data = Product_Warehouse::where([
['product_id', $id],
['variant_id', $lims_product_variant_data->variant_id],
['warehouse_id', $data['warehouse_id']]
])->first();
$product_purchase['variant_id'] = $lims_product_variant_data->variant_id;
//add quantity to product variant table
$lims_product_variant_data->qty += $quantity;
$lims_product_variant_data->save();
} else {
$product_purchase['variant_id'] = null;
$lims_product_warehouse_data = Product_Warehouse::where([
['product_id', $id],
['warehouse_id', $data['warehouse_id']],
])->first();
}
//add quantity to product table
$lims_product_data->qty = $lims_product_data->qty + $quantity;
$lims_product_data->save();
//add quantity to warehouse
if ($lims_product_warehouse_data) {
$lims_product_warehouse_data->qty = $lims_product_warehouse_data->qty + $quantity;
} else {
$lims_product_warehouse_data = new Product_Warehouse();
$lims_product_warehouse_data->product_id = $id;
$lims_product_warehouse_data->warehouse_id = $data['warehouse_id'];
$lims_product_warehouse_data->qty = $quantity;
if ($lims_product_data->is_variant)
$lims_product_warehouse_data->variant_id = $lims_product_variant_data->variant_id;
}
$lims_product_warehouse_data->save();
$product_purchase['purchase_id'] = $lims_purchase_id;
$product_purchase['product_id'] = $id;
$product_purchase['qty'] = $qty[$i];
$product_purchase['recieved'] = $recieved[$i];
$product_purchase['purchase_unit_id'] = $lims_purchase_unit_data->id;
$product_purchase['net_unit_cost'] = $net_unit_cost[$i];
$product_purchase['discount_percent'] = $discount_percent[$i];
$product_purchase['tax_import'] = $tax_import[$i];
$product_purchase['allocation_cost'] = $allocation_cost[$i];
$product_purchase['discount'] = $discount[$i];
$product_purchase['tax_rate'] = $tax_rate[$i];
$product_purchase['tax'] = $tax[$i];
$product_purchase['total'] = $total[$i];
$product_purchase['total_cost_unit'] = $total_cost_unit[$i];
$product_purchase['contract_number'] = $contract_number[$i];
$product_purchase['invoice_number'] = $invoice_number[$i];
$product_purchase['invoice_date'] = isset($invoice_date[$i]) ? Carbon::createFromFormat($date_format->date_format, $invoice_date[$i]) : null;
$product_purchase['lot_number'] = $lot_number[$i];
$product_purchase['package_number'] = $package_number[$i];
$product_purchase['made_in'] = $made_in[$i];
$product_purchase['serial_number'] = $serial_number[$i];
$product_purchase['batch_number'] = $batch_number[$i];
$product_purchase['manufacturing_date'] = isset($manufacturing_date[$i]) ? Carbon::createFromFormat($date_format->date_format, $manufacturing_date[$i]) : null;
$product_purchase['expiry_date'] = isset($expiry_date[$i]) ? Carbon::createFromFormat($date_format->date_format, $expiry_date[$i]) : null;
$product_purchase['circulation_number'] = $circulation_number[$i];
$product_purchase['classify'] = $classify[$i];
$product_purchase['manufacturer'] = $manufacturer[$i];
$product_purchase['address_manufacturer'] = $address_manufacturer[$i];
$product_purchase['owner_circulation_number'] = $owner_circulation_number[$i];
$product_purchase['address_circulation'] = $address_circulation[$i];
$product_purchase['tr_number'] = $tr_number[$i];
$product_purchase['oc_number'] = $oc_number[$i];
$product_purchase['created_at'] = $data['created_at'];
$product_purchase['updated_at'] = $data['created_at'];
ProductPurchase::create($product_purchase);
}
return redirect('purchases')->with('message', 'Purchase created successfully');
}
public function productPurchaseData($id)
{
$lims_product_purchase_data = ProductPurchase::where('purchase_id', $id)->get();
foreach ($lims_product_purchase_data as $key => $product_purchase_data) {
$product = Product::find($product_purchase_data->product_id);
$unit = Unit::find($product_purchase_data->purchase_unit_id);
if ($product_purchase_data->variant_id) {
$lims_product_variant_data = ProductVariant::FindExactProduct($product->id, $product_purchase_data->variant_id)->select('item_code')->first();
$variant_name = Variant::find($product_purchase_data->variant_id)->name;
$product->code = $lims_product_variant_data->item_code;
$product->name = $variant_name;
}
$role = Role::find(Auth::user()->role_id);
$permission_view_price = $role->hasPermissionTo('view_price');
if (!$permission_view_price) {
$unit->unit_code = 0;
$product_purchase_data->total = 0;
}
if($product){
$product_purchase[0][$key] = $product->name;
$product_purchase[10][$key] = $product->code;
}
$product_purchase[1][$key] = $product_purchase_data->qty;
$product_purchase[2][$key] = $unit->unit_code;
$product_purchase[3][$key] = $product_purchase_data->tax;
$product_purchase[4][$key] = $product_purchase_data->tax_rate;
$product_purchase[5][$key] = $product_purchase_data->discount;
$product_purchase[6][$key] = $product_purchase_data->total;
$product_purchase[7][$key] = $product_purchase_data->tax_import;
$product_purchase[8][$key] = ($product_purchase_data->total - $product_purchase_data->allocation_cost - $product_purchase_data->tax_import - $product_purchase_data->tax + $product_purchase_data->discount) / $product_purchase_data->qty;
$product_purchase[9][$key] = $product_purchase_data->allocation_cost;
}
return $product_purchase;
}
public function purchaseByCsv()
{
$role = Role::find(Auth::user()->role_id);
if ($role->hasPermissionTo('purchases-add')) {
$lims_supplier_list = Supplier::where('is_active', true)->get();
$lims_warehouse_list = Warehouse::where('is_active', true)->get();
$lims_tax_list = Tax::where('is_active', true)->get();
return view('purchase.import', compact('lims_supplier_list', 'lims_warehouse_list', 'lims_tax_list'));
} else
return redirect()->back()->with('not_permitted', 'Sorry! You are not allowed to access this module');
}
public function importPurchase(Request $request)
{
//get the file
$upload = $request->file('file');
$ext = pathinfo($upload->getClientOriginalName(), PATHINFO_EXTENSION);
//checking if this is a CSV file
if ($ext != 'csv')
return redirect()->back()->with('message', 'Please upload a CSV file');
$filePath = $upload->getRealPath();
$file_handle = fopen($filePath, 'r');
$i = 0;
//validate the file
while (!feof($file_handle)) {
$current_line = fgetcsv($file_handle);
if ($current_line && $i > 0) {
$product_data[] = Product::where('code', $current_line[0])->first();
if (!$product_data[$i - 1])
return redirect()->back()->with('message', 'Product does not exist!');
$unit[] = Unit::where('unit_code', $current_line[2])->first();
if (!$unit[$i - 1])
return redirect()->back()->with('message', 'Purchase unit does not exist!');
if (strtolower($current_line[5]) != "no tax") {
$tax[] = Tax::where('name', $current_line[5])->first();
if (!$tax[$i - 1])
return redirect()->back()->with('message', 'Tax name does not exist!');
} else
$tax[$i - 1]['rate'] = 0;
$qty[] = $current_line[1];
$cost[] = $current_line[3];
$discount[] = $current_line[4];
}
$i++;
}
$data = $request->except('file');
$data['reference_no'] = 'MH-' . date("Ymd") . '-' . date("his");
$document = $request->document;
if ($document) {
$v = Validator::make(
[
'extension' => strtolower($request->document->getClientOriginalExtension()),
],
[
'extension' => 'in:jpg,jpeg,png,gif,pdf,csv,docx,xlsx,txt',
]
);
if ($v->fails())
return redirect()->back()->withErrors($v->errors());
$ext = pathinfo($document->getClientOriginalName(), PATHINFO_EXTENSION);
$documentName = $data['reference_no'] . '.' . $ext;
$document->move('public/documents/purchase', $documentName);
$data['document'] = $documentName;
}
$item = 0;
$grand_total = $data['shipping_cost'];
$data['user_id'] = Auth::id();
Purchase::create($data);
$lims_purchase_data = Purchase::latest()->first();
foreach ($product_data as $key => $product) {
if ($product['tax_method'] == 1) {
$net_unit_cost = $cost[$key] - $discount[$key];
$product_tax = $net_unit_cost * ($tax[$key]['rate'] / 100) * $qty[$key];
$total = ($net_unit_cost * $qty[$key]) + $product_tax;
} elseif ($product['tax_method'] == 2) {
$net_unit_cost = (100 / (100 + $tax[$key]['rate'])) * ($cost[$key] - $discount[$key]);
$product_tax = ($cost[$key] - $discount[$key] - $net_unit_cost) * $qty[$key];
$total = ($cost[$key] - $discount[$key]) * $qty[$key];
}
if ($data['status'] == 1) {
if ($unit[$key]['operator'] == '*')
$quantity = $qty[$key] * $unit[$key]['operation_value'];
elseif ($unit[$key]['operator'] == '/')
$quantity = $qty[$key] / $unit[$key]['operation_value'];
$product['qty'] += $quantity;
$product_warehouse = Product_Warehouse::where([
['product_id', $product['id']],
['warehouse_id', $data['warehouse_id']]
])->first();
if ($product_warehouse) {
$product_warehouse->qty += $quantity;
$product_warehouse->save();
} else {
$lims_product_warehouse_data = new Product_Warehouse();
$lims_product_warehouse_data->product_id = $product['id'];
$lims_product_warehouse_data->warehouse_id = $data['warehouse_id'];
$lims_product_warehouse_data->qty = $quantity;
$lims_product_warehouse_data->save();
}
$product->save();
}
$product_purchase = new ProductPurchase();
$product_purchase->purchase_id = $lims_purchase_data->id;
$product_purchase->product_id = $product['id'];
$product_purchase->qty = $qty[$key];
if ($data['status'] == 1)
$product_purchase->recieved = $qty[$key];
else
$product_purchase->recieved = 0;
$product_purchase->purchase_unit_id = $unit[$key]['id'];
$product_purchase->net_unit_cost = number_format((float)$net_unit_cost, 0, '.', '');
$product_purchase->discount = $discount[$key] * $qty[$key];
$product_purchase->tax_rate = $tax[$key]['rate'];
$product_purchase->tax = number_format((float)$product_tax, 0, '.', '');
$product_purchase->total = number_format((float)$total, 0, '.', '');
$product_purchase->save();
$lims_purchase_data->total_qty += $qty[$key];
$lims_purchase_data->total_discount += $discount[$key] * $qty[$key];
$lims_purchase_data->total_tax += number_format((float)$product_tax, 0, '.', '');
$lims_purchase_data->total_cost += number_format((float)$total, 0, '.', '');
}
$lims_purchase_data->item = $key + 1;
$lims_purchase_data->order_tax = ($lims_purchase_data->total_cost - $lims_purchase_data->order_discount) * ($data['order_tax_rate'] / 100);
$lims_purchase_data->grand_total = ($lims_purchase_data->total_cost + $lims_purchase_data->order_tax + $lims_purchase_data->shipping_cost) - $lims_purchase_data->order_discount;
$lims_purchase_data->save();
return redirect('purchases');
}
public function edit($id)
{
$role = Role::find(Auth::user()->role_id);
$permission_view_price = $role->hasPermissionTo('view_price');
if ($role->hasPermissionTo('purchases-edit')) {
$lims_supplier_list = Supplier::where('is_active', true)->get();
$lims_warehouse_list = Warehouse::where('is_active', true)->get();
$lims_tax_list = Tax::where('is_active', true)->get();
$lims_product_list_without_variant = $this->productWithoutVariant();
$lims_product_list_with_variant = $this->productWithVariant();
$lims_purchase_data = Purchase::find($id);
$lims_product_purchase_data = ProductPurchase::where('purchase_id', $id)->get();
$date_format = GeneralSetting::select('date_format')->latest()->first();
$role = Role::find(Auth::user()->role_id);
$permission_view_price = $role->hasPermissionTo('view_price');
if (!$permission_view_price) {
$lims_purchase_data->total_cost = 0;
$lims_purchase_data->grand_total = 0;
}
$lims_currency_list = Currency::all();
return view('purchase.edit', compact('permission_view_price', 'lims_currency_list', 'lims_warehouse_list', 'lims_supplier_list', 'lims_product_list_without_variant', 'lims_product_list_with_variant', 'lims_tax_list', 'lims_purchase_data', 'lims_product_purchase_data', 'date_format'));
} else
return redirect()->back()->with('not_permitted', 'Sorry! You are not allowed to access this module');
}
public function update(Request $request, $id)
{
$data = $request->except('document');
$document = $request->document;
$date_format = GeneralSetting::select('date_format')->latest()->first();
$data['updated_at'] = $data['updated_at'] ? Carbon::createFromFormat($date_format->date_format, $data['updated_at']) : null;
$data['created_at'] = $data['updated_at'];
if ($document) {
$v = Validator::make(
[
'extension' => strtolower($request->document->getClientOriginalExtension()),
],
[
'extension' => 'in:jpg,jpeg,png,gif,pdf,csv,docx,xlsx,txt',
]
);
if ($v->fails())
return redirect()->back()->withErrors($v->errors());
$documentName = $document->getClientOriginalName();
$document->move('public/purchase/documents', $documentName);
$data['document'] = $documentName;
}
$balance = $data['grand_total'] - $data['paid_amount'];
if ($balance < 0 || $balance > 0) {
$data['payment_status'] = 1;
} else {
$data['payment_status'] = 2;
}
$lims_purchase_data = Purchase::find($id);
$lims_product_purchase_data = ProductPurchase::where('purchase_id', $id)->get();
$product_id = $data['product_id'];
$product_code = $data['product_code'];
$qty = $data['qty'];
$recieved = $data['recieved'];
$purchase_unit = $data['purchase_unit'];
$net_unit_cost = $data['net_unit_cost'];
$discount_percent = $data['discount_percent'];
$tax_import = $data['tax_import'];
$allocation_cost = $data['allocation_cost'];
$discount = $data['discount'];
$tax_rate = $data['tax_rate'];
$tax = $data['tax'];
$total = $data['subtotal'];
$total_cost_unit = $data['total_cost_unit'];
$lot_number = $data['lot_number'];
$package_number = $data['package_number'];
$made_in = $data['made_in'];
$serial_number = $data['serial_number'];
$batch_number = $data['batch_number'];
$manufacturing_date = $data['manufacturing_date'];
$expiry_date = $data['expiry_date'];
$circulation_number = $data['circulation_number'];
$classify = $data['classify'];
$manufacturer = $data['manufacturer'];
$address_manufacturer = $data['address_manufacturer'];
$owner_circulation_number = $data['owner_circulation_number'];
$address_circulation = $data['address_circulation'];
$contract_number = $data['contract_number'];
$invoice_number = $data['invoice_number'];
$invoice_date = $data['invoice_date'];
$tr_number = $data['tr_number'];
$oc_number = $data['oc_number'];
$created_at = $data['created_at'];
$updated_at = $data['updated_at'];
$product_purchase = [];
$date_format = GeneralSetting::select('date_format')->latest()->first();
foreach ($lims_product_purchase_data as $product_purchase_data) {
$old_recieved_value = $product_purchase_data->recieved;
$lims_purchase_unit_data = Unit::find($product_purchase_data->purchase_unit_id);
if ($lims_purchase_unit_data->operator == '*') {
$old_recieved_value = $old_recieved_value * $lims_purchase_unit_data->operation_value;
} else {
$old_recieved_value = $old_recieved_value / $lims_purchase_unit_data->operation_value;
}
$lims_product_data = Product::find($product_purchase_data->product_id);
if ($lims_product_data->is_variant) {
$lims_product_variant_data = ProductVariant::select('id', 'variant_id', 'qty')->FindExactProduct($lims_product_data->id, $product_purchase_data->variant_id)->first();
$lims_product_warehouse_data = Product_Warehouse::where([
['product_id', $lims_product_data->id],
['variant_id', $product_purchase_data->variant_id],
['warehouse_id', $lims_purchase_data->warehouse_id]
])->first();
$lims_product_variant_data->qty -= $old_recieved_value;
$lims_product_variant_data->save();
} else {
$lims_product_warehouse_data = Product_Warehouse::where([
['product_id', $product_purchase_data->product_id],
['warehouse_id', $lims_purchase_data->warehouse_id],
])->first();
}
$lims_product_data->qty -= $old_recieved_value;
$lims_product_warehouse_data->qty -= $old_recieved_value;
$lims_product_warehouse_data->save();
$lims_product_data->save();
$product_purchase_data->delete();
}
foreach ($product_id as $key => $pro_id) {
$lims_purchase_unit_data = Unit::where('unit_name', $purchase_unit[$key])->first();
if ($lims_purchase_unit_data->operator == '*') {
$new_recieved_value = $recieved[$key] * $lims_purchase_unit_data->operation_value;
} else {
$new_recieved_value = $recieved[$key] / $lims_purchase_unit_data->operation_value;
}
$lims_product_data = Product::find($pro_id);
if ($lims_product_data->is_variant) {
$lims_product_variant_data = ProductVariant::select('id', 'variant_id', 'qty')->FindExactProductWithCode($pro_id, $product_code[$key])->first();
$lims_product_warehouse_data = Product_Warehouse::where([
['product_id', $pro_id],
['variant_id', $lims_product_variant_data->variant_id],
['warehouse_id', $data['warehouse_id']]
])->first();
$product_purchase['variant_id'] = $lims_product_variant_data->variant_id;
//add quantity to product variant table
$lims_product_variant_data->qty += $new_recieved_value;
$lims_product_variant_data->save();
} else {
$product_purchase['variant_id'] = null;
$lims_product_warehouse_data = Product_Warehouse::where([
['product_id', $pro_id],
['warehouse_id', $data['warehouse_id']],
])->first();
}
$lims_product_data->qty += $new_recieved_value;
if ($lims_product_warehouse_data) {
$lims_product_warehouse_data->qty += $new_recieved_value;
$lims_product_warehouse_data->save();
} else {
$lims_product_warehouse_data = new Product_Warehouse();
$lims_product_warehouse_data->product_id = $pro_id;
if ($lims_product_data->is_variant)
$lims_product_warehouse_data->variant_id = $lims_product_variant_data->variant_id;
$lims_product_warehouse_data->warehouse_id = $data['warehouse_id'];
$lims_product_warehouse_data->qty = $new_recieved_value;
$lims_product_warehouse_data->save();
}
$lims_product_data->save();
$product_purchase['purchase_id'] = $id;
$product_purchase['product_id'] = $pro_id;
$product_purchase['qty'] = $qty[$key];
$product_purchase['recieved'] = $recieved[$key];
$product_purchase['purchase_unit_id'] = $lims_purchase_unit_data->id;
$product_purchase['net_unit_cost'] = $net_unit_cost[$key];
$product_purchase['discount_percent'] = $discount_percent[$key];
$product_purchase['discount'] = $discount[$key];
$product_purchase['tax_import'] = $tax_import[$key];
$product_purchase['allocation_cost'] = $allocation_cost[$key];
$product_purchase['tax_rate'] = $tax_rate[$key];
$product_purchase['tax'] = $tax[$key];
$product_purchase['total'] = $total[$key];
$product_purchase['total_cost_unit'] = $total_cost_unit[$key];
$product_purchase['contract_number'] = $contract_number[$key];
$product_purchase['invoice_number'] = $invoice_number[$key];
$product_purchase['invoice_date'] = isset($invoice_date[$key]) ? Carbon::createFromFormat($date_format->date_format, $invoice_date[$key]) : null;
$product_purchase['lot_number'] = $lot_number[$key];
$product_purchase['package_number'] = $package_number[$key];
$product_purchase['made_in'] = $made_in[$key];
$product_purchase['serial_number'] = $serial_number[$key];
$product_purchase['batch_number'] = $batch_number[$key];
$product_purchase['manufacturing_date'] = isset($manufacturing_date[$key]) ? Carbon::createFromFormat($date_format->date_format, $manufacturing_date[$key]) : null;
$product_purchase['expiry_date'] = isset($expiry_date[$key]) ? Carbon::createFromFormat($date_format->date_format, $expiry_date[$key]) : null;
$product_purchase['circulation_number'] = $circulation_number[$key];
$product_purchase['classify'] = $classify[$key];
$product_purchase['manufacturer'] = $manufacturer[$key];
$product_purchase['address_manufacturer'] = $address_manufacturer[$key];
$product_purchase['owner_circulation_number'] = $owner_circulation_number[$key];
$product_purchase['address_circulation'] = $address_circulation[$key];
$product_purchase['tr_number'] = $tr_number[$key];
$product_purchase['oc_number'] = $oc_number[$key];
$product_purchase['created_at'] = $created_at;
$product_purchase['updated_at'] = $updated_at;
ProductPurchase::create($product_purchase);
}
$lims_purchase_data->update($data);
return redirect('purchases')->with('message', 'Purchase updated successfully');
}
public function addPayment(Request $request)
{
$data = $request->all();
$lims_purchase_data = Purchase::find($data['purchase_id']);
$lims_purchase_data->paid_amount += $data['amount'];
$balance = $lims_purchase_data->grand_total - $lims_purchase_data->paid_amount;
if ($balance > 0 || $balance < 0)
$lims_purchase_data->payment_status = 1;
elseif ($balance == 0)
$lims_purchase_data->payment_status = 2;
$lims_purchase_data->save();
if ($data['paid_by_id'] == 1)
$paying_method = 'Cash';
elseif ($data['paid_by_id'] == 2)
$paying_method = 'Gift Card';
elseif ($data['paid_by_id'] == 3)
$paying_method = 'Credit Card';
else
$paying_method = 'Cheque';
$lims_payment_data = new Payment();
$lims_payment_data->user_id = Auth::id();
$lims_payment_data->purchase_id = $lims_purchase_data->id;
$lims_payment_data->account_id = $data['account_id'];
$lims_payment_data->payment_reference = 'ppr-' . date("Ymd") . '-' . date("his");
$lims_payment_data->amount = $data['amount'];
$lims_payment_data->change = $data['paying_amount'] - $data['amount'];
$lims_payment_data->paying_method = $paying_method;
$lims_payment_data->payment_note = $data['payment_note'];
$lims_payment_data->save();
$lims_payment_data = Payment::latest()->first();
$data['payment_id'] = $lims_payment_data->id;
if ($paying_method == 'Credit Card') {
$lims_pos_setting_data = PosSetting::latest()->first();
Stripe::setApiKey($lims_pos_setting_data->stripe_secret_key);
$token = $data['stripeToken'];
$amount = $data['amount'];
// Charge the Customer
$charge = \Stripe\Charge::create([
'amount' => $amount * 100,
'currency' => 'usd',
'source' => $token,
]);
$data['charge_id'] = $charge->id;
PaymentWithCreditCard::create($data);
} elseif ($paying_method == 'Cheque') {
PaymentWithCheque::create($data);
}
return redirect('purchases')->with('message', 'Payment created successfully');
}
public function getPayment($id)
{
$lims_payment_list = Payment::where('purchase_id', $id)->get();
$date = [];
$payment_reference = [];
$paid_amount = [];
$paying_method = [];
$payment_id = [];
$payment_note = [];
$cheque_no = [];
$change = [];
$paying_amount = [];
$account_name = [];
$account_id = [];
foreach ($lims_payment_list as $payment) {
$date[] = date(config('date_format'), strtotime($payment->created_at->toDateString())) . ' ' . $payment->created_at->toTimeString();
$payment_reference[] = $payment->payment_reference;
$paid_amount[] = $payment->amount;
$change[] = $payment->change;
$paying_method[] = $payment->paying_method;
$paying_amount[] = $payment->amount + $payment->change;
if ($payment->paying_method == 'Cheque') {
$lims_payment_cheque_data = PaymentWithCheque::where('payment_id', $payment->id)->first();
$cheque_no[] = $lims_payment_cheque_data->cheque_no;
} else {
$cheque_no[] = null;
}
$payment_id[] = $payment->id;
$payment_note[] = $payment->payment_note;
$lims_account_data = Account::find($payment->account_id);
$account_name[] = $lims_account_data->name;
$account_id[] = $lims_account_data->id;
}
$payments[] = $date;
$payments[] = $payment_reference;
$payments[] = $paid_amount;
$payments[] = $paying_method;
$payments[] = $payment_id;
$payments[] = $payment_note;
$payments[] = $cheque_no;
$payments[] = $change;
$payments[] = $paying_amount;
$payments[] = $account_name;
$payments[] = $account_id;
return $payments;
}
public function updatePayment(Request $request)
{
$data = $request->all();
$lims_payment_data = Payment::find($data['payment_id']);
$lims_purchase_data = Purchase::find($lims_payment_data->purchase_id);
//updating purchase table
$amount_dif = $lims_payment_data->amount - $data['edit_amount'];
$lims_purchase_data->paid_amount = $lims_purchase_data->paid_amount - $amount_dif;
$balance = $lims_purchase_data->grand_total - $lims_purchase_data->paid_amount;
if ($balance > 0 || $balance < 0)
$lims_purchase_data->payment_status = 1;
elseif ($balance == 0)
$lims_purchase_data->payment_status = 2;
$lims_purchase_data->save();
//updating payment data
$lims_payment_data->account_id = $data['account_id'];
$lims_payment_data->amount = $data['edit_amount'];
$lims_payment_data->change = $data['edit_paying_amount'] - $data['edit_amount'];
$lims_payment_data->payment_note = $data['edit_payment_note'];
if ($data['edit_paid_by_id'] == 1)
$lims_payment_data->paying_method = 'Cash';
elseif ($data['edit_paid_by_id'] == 2)
$lims_payment_data->paying_method = 'Gift Card';
elseif ($data['edit_paid_by_id'] == 3) {
$lims_pos_setting_data = PosSetting::latest()->first();
\Stripe\Stripe::setApiKey($lims_pos_setting_data->stripe_secret_key);
$token = $data['stripeToken'];
$amount = $data['edit_amount'];
if ($lims_payment_data->paying_method == 'Credit Card') {
$lims_payment_with_credit_card_data = PaymentWithCreditCard::where('payment_id', $lims_payment_data->id)->first();
\Stripe\Refund::create(array(
"charge" => $lims_payment_with_credit_card_data->charge_id,
));
$charge = \Stripe\Charge::create([
'amount' => $amount * 100,
'currency' => 'usd',
'source' => $token,
]);
$lims_payment_with_credit_card_data->charge_id = $charge->id;
$lims_payment_with_credit_card_data->save();
} else {
// Charge the Customer
$charge = \Stripe\Charge::create([
'amount' => $amount * 100,
'currency' => 'usd',
'source' => $token,
]);
$data['charge_id'] = $charge->id;
PaymentWithCreditCard::create($data);
}
$lims_payment_data->paying_method = 'Credit Card';
} else {
if ($lims_payment_data->paying_method == 'Cheque') {
$lims_payment_data->paying_method = 'Cheque';
$lims_payment_cheque_data = PaymentWithCheque::where('payment_id', $data['payment_id'])->first();
$lims_payment_cheque_data->cheque_no = $data['edit_cheque_no'];
$lims_payment_cheque_data->save();
} else {
$lims_payment_data->paying_method = 'Cheque';
$data['cheque_no'] = $data['edit_cheque_no'];
PaymentWithCheque::create($data);
}
}
$lims_payment_data->save();
return redirect('purchases')->with('message', 'Payment updated successfully');
}
public function deletePayment(Request $request)
{
$lims_payment_data = Payment::find($request['id']);
$lims_purchase_data = Purchase::where('id', $lims_payment_data->purchase_id)->first();
$lims_purchase_data->paid_amount -= $lims_payment_data->amount;
$balance = $lims_purchase_data->grand_total - $lims_purchase_data->paid_amount;
if ($balance > 0 || $balance < 0)
$lims_purchase_data->payment_status = 1;
elseif ($balance == 0)
$lims_purchase_data->payment_status = 2;
$lims_purchase_data->save();
if ($lims_payment_data->paying_method == 'Credit Card') {
$lims_payment_with_credit_card_data = PaymentWithCreditCard::where('payment_id', $request['id'])->first();
$lims_pos_setting_data = PosSetting::latest()->first();
\Stripe\Stripe::setApiKey($lims_pos_setting_data->stripe_secret_key);
\Stripe\Refund::create(array(
"charge" => $lims_payment_with_credit_card_data->charge_id,
));
$lims_payment_with_credit_card_data->delete();
} elseif ($lims_payment_data->paying_method == 'Cheque') {
$lims_payment_cheque_data = PaymentWithCheque::where('payment_id', $request['id'])->first();
$lims_payment_cheque_data->delete();
}
$lims_payment_data->delete();
return redirect('purchases')->with('not_permitted', 'Payment deleted successfully');
}
public function deleteBySelection(Request $request)
{
$purchase_id = $request['purchaseIdArray'];
foreach ($purchase_id as $id) {
$lims_purchase_data = Purchase::find($id);
$lims_product_purchase_data = ProductPurchase::where('purchase_id', $id)->get();
$lims_payment_data = Payment::where('purchase_id', $id)->get();
foreach ($lims_product_purchase_data as $product_purchase_data) {
$lims_purchase_unit_data = Unit::find($product_purchase_data->purchase_unit_id);
if ($lims_purchase_unit_data->operator == '*')
$recieved_qty = $product_purchase_data->recieved * $lims_purchase_unit_data->operation_value;
else
$recieved_qty = $product_purchase_data->recieved / $lims_purchase_unit_data->operation_value;
$lims_product_data = Product::find($product_purchase_data->product_id);
if ($product_purchase_data->variant_id) {
$lims_product_variant_data = ProductVariant::select('id', 'qty')->FindExactProduct($lims_product_data->id, $product_purchase_data->variant_id)->first();
$lims_product_warehouse_data = Product_Warehouse::FindProductWithVariant($product_purchase_data->product_id, $product_purchase_data->variant_id, $lims_purchase_data->warehouse_id)
->first();
$lims_product_variant_data->qty -= $recieved_qty;
$lims_product_variant_data->save();
} else {
$lims_product_warehouse_data = Product_Warehouse::FindProductWithoutVariant($product_purchase_data->product_id, $lims_purchase_data->warehouse_id)
->first();
}
$lims_product_data->qty -= $recieved_qty;
$lims_product_warehouse_data->qty -= $recieved_qty;
$lims_product_warehouse_data->save();
$lims_product_data->save();
$product_purchase_data->delete();
}
foreach ($lims_payment_data as $payment_data) {
if ($payment_data->paying_method == "Cheque") {
$payment_with_cheque_data = PaymentWithCheque::where('payment_id', $payment_data->id)->first();
$payment_with_cheque_data->delete();
} elseif ($payment_data->paying_method == "Credit Card") {
$payment_with_credit_card_data = PaymentWithCreditCard::where('payment_id', $payment_data->id)->first();
$lims_pos_setting_data = PosSetting::latest()->first();
\Stripe\Stripe::setApiKey($lims_pos_setting_data->stripe_secret_key);
\Stripe\Refund::create(array(
"charge" => $payment_with_credit_card_data->charge_id,
));
$payment_with_credit_card_data->delete();
}
$payment_data->delete();
}
$lims_purchase_data->delete();
}
return 'Purchase deleted successfully!';
}
public function destroy($id)
{
$role = Role::find(Auth::user()->role_id);
if ($role->hasPermissionTo('purchases-delete')) {
$lims_purchase_data = Purchase::find($id);
$lims_product_purchase_data = ProductPurchase::where('purchase_id', $id)->get();
$lims_payment_data = Payment::where('purchase_id', $id)->get();
foreach ($lims_product_purchase_data as $product_purchase_data) {
$lims_purchase_unit_data = Unit::find($product_purchase_data->purchase_unit_id);
if ($lims_purchase_unit_data->operator == '*')
$recieved_qty = $product_purchase_data->recieved * $lims_purchase_unit_data->operation_value;
else
$recieved_qty = $product_purchase_data->recieved / $lims_purchase_unit_data->operation_value;
$lims_product_data = Product::find($product_purchase_data->product_id);
if (!empty($lims_product_data)) {
if ($product_purchase_data->variant_id) {
$lims_product_variant_data = ProductVariant::select('id', 'qty')->FindExactProduct($lims_product_data->id, $product_purchase_data->variant_id)->first();
$lims_product_warehouse_data = Product_Warehouse::FindProductWithVariant($product_purchase_data->product_id, $product_purchase_data->variant_id, $lims_purchase_data->warehouse_id)
->first();
$lims_product_variant_data->qty -= $recieved_qty;
$lims_product_variant_data->save();
} else {
$lims_product_warehouse_data = Product_Warehouse::FindProductWithoutVariant($product_purchase_data->product_id, $lims_purchase_data->warehouse_id)
->first();
}
$lims_product_data->qty -= $recieved_qty;
$lims_product_warehouse_data->qty -= $recieved_qty;
$lims_product_warehouse_data->save();
$lims_product_data->save();
$product_purchase_data->delete();
}
}
foreach ($lims_payment_data as $payment_data) {
if ($payment_data->paying_method == "Cheque") {
$payment_with_cheque_data = PaymentWithCheque::where('payment_id', $payment_data->id)->first();
$payment_with_cheque_data->delete();
} elseif ($payment_data->paying_method == "Credit Card") {
$payment_with_credit_card_data = PaymentWithCreditCard::where('payment_id', $payment_data->id)->first();
$lims_pos_setting_data = PosSetting::latest()->first();
\Stripe\Stripe::setApiKey($lims_pos_setting_data->stripe_secret_key);
\Stripe\Refund::create(array(
"charge" => $payment_with_credit_card_data->charge_id,
));
$payment_with_credit_card_data->delete();
}
$payment_data->delete();
}
$lims_purchase_data->delete();
return redirect('purchases')->with('not_permitted', 'Purchase deleted successfully');;
}
}
}