|
Server IP : 217.21.85.138 / Your IP : 216.73.216.103 Web Server : LiteSpeed System : Linux in-mum-web906.main-hosting.eu 4.18.0-553.37.1.lve.el8.x86_64 #1 SMP Mon Feb 10 22:45:17 UTC 2025 x86_64 User : u915722082 ( 915722082) PHP Version : 7.4.33 Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail MySQL : OFF | cURL : ON | WGET : ON | Perl : OFF | Python : OFF Directory (0755) : /home/u915722082/.nvm/../public_html/invoice/ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
<?php
session_start();
require_once 'db.php';
if(!isset($_SESSION["logs"])){
redirect("index.php");
}
$data["customer"]=resultSet($con,"SELECT * FROM customers");
$data["package"]=resultSet($con,"SELECT * FROM package");
$data["forms_value"]=resultSet($con,"SELECT * FROM forms_value");
$data["bulkpackage"]=resultSet($con,"SELECT * FROM bulkpackage");
$data["products"] = resultSet($con, "SELECT * FROM product p INNER JOIN forms_value fv ON fv.fid = p.pform ");
?>
<!DOCTYPE html>
<html lang="en">
<head>
<base href="" />
<title>TDS Admin Hub</title>
<meta charset="utf-8" />
<meta name="description" content="The most advanced Bootstrap 5 Admin Theme with 40 unique prebuilt layouts on Themeforest trusted by 100,000 beginners and professionals. Multi-demo, Dark Mode, RTL support and complete React, Angular, Vue, Asp.Net Core, Rails, Spring, Blazor, Django, Express.js, Node.js, Flask, Symfony & Laravel versions. Grab your copy now and get life-time updates for free." />
<meta name="keywords" content="metronic, bootstrap, bootstrap 5, angular, VueJs, React, Asp.Net Core, Rails, Spring, Blazor, Django, Express.js, Node.js, Flask, Symfony & Laravel starter kits, admin themes, web design, figma, web development, free templates, free admin themes, bootstrap theme, bootstrap template, bootstrap dashboard, bootstrap dak mode, bootstrap button, bootstrap datepicker, bootstrap timepicker, fullcalendar, datatables, flaticon" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta property="og:locale" content="en_US" />
<meta property="og:type" content="article" />
<meta property="og:title" content="Metronic - The World's #1 Selling Bootstrap Admin Template - Metronic by KeenThemes" />
<meta property="og:url" content="https://keenthemes.com/metronic" />
<meta property="og:site_name" content="Metronic by Keenthemes" />
<link rel="canonical" href="https://preview.keenthemes.com/metronic8" />
<link rel="shortcut icon" href="assets/media/logos/favicon.ico" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:300,400,500,600,700" />
<link href="assets/plugins/custom/datatables/datatables.bundle.css" rel="stylesheet" type="text/css" />
<link href="assets/plugins/global/plugins.bundle.css" rel="stylesheet" type="text/css" />
<link href="assets/css/style.bundle.css" rel="stylesheet" type="text/css" />
<style>
.ck-editor__editable[role="textbox"] {
min-height: 180px;
}
</style>
</head>
<body id="kt_app_body" data-kt-app-layout="dark-sidebar" data-kt-app-header-fixed="true" data-kt-app-sidebar-enabled="true" data-kt-app-sidebar-fixed="true" data-kt-app-sidebar-hoverable="true" data-kt-app-sidebar-push-header="true" data-kt-app-sidebar-push-toolbar="true" data-kt-app-sidebar-push-footer="true" data-kt-app-toolbar-enabled="true" class="app-default">
<script>var defaultThemeMode = "light"; var themeMode; if ( document.documentElement ) { if ( document.documentElement.hasAttribute("data-bs-theme-mode")) { themeMode = document.documentElement.getAttribute("data-bs-theme-mode"); } else { if ( localStorage.getItem("data-bs-theme") !== null ) { themeMode = localStorage.getItem("data-bs-theme"); } else { themeMode = defaultThemeMode; } } if (themeMode === "system") { themeMode = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light"; } document.documentElement.setAttribute("data-bs-theme", themeMode); }
</script>
<div class="d-flex flex-column flex-root app-root" id="kt_app_root">
<div class="app-page flex-column flex-column-fluid" id="kt_app_page">
<div id="kt_app_header" class="app-header" data-kt-sticky="true" data-kt-sticky-activate="{default: true, lg: true}" data-kt-sticky-name="app-header-minimize" data-kt-sticky-offset="{default: '200px', lg: '0'}" data-kt-sticky-animation="false">
<div class="app-container container-fluid d-flex align-items-stretch justify-content-between" id="kt_app_header_container">
<div class="d-flex align-items-center d-lg-none ms-n3 me-1 me-md-2" title="Show sidebar menu">
<div class="btn btn-icon btn-active-color-primary w-35px h-35px" id="kt_app_sidebar_mobile_toggle">
<i class="ki-duotone ki-abstract-14 fs-2 fs-md-1">
<span class="path1"></span>
<span class="path2"></span>
</i>
</div>
</div>
<div class="d-flex align-items-center flex-grow-1 flex-lg-grow-0">
<a href="products.php" class="d-lg-none">
<img alt="Logo" src="assets/media/logos/default-small.svg" class="h-30px" />
</a>
</div>
<div class="d-flex align-items-stretch justify-content-between flex-lg-grow-1" id="kt_app_header_wrapper">
<div class="app-header-menu app-header-mobile-drawer align-items-stretch" data-kt-drawer="true" data-kt-drawer-name="app-header-menu" data-kt-drawer-activate="{default: true, lg: false}" data-kt-drawer-overlay="true" data-kt-drawer-width="250px" data-kt-drawer-direction="end" data-kt-drawer-toggle="#kt_app_header_menu_toggle" data-kt-swapper="true" data-kt-swapper-mode="{default: 'append', lg: 'prepend'}" data-kt-swapper-parent="{default: '#kt_app_body', lg: '#kt_app_header_wrapper'}">
<div class="menu menu-rounded menu-column menu-lg-row my-5 my-lg-0 align-items-stretch fw-semibold px-2 px-lg-0" id="kt_app_header_menu" data-kt-menu="true">
</div>
</div>
<div class="app-navbar flex-shrink-0">
<div class="app-navbar-item ms-1 ms-md-4">
<a href="#" class="btn btn-icon btn-custom btn-icon-muted btn-active-light btn-active-color-primary w-35px h-35px" data-kt-menu-trigger="{default:'click', lg: 'hover'}" data-kt-menu-attach="parent" data-kt-menu-placement="bottom-end">
<i class="ki-duotone ki-night-day theme-light-show fs-1">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
<span class="path5"></span>
<span class="path6"></span>
<span class="path7"></span>
<span class="path8"></span>
<span class="path9"></span>
<span class="path10"></span>
</i>
<i class="ki-duotone ki-moon theme-dark-show fs-1">
<span class="path1"></span>
<span class="path2"></span>
</i>
</a>
<div class="menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-title-gray-700 menu-icon-gray-500 menu-active-bg menu-state-color fw-semibold py-4 fs-base w-150px" data-kt-menu="true" data-kt-element="theme-mode-menu">
<div class="menu-item px-3 my-0">
<a href="#" class="menu-link px-3 py-2" data-kt-element="mode" data-kt-value="light">
<span class="menu-icon" data-kt-element="icon">
<i class="ki-duotone ki-night-day fs-2">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
<span class="path5"></span>
<span class="path6"></span>
<span class="path7"></span>
<span class="path8"></span>
<span class="path9"></span>
<span class="path10"></span>
</i>
</span>
<span class="menu-title">Light</span>
</a>
</div>
<div class="menu-item px-3 my-0">
<a href="#" class="menu-link px-3 py-2" data-kt-element="mode" data-kt-value="dark">
<span class="menu-icon" data-kt-element="icon">
<i class="ki-duotone ki-moon fs-2">
<span class="path1"></span>
<span class="path2"></span>
</i>
</span>
<span class="menu-title">Dark</span>
</a>
</div>
<div class="menu-item px-3 my-0">
<a href="#" class="menu-link px-3 py-2" data-kt-element="mode" data-kt-value="system">
<span class="menu-icon" data-kt-element="icon">
<i class="ki-duotone ki-screen fs-2">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
</i>
</span>
<span class="menu-title">System</span>
</a>
</div>
</div>
</div>
<?php include "logo.php" ?>
<div class="app-navbar-item d-lg-none ms-2 me-n2" title="Show header menu">
<div class="btn btn-flex btn-icon btn-active-color-primary w-30px h-30px" id="kt_app_header_menu_toggle">
<i class="ki-duotone ki-element-4 fs-1">
<span class="path1"></span>
<span class="path2"></span>
</i>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="app-wrapper flex-column flex-row-fluid" id="kt_app_wrapper">
<div id="kt_app_sidebar" class="app-sidebar flex-column" data-kt-drawer="true" data-kt-drawer-name="app-sidebar" data-kt-drawer-activate="{default: true, lg: false}" data-kt-drawer-overlay="true" data-kt-drawer-width="225px" data-kt-drawer-direction="start" data-kt-drawer-toggle="#kt_app_sidebar_mobile_toggle">
<div class="app-sidebar-logo px-6" id="kt_app_sidebar_logo">
<a href="products.php">
<img alt="Logo" src="assets/media/logos/LOGO.png" class="h-25px app-sidebar-logo-default" />
<img alt="Logo" src="assets/media/logos/default-small.svg" class="h-20px app-sidebar-logo-minimize" />
</a>
<div id="kt_app_sidebar_toggle" class="app-sidebar-toggle btn btn-icon btn-shadow btn-sm btn-color-muted btn-active-color-primary h-30px w-30px position-absolute top-50 start-100 translate-middle rotate" data-kt-toggle="true" data-kt-toggle-state="active" data-kt-toggle-target="body" data-kt-toggle-name="app-sidebar-minimize">
<i class="ki-duotone ki-black-left-line fs-3 rotate-180">
<span class="path1"></span>
<span class="path2"></span>
</i>
</div>
</div>
<?php include "sidebar.php" ?>
</div>
<div class="app-main flex-column flex-row-fluid" id="kt_app_main">
<div class="d-flex flex-column flex-column-fluid">
<div id="kt_app_toolbar" class="app-toolbar py-3 py-lg-6">
<div id="kt_app_toolbar_container" class="app-container container-xxl d-flex flex-stack">
<div class="page-title d-flex flex-column justify-content-center flex-wrap me-3">
</div>
<div class="d-flex align-items-center gap-2 gap-lg-3">
<div class="m-0">
<div class="menu menu-sub menu-sub-dropdown w-250px w-md-300px" data-kt-menu="true" id="kt_menu_658cdaf4294b1">
<div class="px-7 py-5">
<div class="fs-5 text-gray-900 fw-bold">Filter Options</div>
</div>
<div class="separator border-gray-200"></div>
<div class="px-7 py-5">
<div class="mb-10">
<label class="form-label fw-semibold">Status:</label>
<div>
<select class="form-select form-select-solid" multiple="multiple" data-kt-select2="true" data-close-on-select="false" data-placeholder="Select option" data-dropdown-parent="#kt_menu_658cdaf4294b1" data-allow-clear="true">
<option></option>
<option value="1">Approved</option>
<option value="2">Pending</option>
<option value="2">In Process</option>
<option value="2">Rejected</option>
</select>
</div>
</div>
<div class="mb-10">
<label class="form-label fw-semibold">Member Type:</label>
<div class="d-flex">
<label class="form-check form-check-sm form-check-custom form-check-solid me-5">
<input class="form-check-input" type="checkbox" value="1" />
<span class="form-check-label">Author</span>
</label>
<label class="form-check form-check-sm form-check-custom form-check-solid">
<input class="form-check-input" type="checkbox" value="2" checked="checked" />
<span class="form-check-label">Customer</span>
</label>
</div>
</div>
<div class="mb-10">
<label class="form-label fw-semibold">Notifications:</label>
<div class="form-check form-switch form-switch-sm form-check-custom form-check-solid">
<input class="form-check-input" type="checkbox" value="" name="notifications" checked="checked" />
<label class="form-check-label">Enabled</label>
</div>
</div>
<div class="d-flex justify-content-end">
<button type="reset" class="btn btn-sm btn-light btn-active-light-primary me-2" data-kt-menu-dismiss="true">Reset</button>
<button type="submit" class="btn btn-sm btn-primary" data-kt-menu-dismiss="true">Apply</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-12">
<div id="kt_app_content" class="app-content flex-column-fluid">
<div id="kt_app_content_container" class="app-container container-xxl">
<div class="d-flex flex-column flex-lg-row">
<div class="flex-lg-row-fluid mb-10 mb-lg-0 me-lg-7 me-xl-10">
<div class="card">
<div class="card-body p-12">
<form id="kt_invoice_form" enctype="multipart/form-data">
<div class="d-flex flex-column align-items-start flex-xxl-row">
<div class="d-flex align-items-center flex-equal fw-row me-4 order-2" data-bs-toggle="tooltip" data-bs-trigger="hover" title="Specify invoice date">
<div class="fs-6 fw-bold text-gray-700 text-nowrap">Date:</div>
<div class="position-relative d-flex align-items-center w-150px">
<input class="form-control form-control-solid" name='invoice_date' placeholder="Pick date rage" id="kt_daterangepicker"/>
<span class="svg-icon svg-icon-2 position-absolute ms-4 end-0">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.4343 12.7344L7.25 8.55005C6.83579 8.13583 6.16421 8.13584 5.75 8.55005C5.33579 8.96426 5.33579 9.63583 5.75 10.05L11.2929 15.5929C11.6834 15.9835 12.3166 15.9835 12.7071 15.5929L18.25 10.05C18.6642 9.63584 18.6642 8.96426 18.25 8.55005C17.8358 8.13584 17.1642 8.13584 16.75 8.55005L12.5657 12.7344C12.2533 13.0468 11.7467 13.0468 11.4343 12.7344Z" fill="currentColor" />
</svg>
</span>
</div>
</div>
<div class="d-flex flex-center flex-equal fw-row text-nowrap order-1 order-xxl-2 me-4" data-bs-toggle="tooltip" data-bs-trigger="hover" title="Enter invoice number">
<span class="fs-2x fw-bold text-gray-800">Invoice #</span>
<input type="text" class="form-control form-control-flush fw-bold text-muted fs-3 w-125px" name='invoice_number' value="2025001" placehoder="..." />
</div>
<div class="d-flex align-items-center justify-content-end flex-equal order-3 fw-row" data-bs-toggle="tooltip" data-bs-trigger="hover" title="Specify invoice due date">
<div class="fs-6 fw-bold text-gray-700 text-nowrap">Due Date:</div>
<div class="position-relative d-flex align-items-center w-150px">
<input class="form-control form-control-solid" name='due_date' placeholder="Pick date rage" id="kt_daterangepicker_3"/>
<span class="svg-icon svg-icon-2 position-absolute end-0 ms-4">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.4343 12.7344L7.25 8.55005C6.83579 8.13583 6.16421 8.13584 5.75 8.55005C5.33579 8.96426 5.33579 9.63583 5.75 10.05L11.2929 15.5929C11.6834 15.9835 12.3166 15.9835 12.7071 15.5929L18.25 10.05C18.6642 9.63584 18.6642 8.96426 18.25 8.55005C17.8358 8.13584 17.1642 8.13584 16.75 8.55005L12.5657 12.7344C12.2533 13.0468 11.7467 13.0468 11.4343 12.7344Z" fill="currentColor" />
</svg>
</span>
</div>
</div>
</div>
<div class="separator separator-dashed my-10"></div>
<div class="mb-0">
<div class="row gx-10 mb-5">
<div class="col-lg-6">
<label class="form-label fs-6 fw-bold text-gray-700 mb-3">Select Customer</label>
<div class="mb-5">
<select class="form-select" name="customer" data-control="select2" data-placeholder="Select an Customer">
<option></option>
<?php $i = 0; foreach($data['customer'] as $row) : $i++?>
<option value="<?php echo $row["id"] ?>"><?php echo $row["name"] ?></option>
<?php endforeach ?>
</select>
</div>
</div>
<div class="col-lg-6">
<label class="form-label fs-6 fw-bold text-gray-700 mb-3">GST Details</label>
<div class="pt-3">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="cus_gst" id="gst_no" value="0" checked>
<label class="form-check-label" for="gst_no">No</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="cus_gst" id="gst_yes" value="1">
<label class="form-check-label" for="gst_yes">Yes</label>
</div>
</div>
</div>
<div class="col-12">
<div class="separator separator-dashed my-10"></div>
</div>
<div class="col-lg-12">
<div class='ship_address '>
</div>
</div>
<div class="col-lg-12">
<div class='bill_address'>
</div>
</div>
<div class="col-md-12">
<h2 class='pt-5 pb-3'>Vehicle Details</h2>
</div>
<div class="col-lg-6">
<h4 class="form-label fs-6 fw-bold text-gray-700 mb-3">Vehicle number </h4>
<input type="text" class="form-control mb-2 mb-md-0" name="vehical_number" min="1" required placeholder="Enter Vehical Number " />
</div>
<div class="col-lg-6">
<h4 class="form-label fs-6 fw-bold text-gray-700 mb-3">Vehicle</h4>
<select class="form-select" name="customer_vehicle" data-control="select2" data-placeholder="Select Any One">
<option></option>
<option value='0'> Paid </option>
<option value='1'> To Pay </option>
</select>
</div>
<div class="col-12">
<div class='separator separator-dashed my-10'></div>
</div>
<div class="col-lg-12">
<div id="kt_docs_repeater_basic" class="">
<h2 class="fw-bold mb-5 mt-5 ">Selected Products</h2>
<div class="row">
<div class="col-md-3">
<label class="form-label">Product</label>
</div>
<!-- <div class="col-md-2">
<label class="form-label">HSN Code</label>
</div> -->
<div class="col-md-2">
<label class="form-label">Package</label>
</div>
<div class="col-md-2">
<label class="form-label">Quantity</label>
</div>
<div class="col-md-2">
<label class="form-label"> Price / Item</label>
</div>
</div>
<div class="form-group">
<div data-repeater-list="kt_docs_repeater_basic">
<div data-repeater-item>
<div class="form-group pt-5 row">
<div class="col-md-3">
<select class="form-select pid" data-control="select2" name="pid" id='pid' data-placeholder='select a product'>
<option></option>
<?php foreach ($data["products"] as $row): ?>
<?php
$packageMap = [
'INNER_PLAIN_COVER' => 'IN',
'OUTER_BRANDED_COVER' => 'OUT',
'BOTTLE_PLAIN' => 'BOTTLE',
'LABEL_BRANDED' => 'LABEL'
];
$label = $row['productpackage'];
?>
<option value="<?php echo $row['pid']; ?>">
<?php echo $row['pname']; ?> (<?php echo $row['measurement']; ?>)
</option>
<?php endforeach; ?>
</select>
</div>
<!-- <div class="col-md-2">
<input type="text" class="form-control mb-2 mb-md-0" name="hsn" min="1" required placeholder="Enter HSN Code" />
</div> -->
<div class="col-md-2">
<select name="packing" data-control="select2" class="form-select paid mb-2" id='paid' data-placeholder="Select an Package">
<option></option>
</select>
</div>
<div class="col-md-2">
<input type="number" class="form-control mb-2 mb-md-0" name="iqty" min="1" required placeholder="Enter Quantity" />
</div>
<div class="col-md-2">
<input type="number" class="form-control mb-2 mb-md-0" name="newprice" min="1" required placeholder="Enter Price" />
</div>
<div class="col-md-1">
<a href="javascript:;" data-repeater-delete class="mt-1 btn btn-sm btn-light-danger">
<i class="ki-duotone ki-trash fs-5">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
<span class="path5"></span>
</i>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="form-group mt-5">
<button type="button" data-repeater-create style="display:none;" id="realAddRepeaterBtn"></button>
<button type="button" id="addNewRowBtn" class="btn btn-primary">Add Row</button>
</div>
</div>
</div>
</div>
</div>
<div class="d-flex justify-content-end mt-4">
<a href="invoice.php" id="kt_ecommerce_add_product_cancel" class="btn btn-light me-5">Cancel</a>
<button type="submit" id="btn-submit" class="btn btn-primary">
<span class="indicator-label">Submit</span>
<span class="indicator-progress">Please wait...
<span class="spinner-border spinner-border-sm align-middle ms-2"></span>
</span>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="kt_app_footer" class="app-footer">
<div class="app-container container-fluid d-flex flex-column flex-md-row flex-center flex-md-stack py-3">
<div class="text-gray-900 order-2 order-md-1">
<span class="text-muted fw-semibold me-1">2025 ©</span>
<a href="https://thedotstudios.com/" target="_blank" class="text-gray-800 text-hover-primary">Copyright All rights reserved | Made with <span class="fa fa-heart text-danger"></span> <b> by TheDotStudios.</b></a>
</div>
<ul class="menu menu-gray-600 menu-hover-primary fw-semibold order-1">
<li class="menu-item">
<a href="https://thedotstudios.com/" target="_blank" class="menu-link px-2">About</a>
</li>
<li class="menu-item">
<a href="https://thedotstudios.com/" target="_blank" class="menu-link px-2">Support</a>
</li>
<li class="menu-item">
<!-- <a href="https://1.envato.market/EA4JP" target="_blank" class="menu-link px-2">Purchase</a> -->
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="kt_scrolltop" class="scrolltop" data-kt-scrolltop="true">
<i class="ki-duotone ki-arrow-up">
<span class="path1"></span>
<span class="path2"></span>
</i>
</div>
<script>var hostUrl = "assets/";</script>
<script src="assets/plugins/global/plugins.bundle.js"></script>
<script src="assets/js/scripts.bundle.js"></script>
<script src="assets/plugins/custom/datatables/datatables.bundle.js"></script>
<script src="assets/plugins/custom/formrepeater/formrepeater.bundle.js"></script>
<script src="assets/js/widgets.bundle.js"></script>
<script src="assets/js/custom/widgets.js"></script>
<script src="assets/js/custom/apps/chat/chat.js"></script>
<script src="assets/js/custom/utilities/modals/upgrade-plan.js"></script>
<script src="assets/js/custom/utilities/modals/create-app.js"></script>
<script src="assets/js/custom/utilities/modals/users-search.js"></script>
<script>
$('#kt_docs_repeater_basic').repeater({
initEmpty: false,
defaultValues: {
'text-input': 'foo'
},
show: function () {
$(this).slideDown();
},
hide: function (deleteElement) {
const allItems = $(this).closest('[data-repeater-list]').find('[data-repeater-item]');
if (allItems.length > 1) {
$(this).slideUp(deleteElement);
} else {
const errorMsg = $('<div class="alert alert-danger mt-2 mb-2">Cannot delete the last row. At least one row is required.</div>');
$(this).closest('[data-repeater-list]').append(errorMsg);
setTimeout(() => {
errorMsg.fadeOut(function() {
$(this).remove();
});
}, 300);
return false;
}
}
});
$('#addNewRowBtn').on('click', function () {
const lastItem = $('[data-repeater-list]').find('[data-repeater-item]:visible').last();
let isValid = true;
// Validate only visible, non-hidden inputs
lastItem.find('input:not([type="hidden"])').each(function () {
if ($.trim($(this).val()) === '') {
$(this).addClass('is-invalid');
isValid = false;
} else {
$(this).removeClass('is-invalid');
}
});
lastItem.find('select').each(function () {
const isSelect2 = $(this).hasClass('select2-hidden-accessible');
const selectedValues = $(this).val(); // for multiple, it's an array
if (!selectedValues || selectedValues.length === 0) {
isValid = false;
if (isSelect2) {
$(this).next('.select2').find('.select2-selection').addClass('is-invalid');
} else {
$(this).addClass('is-invalid');
}
} else {
if (isSelect2) {
$(this).next('.select2').find('.select2-selection').removeClass('is-invalid');
} else {
$(this).removeClass('is-invalid');
}
}
});
if (isValid) {
// Trigger the actual repeater add
$('#realAddRepeaterBtn').click();
} else {
Swal.fire({
icon: 'error',
title: 'Error',
text: 'Please fill all required fields before adding a new row.',
});
}
});
$("#kt_daterangepicker_3").daterangepicker({
singleDatePicker: true,
showDropdowns: true,
minYear: 1901,
maxYear: parseInt(moment().format("YYYY"),12)
}, function(start, end, label) {
var years = moment().diff(start, "years");
}
);
$("#kt_daterangepicker").daterangepicker({
singleDatePicker: true,
showDropdowns: true,
minYear: 1901,
maxYear: parseInt(moment().format("YYYY"),12)
}, function(start, end, label) {
var years = moment().diff(start, "years");
}
);
// $(document).ready(function () {
// function toggleGstInput() {
// let gstSelect = $("select[name='cus_gst']").val();
// let gstInput = $("input[name='withgst']");
// if (gstSelect == "1") {
// gstInput.closest(".mb-5").removeClass("d-none");
// gstInput.val("18%"); // Set GST value to 18%
// } else {
// gstInput.closest(".mb-5").addClass("d-none");
// gstInput.val("0%"); // Set GST value to 0%
// }
// }
// toggleGstInput();
// $("select[name='cus_gst']").on("change", function () {
// toggleGstInput();
// });
// });
// $('#toggleShippingAddress').on('change', function() {
// if ($(this).is(':checked')) {
// $('#shippingAddressSection').slideDown();
// } else {
// $('#shippingAddressSection').slideUp();
// }
// });
$(document).ready(function(){
$('select[name="customer"]').on('change', function(){
var customerId = $(this).val();
$.ajax({
url: 'get_customer_addresses.php',
type: 'GET',
data: { id: customerId },
dataType: 'json',
success: function(response){
$('.bill_address').html(response.bill_address);
$('.ship_address').html(response.ship_address);
$('#toggleShippingAddress').off('change').on('change', function() {
if ($(this).is(':checked')) {
$('#shippingAddressSection').slideDown();
} else {
$('#shippingAddressSection').slideUp();
}
});
},
error: function(xhr, status, error){
console.error("Error fetching addresses: ", error);
}
});
});
});
$(document).ready(function() {
$("#kt_invoice_form").submit(function(e) {
e.preventDefault();
// Show loading indicator
Swal.fire({
title: 'Processing...',
text: 'Please wait while we process your invoice',
allowOutsideClick: false,
allowEscapeKey: false,
didOpen: () => {
Swal.showLoading();
}
});
var formData = new FormData(this);
$.ajax({
url: "insert_invoice.php",
type: "POST",
data: formData,
processData: false,
contentType: false,
success: function(response) {
try {
// Try to parse JSON response
var jsonResponse = typeof response === 'string' ? JSON.parse(response) : response;
console.log("Server response:", jsonResponse);
if (jsonResponse.status === 'error') {
Swal.fire({
icon: 'error',
title: 'Error!',
text: jsonResponse.message,
confirmButtonText: 'OK'
});
} else if (jsonResponse.status === 'success') {
Swal.fire({
icon: 'success',
title: 'Success!',
text: jsonResponse.message,
confirmButtonText: 'OK'
}).then(() => {
// Reset form and redirect
$("#kt_invoice_form")[0].reset();
window.location.href = "invoice.php";
});
} else {
// Unexpected response format
Swal.fire({
icon: 'warning',
title: 'Unexpected Response',
text: 'The server returned an unexpected response format.',
confirmButtonText: 'OK'
});
console.warn("Unexpected response format:", response);
}
} catch (e) {
// Handle JSON parse errors
console.error('Error parsing response:', e);
console.log('Raw response:', response);
Swal.fire({
icon: 'error',
title: 'Response Error',
text: 'Could not process server response. Please check the console for details.',
confirmButtonText: 'OK'
});
}
},
error: function(xhr, status, error) {
// Handle AJAX errors
console.error("AJAX Error:", status, error);
console.log("Response Text:", xhr.responseText);
Swal.fire({
icon: 'error',
title: 'Request Failed',
text: 'Failed to communicate with the server: ' + status + ' - ' + (xhr.responseText || error),
confirmButtonText: 'OK'
});
}
});
});
});
$(document).on("change", ".pid", function () {
var selectedProduct = $(this).val();
var row = $(this).closest("[data-repeater-item]"); // Find the row of the changed PID
console.log("Product changed:", selectedProduct);
if (selectedProduct) {
$.ajax({
type: "POST",
url: "fetch_product_details_01.php",
data: { pid: selectedProduct },
dataType: "json",
success: function (response) {
console.log("Full Response:", response);
// Check if formValues or paidValues are empty
if (!response || (!response.formValues.length && !response.paidValues.length)) {
console.warn("No options received for formValues or paidValues.");
return;
}
// Clear existing options in dropdowns before adding new options
var formValuesDropdown = row.find(".form_Values");
var paidDropdown = row.find(".paid");
var bpidDropdown = row.find(".bpid");
formValuesDropdown.empty().append('<option value="">Select an option</option>');
paidDropdown.empty().append('<option value="">Select an option</option>');
bpidDropdown.empty().append('<option value="">Select an option</option>');
// Append new options for formValues, paidValues, and bpidValues
$.each(response.formValues, function (index, item) {
formValuesDropdown.append(
`<option value="${item.id}">${item.name} (${item.measurement})</option>`
);
});
$.each(response.paidValues, function (index, item) {
paidDropdown.append(
`<option value="${item.id}">${item.name}</option>`
);
});
$.each(response.bpidValues, function (index, item) {
bpidDropdown.append(
`<option value="${item.id}">${item.name}</option>`
);
});
// Apply select2 if it's initialized
if ($.fn.select2) {
formValuesDropdown.select2();
bpidDropdown.select2();
paidDropdown.select2();
}
console.log("Dropdowns updated successfully.");
// Disable already selected paid options within the same pid group (optional)
updatePaidOptions(row);
},
error: function (xhr, status, error) {
console.error("AJAX Error:", xhr.responseText);
alert("Failed to fetch product details. Please try again.");
}
});
}
});
// Optional function to update paid options based on your business logic
function updatePaidOptions(row) {
var selectedPaid = row.find(".paid").val(); // Get the selected paid value
row.find(".paid option").each(function () {
if ($(this).val() === selectedPaid) {
$(this).attr("disabled", true); // Disable already selected option in the dropdown
}
});
}
function updatePaidOptions(currentRow) {
var currentPid = currentRow.find(".pid").val();
// Collect all selected 'paid' values for this specific pid
var selectedPaidValues = [];
$("[data-repeater-item]").each(function () {
var row = $(this);
var pid = row.find(".pid").val();
var paid = row.find(".paid").val();
if (pid === currentPid && paid) {
selectedPaidValues.push(paid);
}
});
// Disable duplicate 'paid' options in dropdowns for the same pid
$("[data-repeater-item]").each(function () {
var row = $(this);
var pid = row.find(".pid").val();
var dropdown = row.find(".paid");
if (pid === currentPid) {
var currentSelected = dropdown.val(); // Allow currently selected value
dropdown.find("option").each(function () {
var optionVal = $(this).val();
if (selectedPaidValues.includes(optionVal) && optionVal !== currentSelected && optionVal !== "") {
$(this).prop("disabled", true);
} else {
$(this).prop("disabled", false);
}
});
}
});
}
$(document).on("change", ".paid", function () {
var row = $(this).closest("[data-repeater-item]");
updatePaidOptions(row);
});
</script>
</body>
</html>