145 lines
5.4 KiB
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()]);
|
|
}
|
|
|
|
}
|
|
} |