CasperSecurity
<?php
namespace App\Http\Livewire\Tendermanagement;
use App\Models\WorkOrdersBilling;
use Illuminate\Support\Facades\Auth;
use Livewire\Component;
use App\Exports\WorkOrdersExport;
use Maatwebsite\Excel\Facades\Excel;
use Livewire\WithPagination;
use Livewire\WithFileUploads;
use App\Models\CreateTender;
use App\Models\Client;
use App\Models\WorkOrders;
class WorkOrderLivewire extends Component
{
use WithPagination;
use WithFileUploads;
protected $paginationTheme = 'bootstrap';
public $page_names = "Manage Work Orders";
public $page_name = "Work Order";
public $search;
public $perPage = 10;
public $orderBy = 'id';
public $orderAsc = '1';
public $work_order_no, $work_order_date, $client_id, $tender_id, $work_order_closing_date, $renewal_required, $billing_cycle, $wo_copy_path, $status, $created_by, $modified_by;
public $itemName = [], $itemQuantity = [], $itemRate = [], $itemTax = [];
public $modelid, $itemCount = 0;
public $showmodal = false;
public $successmsg = "The workorder data has been saved successfully.";
public $updatemsg = "The workorder data has been updated successfully.";
public $deletemsg = "The workorder data has been deleted successfully.";
public $duplicateerrormsg = "Sorry !!! Employee Type name has already exists in our database. Please Try Another Name";
public $errormsg = "Sorry !!! Something went wrong. Please Try Again.";
public $rules = [
'work_order_no' => 'required|max:255',
'work_order_date' => 'required|max:255',
'client_id' => 'required|max:255',
'tender_id' => 'required|max:255',
'work_order_closing_date' => 'required',
'renewal_required' => 'required|max:255',
'billing_cycle' => 'required|max:255',
//'wo_copy_path' => 'required|max:255',
];
public $updatedrules = [
'work_order_no' => 'required|max:255',
'work_order_date' => 'required|max:255',
'client_id' => 'required|max:255',
'tender_id' => 'required|max:255',
'work_order_closing_date' => 'required',
'renewal_required' => 'required|max:255',
'billing_cycle' => 'required|max:255',
// 'wo_copy_path' => 'required|max:255',
];
public $messages = [
'work_order_no.required' => 'This field is required',
'work_order_date.required' => 'This field is required',
'client_id.required' => 'This field is required',
'tender_id.required' => 'This field is required',
'work_order_closing_date.required' => 'This field is required',
'renewal_required.required' => 'This field is required',
'billing_cycle.required' => 'This field is required',
// 'wo_copy_path.required' => 'This field is required',
];
protected $listeners = ['delete'];
public function updatingSearch()
{
$this->resetPage();
}
public function showmodalclick()
{
$this->resetValidation();
$this->showmodal = true;
//$this->dispatchBrowserEvent('livewire:load');
}
public function closemodalclick()
{
$this->resetValidation();
$this->showmodal = false;
}
public function updateclick($id)
{
$this->modelid = $id;
$this->loadData($this->modelid);
$this->showmodal = true;
}
public function deleteclick($id)
{
$this->modelid = $id;
$this->dispatchBrowserEvent('confirmdelete', [
'message' => 'Are you sure want to delete this data ?',
'funcname' => 'delete'
]);
}
public function workorder_details()
{
return Excel::download(new WorkOrdersExport , 'work_orders.xlsx');
}
public function cleanVar()
{
$this->modelid = null;
$this->work_order_no = null;
$this->client_id = null;
$this->tender_id = null;
$this->work_order_closing_date = null;
$this->renewal_required = null;
$this->billing_cycle = null;
$this->wo_copy_path = null;
$this->itemCount = 0;
$this->itemName = [];
$this->itemQuantity = [];
$this->itemRate = [];
$this->itemTax = [];
$this->status = null;
$this->showmodal = false;
}
public function loadData($id)
{
$response = WorkOrders::find($id);
if ($response) {
$this->work_order_no = $response['work_order_no'];
$this->client_id = $response['client_id'];
$this->tender_id = $response['tender_id'];
$this->work_order_date = $response['work_order_date'];
$this->work_order_closing_date = $response['work_order_closing_date'];
$this->renewal_required = $response['renewal_required'];
$this->billing_cycle = $response['billing_cycle'];
$this->wo_copy_path = $response['wo_copy_path'];
$this->status = $response['status'];
}
if ($response->id) {
$workOderBilling = WorkOrdersBilling::where('work_order_id', $response->id)->get();
if (!empty($workOderBilling)) {
foreach ($workOderBilling as $key => $item) {
$this->itemName[$key] = $item->item_name;
$this->itemQuantity[$key] = $item->item_quantity;
$this->itemRate[$key] = $item->item_rate;
$this->itemTax[$key] = $item->item_tax;
$this->itemCount += 1;
}
$this->itemCount = sizeof($this->itemName) - 1;
}
}
}
public function updatedTenderId($value){
$res=CreateTender::where('id',$value)->first();
$this->client_id=$res->client_id;
}
public function modelData()
{
if ($this->wo_copy_path != null && $this->wo_copy_path instanceof \Illuminate\Http\UploadedFile) {
$this->wo_copy_path = $this->wo_copy_path->store('work_order');
}
else{
$this->wo_copy_path=null;
}
$res = WorkOrders::where('id', $this->modelid)->first();
if ($res) {
$data = [
'work_order_no' => $this->work_order_no,
'work_order_date' => $this->work_order_date,
'client_id' => $this->client_id,
'tender_id' => $this->tender_id,
'work_order_closing_date' => $this->work_order_closing_date,
'renewal_required' => $this->renewal_required,
'billing_cycle' => $this->billing_cycle,
'wo_copy_path' => $this->wo_copy_path,
'status' => $this->status,
'modified_by' => Auth::user()->id,
];
} else {
$data = [
'work_order_no' => $this->work_order_no,
'work_order_date' => $this->work_order_date,
'client_id' => $this->client_id,
'tender_id' => $this->tender_id,
'work_order_closing_date' => $this->work_order_closing_date,
'renewal_required' => $this->renewal_required,
'billing_cycle' => $this->billing_cycle,
'wo_copy_path' => $this->wo_copy_path,
'created_by' => Auth::user()->id,
];
}
return $data;
}
public function save()
{
$this->validate($this->rules, $this->messages);
if (sizeof($this->itemName) > 0) {
$response = WorkOrders::create($this->modelData());
if ($response) {
$workOrderId = $response->id;
if (!empty($this->itemName) && !empty($this->itemQuantity) && !empty($this->itemRate) && !empty($this->itemTax)) {
$itemArray = [];
foreach ($this->itemName as $key => $name) {
$itemArray[] = [
'work_order_id' => $workOrderId,
'item_name' => $this->itemName[$key],
'item_quantity' => $this->itemQuantity[$key],
'item_rate' => $this->itemRate[$key],
'item_tax' => $this->itemTax[$key],
];
}
$workOrderBilling = WorkOrdersBilling::insert($itemArray);
}
$this->cleanVar();
$this->dispatchBrowserEvent('closeOffCanvas');
$this->dispatchBrowserEvent('showsuccessmsg', [
'type' => 'success',
'message' => $this->successmsg
]);
} else {
$this->dispatchBrowserEvent('showsuccessmsg', [
'type' => 'error',
'message' => $this->errormsg
]);
}
}
else {
$response = WorkOrders::create($this->modelData());
if($response){
$this->cleanVar();
$this->dispatchBrowserEvent('closeOffCanvas');
$this->dispatchBrowserEvent('showsuccessmsg', [
'type' => 'success',
'message' => $this->successmsg
]);
}
else {
$this->dispatchBrowserEvent('showsuccessmsg', [
'type' => 'error',
'message' => $this->errormsg
]);
}
}
}
public function update()
{
$this->validate($this->updatedrules, $this->messages);
if (sizeof($this->itemName) > 0) {
$response = WorkOrders::find($this->modelid);
if ($response) {
$response->update($this->modelData());
if ($response) {
$workOrderId = $response->id;
$existingItems = WorkOrdersBilling::where('work_order_id', $workOrderId)->get();
if (!$existingItems->isEmpty()) {
foreach ($existingItems as $item) {
$item->delete();
}
}
if (!empty($this->itemName) && !empty($this->itemQuantity) && !empty($this->itemRate) && !empty($this->itemTax)) {
$itemArray = [];
foreach ($this->itemName as $key => $name) {
$itemArray[] = [
'work_order_id' => $workOrderId,
'item_name' => $this->itemName[$key],
'item_quantity' => $this->itemQuantity[$key],
'item_rate' => $this->itemRate[$key],
'item_tax' => $this->itemTax[$key],
];
}
WorkOrdersBilling::insert($itemArray);
}
$this->cleanVar();
$this->dispatchBrowserEvent('closeOffCanvas');
$this->dispatchBrowserEvent('showsuccessmsg', [
'type' => 'success',
'message' => $this->updatemsg
]);
} else {
$this->dispatchBrowserEvent('showsuccessmsg', [
'type' => 'error',
'message' => $this->errormsg
]);
}
}
} else {
$this->dispatchBrowserEvent('showsuccessmsg', [
'type' => 'error',
'message' => 'Enter atleast one workorder item'
]);
}
}
public function delete()
{
$response = WorkOrders::find($this->modelid);
if ($response) {
if ($response->delete()) {
$this->cleanVar();
$this->dispatchBrowserEvent('showsuccessmsg', [
'type' => 'success',
'message' => $this->deletemsg
]);
} else {
$this->dispatchBrowserEvent('showsuccessmsg', [
'type' => 'error',
'message' => $this->errormsg
]);
}
}
}
public function addItem()
{
$prevrules = [];
$prevmessages = [];
for ($i = 0; $i <= $this->itemCount; $i++) {
$prevrules["itemName.$i"] = 'required';
$prevrules["itemQuantity.$i"] = 'required|numeric';
$prevrules["itemRate.$i"] = 'required|numeric';
$prevrules["itemTax.$i"] = 'required|numeric';
$prevmessages += [
"itemName.$i.required" => 'This field is required.',
"itemQuantity.$i.required" => 'This field is required.',
"itemQuantity.$i.numeric" => 'The quantity must be a number.',
"itemRate.$i.required" => 'This field is required.',
"itemRate.$i.numeric" => 'The rate must be a number.',
"itemTax.$i.required" => 'This field is required.',
"itemTax.$i.numeric" => 'The tax must be a number.',
];
}
$this->validate($prevrules, $prevmessages);
$this->itemCount++;
}
private function reorderArray(&...$arrays)
{
foreach ($arrays as &$array) {
$array = array_values($array);
}
}
public function removeItem($key)
{
unset($this->itemName[$key], $this->itemQuantity[$key], $this->itemRate[$key], $this->itemTax[$key]);
$this->reorderArray($this->itemName, $this->itemQuantity, $this->itemRate, $this->itemTax);
$this->itemCount--;
}
public function read()
{
$workorder = WorkOrders::search($this->search)
->orderBy($this->orderBy, $this->orderAsc ? 'asc' : 'desc')->paginate($this->perPage);
return $workorder;
}
public function render()
{
$tenders = CreateTender::where('tender_status', 7)->get();
$clients = Client::where('status', 1)->get();
$work_orders = $this->read();
return view('livewire.tendermanagement.work-order-livewire', compact('work_orders', 'clients', 'tenders'));
}
}