One Hat Cyber Team
Your IP :
18.188.190.28
Server IP :
104.21.80.1
Server :
Linux agrigation-prod 5.15.0-67-generic #74-Ubuntu SMP Wed Feb 22 14:14:39 UTC 2023 x86_64
Server Software :
nginx/1.24.0
PHP Version :
7.4.33
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
home
/
forge
/
staging.gftag.com
/
app
/
Exports
/
View File Name :
SalesHistoryExport.php
<?php namespace App\Exports; use App\Models\Sale; use Illuminate\Support\Str; use Illuminate\Support\Collection; use App\Models\CashBookTransaction; use App\Services\OrganisationService; use Maatwebsite\Excel\Events\AfterSheet; use Maatwebsite\Excel\Concerns\Exportable; use Maatwebsite\Excel\Concerns\WithEvents; use Maatwebsite\Excel\Concerns\WithHeadings; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\ShouldAutoSize; class SalesHistoryExport implements FromCollection, WithHeadings, ShouldAutoSize, WithEvents { use Exportable; protected $sales; public function __construct(array $sales) { $this->sales = $sales; } public function collection() { $request = $this->sales; $invoice = isset($request['invoice']) ? $request['invoice'] : null; $customer = isset($request['customer']) ? $request['customer'] : null; $start_date = isset($request['start_date']) ? $request['start_date'] : null; $end_date = isset($request['end_date']) ? $request['end_date'] : null; $text_search = isset($request['text_search']) ? $request['text_search'] : null; $organisationService = new OrganisationService(); $org_id = $organisationService->getOrganisationByUser(); $sale_query = Sale::where('organisation_id', $org_id)->orderBy('sale_date', 'DESC') ->when($invoice, function ($q) use ($invoice) { $q->whereIn('invoice_number', Str::of($invoice)->explode(",")); }) ->when($customer, function ($q) use ($customer) { $q->whereIn('customer_id', Str::of($customer)->explode(",")); }) ->when($start_date && !$end_date, function ($q) use ($start_date) { $q->where('sale_date', '>=', $start_date); }) ->when($end_date && !$start_date, function ($q) use ($end_date) { $q->where('sale_date', '<=', $end_date); }) ->when($start_date && $end_date, function ($q) use ($start_date, $end_date) { $q->whereBetween('sale_date', [$start_date, $end_date]); }) ->when($text_search, function ($q) use ($text_search) { $q->where('invoice_number', 'like', '%' . $text_search . '%') ->orWhere('comments', 'like', '%' . $text_search . '%'); }); $sales = $sale_query->get(); foreach ($sales as $sale) { $subtotal = $sale->saleItems->sum('amount'); $base_amount = $subtotal; $discount = 0; if ($sale->discount > 0) { $discount = (int) ($subtotal * $sale->discount) / 100; $base_amount = $subtotal - $discount; } $gst_total = 0; foreach ($sale->saleItems as $value) { $qty = $value->quantity; $price = $qty * $value->price; $line_discount = (int) ($price * $sale->discount) / 100; $price_after_discount = $price - $line_discount; $gst = ($sale->organisation->state_id == $sale->customer->state_id) ? ($value->item->sgst_rate + $value->item->cgst_rate) : $value->item->igst_rate; $gst_amount = round(($price_after_discount * $gst) / 100); $gst_total = $gst_total + $gst_amount; } $sale->subtotal = $subtotal; $sale->discount = $discount; $sale->gst = $gst_total; $sale->income = CashBookTransaction::where('type', 'income')->where('reference_id', $sale->id)->sum('amount'); } $data = $sales->map(function ($sale) { return [ 'sale_type' => $sale->type, 'sale_invoice' => $sale->invoice_number, 'customer' => $sale->customer->name, 'sale_date' => $sale->sale_date, 'narration' => $sale->comments, 'sub_total' => $sale->subtotal, 'discount' => $sale->discount, 'gst' => $sale->gst, 'total_amount' => $sale->total, 'recorded_income' => $sale->income ]; }); return $data; } public function headings(): array { return ["Sale Type", "Sale Invoice", "Customer", "Sale Date", "Narration", "Sub Total", "Discount", "GST", "Total Amount", "Recorded Income"]; } public function registerEvents(): array { $styleArray = [ 'font' => [ 'bold' => true, 'size' => 11 ] ]; return [ AfterSheet::class => function (AfterSheet $event) use ($styleArray) { $cellRange = 'A1:J1'; $event->sheet->getStyle($cellRange)->ApplyFromArray($styleArray); }, ]; } }