home.php
Alıntı
<?php if(!defined('ADMIN_INCLUDED')) { exit; } ?>
<?php
$informations = $db->table('settings')->where('id','=',1)->get();
if($informations['total_count']=='0')
{
m_redirect(ADMIN_URL);
}
$info = $informations['data'][0];
?>
<ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link active" id="pills-home-tab" data-bs-toggle="pill" data-bs-target="#pills-home" type="button" role="tab" aria-controls="pills-home" aria-selected="true">BARKOD TARA</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link" id="pills-profile-tab" data-bs-toggle="pill" data-bs-target="#pills-profile" type="button" role="tab" aria-controls="pills-profile" aria-selected="false">MANUEL</button>
</li>
</ul>
<div class="tab-content" id="pills-tabContent">
<div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-tab">
<div id="reader" width="600px" height="600px"></div>
<button type="button" class="btn btn-success w-100 sale_barcode_scan"><i class="fa fa-search"></i> BARKOD TARA</button>
</div>
<div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-tab">
<select class="select2 manuel_product " data-placeholder="Ürün arayın">
<option value="">Ürün Seçiniz</option>
<?php
$products = $db->table('products')->where('status','=','1')->order('name','asc')->get();
foreach($products['data'] as $product)
{
echo '<option value="'.$product['barcode'].'">'.$product['name'].'</option>';
}
?>
</select>
</div>
</div>
<form class="sale_form" action="" method="post" enctype="multipart/form-data">
<div class="card mt-2 mb-3">
<div class="card-header fw-bold">ÜRÜNLER</div>
<div class="card-body">
<div class="sale_products">
</div>
</div>
</div>
<div class="card mt-2 mb-3">
<div class="card-header fw-bold">SATIŞ</div>
<div class="card-body">
<div class="mb-2">
<label class="form-label fw-bold">Müşteri</label>
<input type="text" class="form-control" name="customer" required>
</div>
<div class="mb-2" style="display: none;">
<label class="form-label fw-bold">İskonto %</label>
<input type="number" class="form-control" name="discount" value="<?php echo m_setting('discount'); ?>" required>
</div>
<div class="mt-2 mb-2 float-end">
<b style="font-size:20px;width:100px;display:inline-block;">(USD):</b>
<span class="net_total_price" style="font-size:20px">0.00</span> $
<br>
<b style="font-size:20px;width:100px;display:inline-block;">(TRY):</b>
<span class="total_price_try" style="font-size:20px">0.00</span> ₺
<br>
<b style="font-size:20px;width:100px;display:inline-block;">(EUR):</b>
<span class="total_price_eur" style="font-size:20px">0.00</span>
</div>
<script>
const usdToTryRate = <?php echo $info['usd_try']; ?>;
const tryToEurRate = <?php echo $info['eur_try']; ?>;
// para birimlerini güncelle
function updateCurrencyValues() {
// Net toplam fiyatı (USD) al
const netTotalPriceUSD = parseFloat(document.querySelector('.net_total_price').innerText);
if (!isNaN(netTotalPriceUSD)) {
// TRY cinsinden toplam fiyatı hesapla
const totalPriceTRY = netTotalPriceUSD * usdToTryRate;
document.querySelector('.total_price_try').innerText = totalPriceTRY.toFixed(2);
// avro hesapla
const totalPriceEUR = totalPriceTRY / tryToEurRate;
document.querySelector('.total_price_eur').innerText = totalPriceEUR.toFixed(2);
// Fişi güncelle
document.querySelector('.print_total_price_try').innerText = totalPriceTRY.toFixed(2);
document.querySelector('.print_total_price_eur').innerText = totalPriceEUR.toFixed(2);
}
}
// net totali güncelle
const observer = new MutationObserver(updateCurrencyValues);
observer.observe(document.querySelector('.net_total_price'), { childList: true, subtree: true });
// değerleri güncelle
updateCurrencyValues();
</script>
<button class="btn btn-primary w-100 print_btn mb-2" type="button"><i class="fa fa-print"></i> FİŞ YAZDIR</button>
<button class="btn btn-success w-100" type="submit"><i class="fa fa-plus-circle"></i> SATIŞI TAMAMLA</button>
</form>
</div>
</div>
<div class="print">
<div class="row mb-5">
<div class="col-6">
<h1 style="font-size:24px;"><?php echo m_setting('brand'); ?></h1>
</div>
<div class="col-6 text-start">
<i class="fa fa-map"></i> <?php echo m_setting('address'); ?> <br>
<i class="fa fa-phone"></i> <?php echo m_setting('phone'); ?> <br>
<i class="fa fa-envelope"></i> <?php echo m_setting('email'); ?>
</div>
</div>
<div style="padding-left:5px;" class="mb-2">
<b>Müşteri:</b> <span class="sale_customer"></span><br><br>
<b>Tarih:</b> <span class="sale_date"></span>
</div>
<table class="table">
<thead>
<tr>
<th>Ürün</th>
<th>Miktar</th>
<th>Fiyat</th>
<th>Tutar</th>
</tr>
</thead>
<tbody class="print_products">
</tbody>
</table>
<div class="mt-2 mb-2 float-end">
<b style="font-size:20px;width:100px;display:inline-block;">(USD):</b> <span class="net_total_price" style="font-size:20px">0.00</span> $
<br>
<b style="font-size:20px;width:100px;display:inline-block;">(TRY):</b> <span class="print_total_price_try" style="font-size:20px">0.00</span> ₺
<br>
<b style="font-size:20px;width:100px;display:inline-block;">(EUR):</b> <span class="print_total_price_eur" style="font-size:20px">0.00</span>
</div>
</div>
</div>
Alıntı
<?php
function removeSizeLabel($data)
{
foreach ($data as &$product) {
$product['variant'] = str_replace('Beden: ', '', $product['variant']);
}
return $data;
}
include('config.php');
if(m_get_session('m_admin')=='' or !m_admin_check())
{
$result['status'] = false;
$result['login'] = true;
echo json_encode($result);
exit;
}
if($_POST)
{
switch(m_u_p('type'))
{
case 'barcode_scan':
$result['status'] = false;
$result['msg'] = 'Ürün bulunamadı!';
$informations = $db->table('products')->where('barcode','=',m_u_p('barcode'))->where('status','=','1')->get();
if($informations['total_count']>0)
{
$stock = $db->select('sum(variant_stock) as stock')->table('product_variants')->where('p_id','=',$informations['data'][0]['id'])->get();
$stock = $stock['data'][0]['stock'];
if($stock=='')
{
$stock = 0;
}
if($stock>0)
{
$result['status'] = true;
$result['id'] = $informations['data'][0]['id'];
$result['barcode'] = $informations['data'][0]['barcode'];
$result['name'] = $informations['data'][0]['name'];
$result['image'] = m_image_url($informations['data'][0]['image']);
}
else
{
$result['status'] = false;
$result['msg'] = 'Ürüne Ait Stok Yok!';
}
}
else
{
$result['status'] = false;
$result['msg'] = 'Ürün bulunamadı!';
}
echo json_encode($result);
break;
case 'print_forms':
$saleId = $_POST['saleId'];
$sale = $db->table('sales')->where('id', '=', $saleId)->get_vars();
$saleProducts = $db->table('sales_products')->where('s_id', '=', $saleId)->get();
if ($sale && $saleProducts['total_count'] > 0) {
$brand = m_setting('brand');
$address = m_setting('address');
$phone = m_setting('phone');
$email = m_setting('email');
foreach ($saleProducts['data'] as &$product) {
$productId = $product['p_id'];
$variant = $db->table('product_variants')->where('id', '=', $product['v_id'])->get_vars();
$productName = $db->table('products')->where('id', '=', $productId)->get_vars('name');
$product['name'] = $productName['name'];
$product['variant'] = $variant['variant_type'] . ': ' . $variant['variant_value'];
}
$saleProductsData = removeSizeLabel($saleProducts['data']);
$response = [
'status' => true,
'sale' => $sale,
'saleProducts' => $saleProductsData,
'brand' => $brand,
'address' => $address,
'phone' => $phone,
'email' => $email
];
} else {
$response = [
'status' => false,
'msg' => 'Satış bulunamadı!'
];
}
echo json_encode($response);
break;
case 'sale_barcode_scan':
$result['status'] = false;
$result['msg'] = 'Ürün bulunamadı!';
$informations = $db->table('products')->where('barcode','=',m_u_p('barcode'))->where('status','=','1')->get();
if($informations['total_count']>0)
{
$info = $informations['data'][0];
// Fiyat çevirme işlemlerini kaldırıyoruz.
$sale_price = $info['sale_price'];
$rand = uniqid();
$product_variants = $db->table('product_variants')->where('p_id','=',$info['id'])->get();
if($product_variants['total_count']>0)
{
$product_variant = '<div><select class="form-select" name="product_variant[]">
<option value="">Özellik Seçiniz</option>';
foreach($product_variants['data'] as $p_variant)
{
if($p_variant['variant_stock']>0)
{
$product_variant.= '<option value="'.$p_variant['variant_type'].':'.$p_variant['variant_value'].'">'.$p_variant['variant_type'].':'.$p_variant['variant_value'].'</option>';
}
}
$product_variant.= '</select></div>';
}
else
{
$product_variant = '<div><select class="form-select" name="product_variant[]">';
$product_variant.= '<option value="">Özellik Yok</option>';
$product_variant.= '</select></div>';
}
$result['status'] = true;
$result['html'] = '
<div class="sale_product">
<input type="hidden" name="product_id[]" value="'.$info['id'].'">
<input type="hidden" name="product_rand[]" value="'.$rand.'">
<div class="row">
<div class="col-lg-4">
<div class="mb-1">
<label class="form-label fw-bold">Ürün</label>
<input type="text" class="form-control" name="product_name[]" value="'.$info['name'].'" readonly>
</div>
</div>
<div class="col-lg-2">
<div class="mb-1">
<label class="form-label fw-bold">Özellik</label>
'.$product_variant.'
</div>
</div>
<div class="col-lg-2">
<div class="mb-1">
<label class="form-label fw-bold">Miktar</label>
<input type="number" class="form-control" name="product_quantity[]" value="1">
</div>
</div>
<div class="col-lg-2">
<div class="mb-1">
<label class="form-label fw-bold">Fiyat</label>
<input type="text" class="form-control product_price" name="product_price[]" value="'.m_currency($sale_price).'">
</div>
</div>
</div>
<span class="btn btn-sm btn-danger sale_product_remove w-100"><i class="fa fa-trash"></i></span>
</div>';
}
else
{
$result['status'] = false;
$result['msg'] = 'Ürün bulunamadı!';
}
echo json_encode($result);
break;
case 'sale_form_calculate':
$total = 0;
$net_total = 0;
$discount = 0;
$products_html = '';
$n = 0;
foreach($_POST['product_id'] as $id)
{
// Ürün bilgilerini veritabanından çekin
$product_info = $db->select('name')->table('products')->where('id', '=', $id)->get();
$product_name = $product_info['data'][0]['name'];
$quantity = $_POST['product_quantity'][$n];
$variant = $_POST['product_variant'][$n];
$price = floatval(str_replace(',', '.', $_POST['product_price'][$n]));
$product_total = $price * $quantity;
$variant_info = '';
if ($variant != '') {
$variant_info = ' ( ' . $variant . ' )';
}
$products_html .= '<tr><td>' . $product_name . '' . $variant_info . '</td><td>' . $quantity . '</td><td>' . m_currency($price) . '</td><td>' . m_currency($product_total) . '</td></tr>';
$result['products'][] = ['id' => $id, 'total_price' => m_currency($product_total), 'rand' => $_POST['product_rand'][$n]];
$total += $product_total;
$n++;
}
$discount = m_percent($total, m_u_p('discount'));
$net_total = $total - $discount;
$result['discount'] = m_currency($discount);
$result['total'] = m_currency($total);
$result['net_total'] = m_currency($net_total);
$result['products_html'] = $products_html;
$result['customer'] = m_u_p('customer');
$result['date'] = date('d/m/Y H:i');
echo json_encode($result);
break;
case 'sale_form':
if($_POST['product_id'][0]=='')
{
$result['status'] = false;
$result['msg'] = 'Ürün bulunamadı!';
}
elseif($_POST['customer']=='')
{
$result['status'] = false;
$result['msg'] = 'Müşteri adını yazınız!';
}
else
{
$total = 0;
$net_total = 0;
$discount = 0;
$products_html = '';
$n=0;
foreach($_POST['product_id'] as $id)
{
$quantity = $_POST['product_quantity'][$n];
$variant = $_POST['product_variant'][$n];
$price = floatval(str_replace(',', '.', $_POST['product_price'][$n]));
$variant_ex = explode(':', $variant);
$stock = $db->select('sum(variant_stock) as stock, id')->table('product_variants')->where('p_id', '=', $id)->where('variant_type', '=', $variant_ex[0])->where('variant_value', '=', $variant_ex[1])->get();
$stock_id = $stock['data'][0]['id'];
$stock = $stock['data'][0]['stock'];
if($stock=='')
{
$stock = 0;
}
if($stock < $quantity)
{
$result['status'] = false;
$result['msg'] = ''.$info['name'].' - '.$variant.' için maksimum stok '.$stock.' adettir!';
echo json_encode($result);
exit;
}
$product_total = $price * $quantity;
$variant_info = '';
if($variant!='')
{
$variant_info = ' ( '.$variant.' )';
}
$products_html.= '<tr><td>'.$info['name'].''.$variant_info.'</td><td>'.$quantity.'</td><td>'.m_currency($price).'</td><td>'.m_currency($product_total).'</td></tr>';
$result['products'][] = ['id' => $id, 'variant_id' => $stock_id, 'price' => $price, 'total_price' => $product_total, 'variant' => $variant, 'quantity' => $quantity, 'rand' => $_POST['product_rand'][$n]];
$total = $total + $product_total;
$n++;
}
$discount = m_percent($total, m_u_p('discount'));
$net_total = $total - $discount;
$data = [
'u_id' => m_admin('id'),
'customer' => m_u_p('customer'),
'discount' => m_u_p('discount'),
'total' => $total,
'discounted' => $discount,
'total_price' => $net_total
];
$s_id = $db->table('sales')->insert($data);
foreach($result['products'] as $product)
{
$data = [
's_id' => $s_id,
'p_id' => $product['id'],
'v_id' => $product['variant_id'],
'variant' => $product['variant'],
'quantity' => $product['quantity'],
'sale_price' => $product['price'],
'total_price' => $product['total_price']
];
$db->table('sales_products')->insert($data);
$db->query("update product_variants set variant_stock=variant_stock-".$product['quantity']." where id='".$product['variant_id']."'");
}
$result['status'] = true;
}
echo json_encode($result);
break;
case 'print_form':
if($_POST['product_id'][0]=='')
{
$result['status'] = false;
$result['msg'] = 'Ürün bulunamadı!';
}
elseif($_POST['customer']=='')
{
$result['status'] = false;
$result['msg'] = 'Müşteri adını yazınız!';
}
else
{
$products_html = '';
$n=0;
foreach($_POST['product_id'] as $id)
{
$quantity = $_POST['product_quantity'][$n];
$variant = $_POST['product_variant'][$n];
$variant_ex = explode(':', $variant);
$stock = $db->select('sum(variant_stock) as stock, id')->table('product_variants')->where('p_id', '=', $id)->where('variant_type', '=', $variant_ex[0])->where('variant_value', '=', $variant_ex[1])->get();
$stock_id = $stock['data'][0]['id'];
$stock = $stock['data'][0]['stock'];
if($stock=='')
{
$stock = 0;
}
if($stock < $quantity)
{
$result['status'] = false;
$result['msg'] = ''.$info['name'].' '.$variant.' için maksimum stok '.$stock.' adettir!';
echo json_encode($result);
exit;
}
}
$result['status'] = true;
}
echo json_encode($result);
break;
}
}
?> functions.php
Alıntı
<?php
function m_url_get($url,$ref=false)
{
if(!$ref)
{
$ref = $url;
}
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_REFERER,$ref);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$data= curl_exec($ch);
curl_close($ch);
return $data;
}
function m_u_p($key)
{
return trim(htmlspecialchars(strip_tags(@$_POST[$key])));
}
function m_u_g($key)
{
return trim(htmlspecialchars(strip_tags(@$_GET[$key])));
}
function m_a_p($key)
{
return @trim($_POST[$key]);
}
function m_a_g($key)
{
return @trim($_GET[$key]);
}
function m_password($data)
{
return md5($data);
}
function m_set_session($name,$data)
{
$_SESSION[$name] = $data;
}
function m_delete_session($name)
{
unset($_SESSION[$name]);
session_destroy();
}
function m_get_session($name)
{
return @$_SESSION[$name];
}
function m_image_url($image,$thumb=false)
{
if($image=='')
{
$return = UPLOAD_URL.'/images/blank.png';
}
else
{
if(file_exists(UPLOAD_DIR.'/images/'.$image))
{
if($thumb)
{
$return = UPLOAD_URL.'/images/thumb/'.$image;
}
else
{
$return = UPLOAD_URL.'/images/'.$image;
}
}
else
{
$return = UPLOAD_URL.'/images/blank.png';
}
}
return $return;
}
function m_sef($str)
{
return URLify::slug($str);
}
function m_redirect($url)
{
header('Location: '.$url.'');
exit();
}
function m_time_db_format($tarih)
{
$tarih = date('Y-m-d H:i:s',$tarih);
return $tarih;
}
function m_date_db_format($tarih)
{
$tarih = strtotime($tarih);
$tarih = date('Y-m-d H:i:s',$tarih);
return $tarih;
}
function m_date_to_tr($tarih)
{
if($tarih=='')
{
return '-';
}
else
{
return date('d.m.Y H:i',strtotime($tarih));
}
}
function m_date($tarih)
{
if($tarih=='')
{
return '-';
}
else
{
return date('d.m.Y',strtotime($tarih));
}
}
function m_date_full_to_tr($tarih)
{
if($tarih=='')
{
return '-';
}
else
{
return date('d.m.Y H:i:s',strtotime($tarih));
}
}
function m_time_to_tr($tarih)
{
if($tarih=='')
{
return '-';
}
else
{
return date('H:i',strtotime($tarih));
}
}
function m_time_ago($datetime, $full = false) {
$now = new DateTime;
$ago = new DateTime($datetime);
$diff = $now->diff($ago);
$diff->w = floor($diff->d / 7);
$diff->d -= $diff->w * 7;
$string = array(
'y' => 'yıl',
'm' => 'ay',
'w' => 'hafta',
'd' => 'gün',
'h' => 'saat',
'i' => 'dakika',
's' => 'saniye',
);
foreach ($string as $k => &$v) {
if ($diff->$k) {
$v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? '' : '');
} else {
unset($string[$k]);
}
}
if (!$full) $string = array_slice($string, 0, 1);
return $string ? implode(', ', $string) . ' önce' : 'şimdi';
}
function m_time_ago_s($datetime, $full = false) {
$now = new DateTime;
$ago = new DateTime($datetime);
$diff = $now->diff($ago);
$diff->w = floor($diff->d / 7);
$diff->d -= $diff->w * 7;
$string = array(
'y' => 'y',
'm' => 'a',
'w' => 'h',
'd' => 'g',
'h' => 's',
'i' => 'd',
's' => 'sn',
);
foreach ($string as $k => &$v) {
if ($diff->$k) {
$v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? '' : '');
} else {
unset($string[$k]);
}
}
if (!$full) $string = array_slice($string, 0, 1);
return $string ? implode(',', $string).' önce':'1sn';
}
function m_explode($data,$start,$finish,$s,$f)
{
$return = explode($start,$data);
$return = explode($finish,$return[$s]);
return $return[$f];
}
function m_ip()
{
if(getenv("HTTP_CLIENT_IP")) {
$ip = getenv("HTTP_CLIENT_IP");
} elseif(getenv("HTTP_X_FORWARDED_FOR")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
if (strstr($ip, ',')) {
$tmp = explode (',', $ip);
$ip = trim($tmp[0]);
}
} else {
$ip = getenv("REMOTE_ADDR");
}
return $ip;
}
function m_numbers_only($_input)
{
return floatval($_input);
}
function m_currency($number)
{
if($number=='')
{
$number = '0.00';
}
else
{
$number = number_format($number,2,',','.');
}
return $number;
}
function m_r_time($bitmesi_gereken)
{
$tarih1 = new DateTime(date('Y-m-d H:i:s'));
$tarih2 = new DateTime($bitmesi_gereken);
$interval = $tarih1->diff($tarih2);
$fark_gun = $interval->format("%d");
$fark_saat = $interval->format("%h");
$fark_dakika = $interval->format("%i");
if(time()>strtotime($bitmesi_gereken))
{
return '0 Dakika';
}
else
{
return ''.$fark_saat.' Saat '.$fark_dakika.' Dakika';
}
}
function strip_tags_content($text, $tags = '', $invert = FALSE)
{
preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags);
$tags = array_unique($tags[1]);
if(is_array($tags) AND count($tags) > 0) {
if($invert == FALSE) {
return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text);
}
else {
return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text);
}
}
elseif($invert == FALSE) {
return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
}
return $text;
}
function entities( $string )
{
$stringBuilder = "";
$offset = 0;
if ( empty( $string ) ) {
return "";
}
while ( $offset >= 0 ) {
$decValue = ordutf8( $string, $offset );
$char = unichr($decValue);
$htmlEntited = htmlentities( $char );
if( $char != $htmlEntited ){
$stringBuilder .= $htmlEntited;
} elseif( $decValue >= 128 ){
$stringBuilder .= "&#" . $decValue . ";";
} else {
$stringBuilder .= $char;
}
}
return $stringBuilder;
}
function ordutf8($string, &$offset)
{
$code = ord(substr($string, $offset,1));
if ($code >= 128) { //otherwise 0xxxxxxx
if ($code < 224) $bytesnumber = 2; //110xxxxx
else if ($code < 240) $bytesnumber = 3; //1110xxxx
else if ($code < 248) $bytesnumber = 4; //11110xxx
$codetemp = $code - 192 - ($bytesnumber > 2 ? 32 : 0) - ($bytesnumber > 3 ? 16 : 0);
for ($i = 2; $i <= $bytesnumber; $i++) {
$offset ++;
$code2 = ord(substr($string, $offset, 1)) - 128; //10xxxxxx
$codetemp = $codetemp*64 + $code2;
}
$code = $codetemp;
}
$offset += 1;
if ($offset >= strlen($string)) $offset = -1;
return $code;
}
function unichr($u) {
return mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');
}
function m_alert($title,$data)
{
switch($title)
{
case 'Hata':
$type = 'danger';
$icon = 'fa-exclamation-triangle';
break;
case 'Bilgi':
$type = 'info';
$icon = 'fa-info';
break;
case 'Başarılı':
$type = 'success';
$icon = 'fa-check';
break;
default;
$type = "info";
}
return '<div class="alert alert-'.$type.'" style="word-break: break-word;"> <i class="fa '.$icon.'"></i>
'.$title.' - '.$data.'
</div>';
}
function m_status($data)
{
if($data==0)
{
return '<span class="badge bg-warning">Pasif</span>';
}
if($data==1)
{
return '<span class="badge bg-success">Aktif</span>';
}
}
function m_setting($data)
{
$db = new DB();
$return = $db->table('settings')->where('id','=','1')->get_var($data);
return $return;
}
function m_authority($authoritys,$authority)
{
$authority_check = m_explode($authoritys,'<'.$authority.'>','</'.$authority.'>',1,0);
if($authority_check=='1')
{
return true;
}
else
{
return false;
}
}
function variant_types()
{
$list = array('Beden','Renk','Numara','Gram','Kilo','Ağırlık','Uzunluk','Genişlik','Metre');
return $list;
}
function price_types()
{
$list = array('TL','$','');
return $list;
}
function m_percent($number,$percent){
return ($number*$percent)/100;
}
?>
Alıntı
function printSale(saleId) {
// AJAX isteği yaparak ilgili satış bilgilerini alın
$.ajax({
type: "POST",
url: "ajax.php",
data: { type: "print_forms", saleId: saleId },
dataType: "json",
success: function (response) {
if (response.status) {
// Satış bilgileri başarılı bir şekilde alındı
var sale = response.sale;
var saleProducts = response.saleProducts;
// Yazdırma işlemi için bir pop-up penceresi oluşturun
var printWindow = window.open('', '_blank');
// Yazdırma işlemi için pop-up penceresinin içeriğini oluşturun
printWindow.document.open();
printWindow.document.write('<html><head><title>Satış Raporu</title>');
printWindow.document.write('<link rel="stylesheet" type="text/css" href="yazdir3.css">');
printWindow.document.write('<link rel="stylesheet" type="text/css" href="assets/fontawesome/css/all.min.css">');
printWindow.document.write('</head><body>');
// Satış raporu içeriğini oluşturun
printWindow.document.write('<div class="print">');
printWindow.document.write('<div class="row mb-5">');
printWindow.document.write('<div class="col-6">');
printWindow.document.write('<img src="qr.png" alt="QR Code" class="qr-code">');
printWindow.document.write('<h1 style="font-size:24px;">' + response.brand + '</h1>');
printWindow.document.write('</div>');
printWindow.document.write('<div class="col-6 text-start">');
printWindow.document.write('<i class="fa fa-map"></i> ' + response.address + '<br>');
printWindow.document.write('<i class="fa fa-phone"></i> ' + response.phone + '<br>');
printWindow.document.write('<i class="fa fa-envelope"></i> ' + response.email);
printWindow.document.write('</div>');
printWindow.document.write('</div>');
printWindow.document.write('<div style="padding-left:5px;" class="mb-2">');
printWindow.document.write('<b>Customer:</b> <span class="sale_customer style="font-size:20px">' + sale.customer + '</span><br><br>');
printWindow.document.write('<b>DATE:</b> <span class="sale_date">' + sale.date + '</span>');
printWindow.document.write('</div>');
printWindow.document.write('<table class="table">');
printWindow.document.write('<thead><tr><th>Product</th><th>Quantity</th><th>Price</th><th>Amount</th></tr></thead>');
printWindow.document.write('<tbody class="print_products">');
for (var i = 0; i < saleProducts.length; i++) {
var product = saleProducts[i];
printWindow.document.write('<tr>');
printWindow.document.write('<td>' + product.name + ' (' + product.variant + ')' + '</td>');
printWindow.document.write('<td>' + product.quantity + '</td>');
printWindow.document.write('<td>' + product.sale_price + '</td>');
printWindow.document.write('<td>' + product.total_price + '</td>');
printWindow.document.write('</tr>');
}
printWindow.document.write('</tbody>');
printWindow.document.write('</table>');
printWindow.document.write('<div class="mt-2 mb-2 float-end">');
printWindow.document.write('<b style="font-size:20px;width:100px;display:inline-block;">Amount:</b> <span class="total_price" style="font-size:20px">' + sale.total + '</span> <p style="font-size:20px;width:100px;display:inline-block;"></p>');
printWindow.document.write('<b style="font-size:20px;width:100px;display:inline-block;">Discount:</b> <span class="total_discount" style="font-size:20px">' + sale.discounted + '</span> <p style="font-size:20px;width:100px;display:inline-block;"></p>');
printWindow.document.write('<b style="font-size:20px;width:100px;display:inline-block;">Total:</b> <span class="net_total_price" style="font-size:20px">' + sale.total_price + '</span> <p style="font-size:20px;width:100px;display:inline-block;"></p>');
printWindow.document.write('</div>');
printWindow.document.write('</div>'); // .print
printWindow.document.write('</body></html>');
printWindow.document.close();
// CSS dosyasının yüklenmesini bekleyin ve yazdırma işlemini başlatın
printWindow.onload = function () {
printWindow.print();
};
} else {
// Hata durumunda gerekli işlemleri burada yapabilirsiniz
console.error(response.msg);
}
},
error: function (xhr, status, error) {
// AJAX hatası durumunda gerekli işlemleri burada yapabilirsiniz
console.error(error);
}
});
}
function sale_calculate()
{
var form_data = $('.sale_form').serialize();
$.ajax({
type: 'POST',
url: ajax_url,
data: 'type=sale_form_calculate&'+form_data+'',
dataType: 'json',
success: function(data)
{
$.each(data.products, function(k, product) {
$('.product_total_'+product.rand+'').val(product.total_price);
});
$('.total_price').html(data.total);
$('.net_total_price').html(data.net_total);
$('.total_discount').html(data.discount);
$('.print_products').html(data.products_html);
$('.sale_date').html(data.date);
$('.sale_customer').html(data.customer);
}
});
}
$(document).ready(function()
{
$( '.select2' ).select2( {
width: '100%',
placeholder: $( this ).data( 'placeholder' ),
} );
$('.sale_form').on('change keyup paste', ':input', function(e) {
sale_calculate();
});
var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
function decode(s) {
return decodeURIComponent(s.split("+").join(" "));
}
$_GET[decode(arguments[1])] = decode(arguments[2]);
});
if($_GET["date"])
{
var tarihler = $_GET["date"].split(" - ");
var st = tarihler[0];
var ed = tarihler[1];
}
else
{
var st = "01.01.2023";
var ed = "01.01.2024";
}
$('.daterange-ranges').daterangepicker(
{
showCustomRangeLabel:false,
startDate:st,
endDate:ed,
minDate: '01.01.2023',
maxDate: '30.12.2025',
dateLimit: { days: 60 },
autoApply: true,
ranges: {
'Bugün': [moment(), moment()],
'Dün': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Son 1 Hafta': [moment().subtract(6, 'days'), moment()],
'Son 1 Ay': [moment().subtract(29, 'days'), moment()],
'Bu Ay': [moment().startOf('month'), moment().endOf('month')],
'Geçen Ay': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
},
opens: 'right',
applyClass: 'btn-sm bg-slate-600',
cancelClass: 'btn-sm btn-light',
locale: {
format: 'DD.MM.YYYY',
applyLabel: 'Uygula',
cancelLabel: 'Kapat',
startLabel: 'Başlangıç',
endLabel: 'Bitiş',
daysOfWeek: ['Paz', 'Pzt', 'Sal', 'Çar', 'Per', 'Cm','Cmts'],
monthNames: ['Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık']
}
},
function(start, end) {
$('.daterange-ranges span').html(start.format('DD.MM.YYYY') + ' - ' + end.format('DD.MM.YYYY'));
}
);
if ($('.datatable').length)
{
var table = $(".datatable").DataTable({
dom: "<'datatable_header'<l><B><f>><'row'<'col-sm-12'tr>><'datatable_footer'<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>>",
charset: "UTF-8",
buttons: {
buttons: [
{
extend: 'colvis',
className: 'btn btn-light',
text: '<i class="fas fa-th-list"></i> Görünüm'
},
{
extend: 'copy',
className: 'btn btn-light',
text: '<i class="fa fa-copy"></i> Kopyala'
},
{
extend: 'excel',
className: 'btn btn-light',
text: '<i class="fas fa-table"></i> Excel'
},
{
extend: 'print',
customize: function ( win ) {
$(win.document.body)
.css( 'font-size', '10pt' );
$(win.document.body).find( 'table' )
.addClass( 'compact' )
.css( 'font-size', 'inherit' );
},
text: '<i class="fa fa-print"></i> Yazdır',
className: 'btn btn-light',
exportOptions: {
columns: ':visible'
}
}
]
},
aaSorting:[],
language:
{
"sDecimal": ",",
"sEmptyTable": "Tabloda herhangi bir veri mevcut değil",
"sInfo": "_TOTAL_ kayıttan _START_ - _END_ arasındaki kayıtlar gösteriliyor",
"sInfoEmpty": "Kayıt yok",
"sInfoFiltered": "(_MAX_ kayıt içerisinden bulunan)",
"sInfoPostFix": "",
"sInfoThousands": ".",
"sLengthMenu": "_MENU_ Görüntüle",
"sLoadingRecords": "Yükleniyor...",
"searchPlaceholder": "Arama...",
"sProcessing": "İşleniyor...",
"sSearch": "",
"sZeroRecords": "Eşleşen kayıt bulunamadı",
"oPaginate": {
"sFirst": "İlk",
"sLast": "Son",
"sNext": "Sonraki",
"sPrevious": "Önceki"
},
"oAria": {
"sSortAscending": ": artan sütun sıralamasını aktifleştir",
"sSortDescending": ": azalan sütun sıralamasını aktifleştir"
},
"select": {
"rows": {
"_": "%d kayıt seçildi",
"0": "",
"1": "1 kayıt seçildi"
}
},
buttons: {
copyTitle: 'Kopyalama İşlemi',
copySuccess: {
1: "Satırlar kopyalandı.",
_: "%d satır kopyalandı."
}
}
}
}).buttons().container().appendTo(".dataTables_wrapper .col-md-6:eq(0)");
$(".dataTables_length select").addClass("form-select form-select-sm");
$("div.dataTables_filter input").focus();
}
});
$(document).on('click', '.delete', function (e) {
e.preventDefault();
var url = $(this).attr('href');
Swal.fire({
icon:"question",
customClass: {
confirmButton: 'btn btn-danger me-2',
cancelButton: 'btn btn-success me-2'
},
buttonsStyling: false,
html: 'Bu içeriği silmek istediğinizden eminmisiniz ?',
showCancelButton: true,
confirmButtonText: 'Evet',
cancelButtonText: 'Hayır',
}).then((result) => {
if (result.isConfirmed) {
window.location.href=url;
}
});
});
$(document).on('click', '.add_variant', function (e) {
e.preventDefault();
var clone = $('.product_variant_clone').html();
$('.product_variants').append('<div class="product_variant">'+clone+'</div>');
});
$(document).on('click', '.variant_remove', function (e) {
e.preventDefault();
$(this).closest('.product_variant').remove();
});
$(document).on('click', '.sale_product_remove', function (e) {
$(this).closest('.sale_product').remove();
sale_calculate();
});
$(document).on('submit', '.sale_form', function (e) {
e.preventDefault();
var form_data = $('.sale_form').serialize();
$.ajax({
type: 'POST',
url: ajax_url,
data: 'type=sale_form&'+form_data+'',
dataType: 'json',
success: function(data)
{
if(data.status)
{
window.location.reload();
}
else
{
Swal.fire({
icon: 'error',
title: 'Hata',
text: data.msg,
confirmButtonText: 'Tamam'
});
}
}
});
});
function barcode_scanner(barcode)
{
html5QrCode.stop();
$.ajax({
type: 'POST',
url: ajax_url,
data: 'type=barcode_scan&barcode='+barcode+'',
dataType: 'json',
success: function(data)
{
if(data.status)
{
$('.product_name').val(data.name);
$('.product_id').val(data.id);
$('.product_image_url').attr('href',data.image);
$('.product_image_src').attr('src',data.image);
}
else
{
if(data.login)
{
window.location.href = login_url;
}
else
{
Swal.fire({
icon: 'error',
title: 'Hata',
text: data.msg,
confirmButtonText: 'Tamam'
});
}
}
}
});
}
function sale_barcode_scanner(barcode,stat=true)
{
if(stat)
{
html5QrCode.stop();
}
$.ajax({
type: 'POST',
url: ajax_url,
data: 'type=sale_barcode_scan&barcode='+barcode+'',
dataType: 'json',
success: function(data)
{
if(data.status)
{
$('.sale_products').prepend(data.html);
sale_calculate();
}
else
{
if(data.login)
{
window.location.href = login_url;
}
else
{
Swal.fire({
icon: 'error',
title: 'Hata',
text: data.msg,
confirmButtonText: 'Tamam'
});
}
}
}
});
}
function product_barcode_scanner(barcode)
{
html5QrCode.stop();
$('.pr_barcode').val(barcode);
}
const html5QrCode = new Html5Qrcode("reader");
const qrCodeSuccessCallback = (decodedText, decodedResult) => {
barcode_scanner(decodedText);
html5QrCode.stop();
};
const config = { fps: 10, qrbox: { width: 250, height: 250 } };
$(document).on('click', '.barcode_scan', function (e) {
html5QrCode.start({ facingMode: "environment" }, config, barcode_scan);
});
$(document).on('click', '.sale_barcode_scan', function (e) {
html5QrCode.start({ facingMode: "environment" }, config, sale_barcode_scanner);
});
$(document).on('click', '.product_barcode_scan', function (e) {
html5QrCode.start({ facingMode: "environment" }, config, product_barcode_scanner);
});
$(document).on('change', '.manuel_product', function (e) {
sale_barcode_scanner($(this).val(),false);
});
$(document).on('click', '.print_btn', function (e) {
e.preventDefault();
var form_data = $('.sale_form').serialize();
$.ajax({
type: 'POST',
url: ajax_url,
data: 'type=print_form&'+form_data+'',
dataType: 'json',
success: function(data)
{
if(data.status)
{
$('.print').print({
globalStyles : true,
mediaPrint : true,
iframe : false
});
}
else
{
Swal.fire({
icon: 'error',
title: 'Hata',
text: data.msg,
confirmButtonText: 'Tamam'
});
}
}
});
});