MIF_E31211908/app/Http/Controllers/Transaction/PenjualanController.php

145 lines
5.4 KiB
PHP

<?php
namespace App\Http\Controllers\Transaction;
use App\Http\Controllers\Controller;
use App\Models\Barang;
use App\Models\ListItemPenjualan;
use App\Models\Penjualan;
use App\Models\SettingPrinter;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
use Mike42\Escpos\PrintConnectors\FilePrintConnector;
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
class PenjualanController extends Controller
{
private function generateNoTransaksi()
{
return 'TRN' . time();
}
public function index(Request $request)
{
$data = ['title' => 'Penjualan'];
if (!$request->ajax()) {
return view('page.dashboard.penjualan.index', compact('data'));
}
if ($request->isMethod('get')) {
$barang = Barang::all();
return response()->json(['message' => $barang], 200);
}
$noTransaksi = $this->generateNoTransaksi();
$items = $request->items;
$penjualan = Penjualan::create([
'kasir' => Auth::user()->id,
'no_transaksi' => $noTransaksi,
'diskon' => 0,
'pembayaran' => $request->pembayaran,
'total'=> $request->total,
'bayar'=> $request->bayar,
'sisa'=> $request->sisa
]);
foreach ($items as $item) {
$barang = Barang::where('kode', $item['kode'])->first();
if ($barang) {
ListItemPenjualan::create([
'penjualan_id' => $penjualan->id,
'barang_id' => $barang->id,
'qty' => $item['qty'],
'harga_beli' => $barang->harga_beli,
'harga_jual' => $barang->harga_jual,
'nama_barang' => $barang->nama,
'ukuran_barang' => $barang->ukuran
]);
} else {
return response()->json(['message' => 'Opps! theres been an error.'], 404);
}
}
$this->print_now($noTransaksi);
return response()->json(['message' => 'Ok'], 200);
}
public function print(Request $request){
$this->print_now('TRN1716466056');
}
public function print_now($noTransaksi){
$settingprinter = SettingPrinter::where("idprinter","=",1)->first();
$storeName = $settingprinter->nama_toko;
$storeAddress = $settingprinter->alamat_toko;
$buyerName = 'UMUM';
$transactionDate = Carbon::now()->format('d-m-Y H:i:s');
// $items = $request->input('items', [
// ['name' => 'Barang A', 'quantity' => 2, 'price' => 50000],
// ['name' => 'Barang B', 'quantity' => 1, 'price' => 75000],
// ]);
// die(var_dump($request));
$penjualan = Penjualan::with("listItem","listItem.barang")
->where("no_transaksi","=",$noTransaksi)->first();
$items = $penjualan->listItem;
$total = $penjualan->total;
$totalPaid = $penjualan->bayar;
$change = $penjualan->sisa;
// echo "<pre>";
// print_r($printer);
// echo "</pre>";
// die();
$printerName = $settingprinter->nama_printer;
try {
$connector = new WindowsPrintConnector($printerName);
$printer = new Printer($connector);
// Header
$printer->setJustification(Printer::JUSTIFY_CENTER);
$printer->text("$storeName\n");
$printer->text("$storeAddress\n");
$printer->feed();
// Info Pembeli dan Tanggal
$printer->setJustification(Printer::JUSTIFY_LEFT);
$printer->text("Pembeli: $buyerName\n");
$printer->text("Tanggal: $transactionDate\n");
$printer->feed();
// Detail Barang
$printer->text(str_pad("Barang", 15) . str_pad("Qty", 4, ' ', STR_PAD_LEFT) . str_pad("Harga", 9, ' ', STR_PAD_LEFT) . str_pad("Total", 9, ' ', STR_PAD_LEFT) . "\n");
$printer->text("--------------------------------\n");
foreach ($items as $key=>$item) {
$name = str_pad(substr($item->barang->nama, 0, 15), 15);
$quantity = str_pad($item->qty, 4, ' ', STR_PAD_LEFT);
$price = str_pad(number_format($item->harga_jual, 0, ',', '.'), 9, ' ', STR_PAD_LEFT);
$totalItem = str_pad(number_format($item->qty * $item->harga_jual, 0, ',', '.'), 9, ' ', STR_PAD_LEFT);
$printer->text("$name $quantity $price $totalItem\n");
}
$printer->feed();
// Total, Total Bayar, dan Sisa
$printer->text("--------------------------------\n");
$printer->text(str_pad("Total", 15) . str_pad(number_format($total, 0, ',', '.'), 9, ' ', STR_PAD_LEFT) . "\n");
$printer->text(str_pad("Total Bayar", 15) . str_pad(number_format($totalPaid, 0, ',', '.'), 9, ' ', STR_PAD_LEFT) . "\n");
$printer->text(str_pad("Sisa", 15) . str_pad(number_format($change, 0, ',', '.'), 9, ' ', STR_PAD_LEFT) . "\n");
$printer->feed(4);
// Potong struk
$printer->cut();
// Tutup printer
$printer->close();
// return response()->json(['status' => 'success', 'message' => 'Printed successfully.']);
} catch (Exception $e) {
// return response()->json(['status' => 'error', 'message' => $e->getMessage()]);
}
}
}