UI reworking and updates adding icons etc

This commit is contained in:
johnnyq
2023-02-17 18:00:05 -05:00
parent 3742051e03
commit 2d4a90f36b
19 changed files with 429 additions and 344 deletions

View File

@@ -25,7 +25,7 @@ if (isset($_GET['invoice_id'])) {
$row = mysqli_fetch_array($sql); $row = mysqli_fetch_array($sql);
$invoice_id = intval($row['invoice_id']); $invoice_id = intval($row['invoice_id']);
$invoice_prefix = htmlentities($row['invoice_prefix']); $invoice_prefix = htmlentities($row['invoice_prefix']);
$invoice_number = htmlentities($row['invoice_number']); $invoice_number = intval($row['invoice_number']);
$invoice_scope = htmlentities($row['invoice_scope']); $invoice_scope = htmlentities($row['invoice_scope']);
$invoice_status = htmlentities($row['invoice_status']); $invoice_status = htmlentities($row['invoice_status']);
$invoice_date = htmlentities($row['invoice_date']); $invoice_date = htmlentities($row['invoice_date']);
@@ -73,7 +73,7 @@ if (isset($_GET['invoice_id'])) {
//Add up all the payments for the invoice and get the total amount paid to the invoice //Add up all the payments for the invoice and get the total amount paid to the invoice
$sql_amount_paid = mysqli_query($mysqli, "SELECT SUM(payment_amount) AS amount_paid FROM payments WHERE payment_invoice_id = $invoice_id"); $sql_amount_paid = mysqli_query($mysqli, "SELECT SUM(payment_amount) AS amount_paid FROM payments WHERE payment_invoice_id = $invoice_id");
$row = mysqli_fetch_array($sql_amount_paid); $row = mysqli_fetch_array($sql_amount_paid);
$amount_paid = $row['amount_paid']; $amount_paid = floatval($row['amount_paid']);
$balance = $invoice_amount - $amount_paid; $balance = $invoice_amount - $amount_paid;
@@ -121,27 +121,33 @@ if (isset($_GET['invoice_id'])) {
<div class="col-8"> <div class="col-8">
<?php if ($invoice_status == 'Draft') { ?> <?php if ($invoice_status == 'Draft') { ?>
<button class="btn btn-success btn-sm dropdown-toggle" type="button" data-toggle="dropdown"> <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
<i class="fas fa-fw fa-paper-plane"></i> Send <i class="fas fa-fw fa-paper-plane mr-2"></i>Send
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">
<?php if (!empty($config_smtp_host) && !empty($contact_email)) { ?> <?php if (!empty($config_smtp_host) && !empty($contact_email)) { ?>
<a class="dropdown-item" href="post.php?email_invoice=<?php echo $invoice_id; ?>">Send Email</a> <a class="dropdown-item" href="post.php?email_invoice=<?php echo $invoice_id; ?>">
<i class="fas fa-fw fa-paper-plane mr-2"></i>Send Email
</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<?php } ?> <?php } ?>
<a class="dropdown-item" href="post.php?mark_invoice_sent=<?php echo $invoice_id; ?>">Mark Sent</a> <a class="dropdown-item" href="post.php?mark_invoice_sent=<?php echo $invoice_id; ?>">
<i class="fas fa-fw fa-check mr-2"></i>Mark Sent
</a>
</div> </div>
<?php } ?> <?php } ?>
<?php if ($invoice_status !== 'Paid' && $invoice_status !== 'Cancelled' && $invoice_status !== 'Draft') { ?> <?php if ($invoice_status !== 'Paid' && $invoice_status !== 'Cancelled' && $invoice_status !== 'Draft') { ?>
<a class="btn btn-success" href="#" data-toggle="modal" data-target="#addPaymentModal"><i class="fa fa-fw fa-credit-card mr-2"></i>Add Payment</a> <a class="btn btn-success" href="#" data-toggle="modal" data-target="#addPaymentModal">
<i class="fa fa-fw fa-credit-card mr-2"></i>Add Payment
</a>
<?php } ?> <?php } ?>
</div> </div>
<div class="col-4"> <div class="col-4">
<div class="dropdown dropleft text-center float-right"> <div class="dropdown dropleft text-center float-right">
<button class="btn btn-dark" type="button" data-toggle="dropdown"> <button class="btn btn-secondary" type="button" data-toggle="dropdown">
<i class="fas fa-ellipsis-v"></i> <i class="fas fa-ellipsis-v"></i>
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">
@@ -260,8 +266,8 @@ if (isset($_GET['invoice_id'])) {
<tbody> <tbody>
<?php <?php
$total_tax = 0; $total_tax = 0.00;
$sub_total = 0; $sub_total = 0.00;
while ($row = mysqli_fetch_array($sql_invoice_items)) { while ($row = mysqli_fetch_array($sql_invoice_items)) {
$item_id = intval($row['item_id']); $item_id = intval($row['item_id']);
@@ -406,7 +412,7 @@ if (isset($_GET['invoice_id'])) {
<div class="col-sm"> <div class="col-sm">
<div class="card"> <div class="card">
<div class="card-header text-bold"> <div class="card-header text-bold">
<i class="fa fa-fw fa-history mr-2"></i>History <i class="fa fa-history mr-2"></i>History
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse"> <button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i> <i class="fas fa-minus"></i>
@@ -451,7 +457,7 @@ if (isset($_GET['invoice_id'])) {
<div class="col-sm d-print-none"> <div class="col-sm d-print-none">
<div class="card"> <div class="card">
<div class="card-header text-bold"> <div class="card-header text-bold">
<i class="fa fa-fw fa-credit-card mr-2"></i>Payments <i class="fa fa-credit-card mr-2"></i>Payments
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse"> <button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i> <i class="fas fa-minus"></i>
@@ -679,8 +685,8 @@ require_once("footer.php");
], ],
// Items // Items
<?php <?php
$total_tax = 0; $total_tax = 0.00;
$sub_total = 0; $sub_total = 0.00;
$sql_invoice_items = mysqli_query($mysqli, "SELECT * FROM invoice_items WHERE item_invoice_id = $invoice_id ORDER BY item_id ASC"); $sql_invoice_items = mysqli_query($mysqli, "SELECT * FROM invoice_items WHERE item_invoice_id = $invoice_id ORDER BY item_id ASC");

View File

@@ -2,7 +2,7 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content bg-dark"> <div class="modal-content bg-dark">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title"><i class="fa fa-fw fa-file"></i> New Invoice</h5> <h5 class="modal-title"><i class="fa fa-file mr-2"></i>New Invoice</h5>
<button type="button" class="close text-white" data-dismiss="modal"> <button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -10,6 +10,17 @@
<form action="post.php" method="post" autocomplete="off"> <form action="post.php" method="post" autocomplete="off">
<div class="modal-body bg-white"> <div class="modal-body bg-white">
<div class="form-group">
<label>Scope</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-comment"></i></span>
</div>
<input type="text" class="form-control" name="scope" placeholder="Quick description">
</div>
</div>
<?php if (isset($_GET['client_id'])) { ?> <?php if (isset($_GET['client_id'])) { ?>
<input type="hidden" name="client" value="<?php echo $client_id; ?>"> <input type="hidden" name="client" value="<?php echo $client_id; ?>">
<?php }else{ ?> <?php }else{ ?>
@@ -40,16 +51,6 @@
<?php } ?> <?php } ?>
<div class="form-group">
<label>Invoice Date <strong class="text-danger">*</strong></label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-calendar"></i></span>
</div>
<input type="date" class="form-control" name="date" max="2999-12-31" value="<?php echo date("Y-m-d"); ?>" required>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label>Category <strong class="text-danger">*</strong></label> <label>Category <strong class="text-danger">*</strong></label>
<div class="input-group"> <div class="input-group">
@@ -78,19 +79,19 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Scope</label> <label>Invoice Date <strong class="text-danger">*</strong></label>
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-comment"></i></span> <span class="input-group-text"><i class="fa fa-fw fa-calendar"></i></span>
</div> </div>
<input type="text" class="form-control" name="scope" placeholder="Quick description"> <input type="date" class="form-control" name="date" max="2999-12-31" value="<?php echo date("Y-m-d"); ?>" required>
</div> </div>
</div> </div>
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="add_invoice" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Create</button>
<button type="submit" name="add_invoice" class="btn btn-primary text-bold"><i class="fa fa-check"></i> Create</button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -53,7 +53,7 @@ $real_overdue_amount = $total_overdue - $total_overdue_partial;
if (!empty($_GET['sb'])) { if (!empty($_GET['sb'])) {
$sb = strip_tags(mysqli_real_escape_string($mysqli, $_GET['sb'])); $sb = sanitizeInput($_GET['sb']);
} else { } else {
$sb = "invoice_number"; $sb = "invoice_number";
} }
@@ -85,8 +85,8 @@ if (isset($_GET['status']) && ($_GET['status']) == 'Draft') {
//Date Filter //Date Filter
if ($_GET['canned_date'] == "custom" && !empty($_GET['dtf'])) { if ($_GET['canned_date'] == "custom" && !empty($_GET['dtf'])) {
$dtf = strip_tags(mysqli_real_escape_string($mysqli, $_GET['dtf'])); $dtf = sanitizeInput($_GET['dtf']);
$dtt = strip_tags(mysqli_real_escape_string($mysqli, $_GET['dtt'])); $dtt = sanitizeInput($_GET['dtt']);
} elseif ($_GET['canned_date'] == "today") { } elseif ($_GET['canned_date'] == "today") {
$dtf = date('Y-m-d'); $dtf = date('Y-m-d');
$dtt = date('Y-m-d'); $dtt = date('Y-m-d');
@@ -196,9 +196,9 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<div class="card card-dark"> <div class="card card-dark">
<div class="card-header py-2"> <div class="card-header py-2">
<h3 class="card-title mt-2"><i class="fa fa-fw fa-file"></i> Invoices</h3> <h3 class="card-title mt-2"><i class="fa fa-file-invoice mr-2"></i>Invoices</h3>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addInvoiceModal"><i class="fas fa-fw fa-plus"></i> New Invoice</button> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addInvoiceModal"><i class="fas fa-plus mr-2"></i>New Invoice</button>
</div> </div>
</div> </div>
@@ -253,23 +253,23 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-striped table-borderless table-hover"> <table class="table table-striped table-borderless table-hover">
<thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?>"> <thead class="text-dark <?php if ($num_rows[0] == 0) { echo "d-none"; } ?>">
<tr> <tr>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_number&o=<?php echo $disp; ?>">Number</a></th> <th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_number&o=<?php echo $disp; ?>">Number</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_scope&o=<?php echo $disp; ?>">Scope</a></th> <th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_scope&o=<?php echo $disp; ?>">Scope</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=client_name&o=<?php echo $disp; ?>">Client</a></th> <th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=client_name&o=<?php echo $disp; ?>">Client</a></th>
<th class="text-right"><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_amount&o=<?php echo $disp; ?>">Amount</a></th> <th class="text-right"><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_amount&o=<?php echo $disp; ?>">Amount</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_date&o=<?php echo $disp; ?>">Date</a></th> <th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_date&o=<?php echo $disp; ?>">Date</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_due&o=<?php echo $disp; ?>">Due</a></th> <th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_due&o=<?php echo $disp; ?>">Due</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=category_name&o=<?php echo $disp; ?>">Category</a></th> <th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=category_name&o=<?php echo $disp; ?>">Category</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_status&o=<?php echo $disp; ?>">Status</a></th> <th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=invoice_status&o=<?php echo $disp; ?>">Status</a></th>
<th class="text-center">Action</th> <th class="text-center">Action</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<?php <?php
while ($row = mysqli_fetch_array($sql)) { while ($row = mysqli_fetch_array($sql)) {
$invoice_id = $row['invoice_id']; $invoice_id = intval($row['invoice_id']);
$invoice_prefix = htmlentities($row['invoice_prefix']); $invoice_prefix = htmlentities($row['invoice_prefix']);
$invoice_number = htmlentities($row['invoice_number']); $invoice_number = htmlentities($row['invoice_number']);
$invoice_scope = htmlentities($row['invoice_scope']); $invoice_scope = htmlentities($row['invoice_scope']);
@@ -279,17 +279,17 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
$invoice_scope_display = $invoice_scope; $invoice_scope_display = $invoice_scope;
} }
$invoice_status = htmlentities($row['invoice_status']); $invoice_status = htmlentities($row['invoice_status']);
$invoice_date = $row['invoice_date']; $invoice_date = htmlentities($row['invoice_date']);
$invoice_due = $row['invoice_due']; $invoice_due = htmlentities($row['invoice_due']);
$invoice_amount = floatval($row['invoice_amount']); $invoice_amount = floatval($row['invoice_amount']);
$invoice_currency_code = htmlentities($row['invoice_currency_code']); $invoice_currency_code = htmlentities($row['invoice_currency_code']);
$invoice_created_at = $row['invoice_created_at']; $invoice_created_at = htmlentities($row['invoice_created_at']);
$client_id = $row['client_id']; $client_id = intval($row['client_id']);
$client_name = htmlentities($row['client_name']); $client_name = htmlentities($row['client_name']);
$category_id = $row['category_id']; $category_id = intval($row['category_id']);
$category_name = htmlentities($row['category_name']); $category_name = htmlentities($row['category_name']);
$client_currency_code = htmlentities($row['client_currency_code']); $client_currency_code = htmlentities($row['client_currency_code']);
$client_net_terms = htmlentities($row['client_net_terms']); $client_net_terms = intval($row['client_net_terms']);
if ($client_net_terms == 0) { if ($client_net_terms == 0) {
$client_net_terms = $config_default_net_terms; $client_net_terms = $config_default_net_terms;
} }
@@ -307,10 +307,10 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?> ?>
<tr> <tr>
<td><a href="invoice.php?invoice_id=<?php echo $invoice_id; ?>"><?php echo "$invoice_prefix$invoice_number"; ?></a></td> <td class="text-bold"><a href="invoice.php?invoice_id=<?php echo $invoice_id; ?>"><?php echo "$invoice_prefix$invoice_number"; ?></a></td>
<td><?php echo $invoice_scope_display; ?></td> <td><?php echo $invoice_scope_display; ?></td>
<td><a href="client_invoices.php?client_id=<?php echo $client_id; ?>"><?php echo $client_name; ?></a></td> <td class="text-bold"><a href="client_invoices.php?client_id=<?php echo $client_id; ?>"><?php echo $client_name; ?></a></td>
<td class="text-right"><?php echo numfmt_format_currency($currency_format, $invoice_amount, $invoice_currency_code); ?></td> <td class="text-bold text-right"><?php echo numfmt_format_currency($currency_format, $invoice_amount, $invoice_currency_code); ?></td>
<td><?php echo $invoice_date; ?></td> <td><?php echo $invoice_date; ?></td>
<td class="<?php echo $overdue_color; ?>"><?php echo $invoice_due; ?></td> <td class="<?php echo $overdue_color; ?>"><?php echo $invoice_due; ?></td>
<td><?php echo $category_name; ?></td> <td><?php echo $category_name; ?></td>

View File

@@ -2,7 +2,7 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content bg-dark"> <div class="modal-content bg-dark">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title"><i class="fa fa-edit mr-2"></i>Edit Line Item: <?php echo $item_name; ?></h5> <h5 class="modal-title"><i class="fa fa-edit mr-2"></i>Editing Line Item: <strong><?php echo $item_name; ?></strong></h5>
<button type="button" class="close text-white" data-dismiss="modal"> <button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -29,15 +29,8 @@
</div> </div>
</div> </div>
<div class="form-group">
<label>Description</label>
<div class="input-group">
<textarea class="form-control" rows="5" name="description"><?php echo $item_description; ?></textarea>
</div>
</div>
<div class="form-row"> <div class="form-row">
<div class="col"> <div class="col-sm">
<div class="form-group"> <div class="form-group">
<label>QTY <strong class="text-danger">*</strong></label> <label>QTY <strong class="text-danger">*</strong></label>
@@ -51,7 +44,7 @@
</div> </div>
<div class="col"> <div class="col-sm">
<div class="form-group"> <div class="form-group">
<label>Price <strong class="text-danger">*</strong></label> <label>Price <strong class="text-danger">*</strong></label>
@@ -67,6 +60,13 @@
</div> </div>
<div class="form-group">
<label>Description</label>
<div class="input-group">
<textarea class="form-control" rows="5" name="description"><?php echo $item_description; ?></textarea>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label>Tax <strong class="text-danger">*</strong></label> <label>Tax <strong class="text-danger">*</strong></label>
<div class="input-group"> <div class="input-group">
@@ -74,7 +74,7 @@
<span class="input-group-text"><i class="fa fa-fw fa-piggy-bank"></i></span> <span class="input-group-text"><i class="fa fa-fw fa-piggy-bank"></i></span>
</div> </div>
<select class="form-control select2" name="tax_id" required> <select class="form-control select2" name="tax_id" required>
<option value="0">None</option> <option value="0">No Tax</option>
<?php <?php
$taxes_sql = mysqli_query($mysqli, "SELECT * FROM taxes WHERE (tax_archived_at > '$item_created_at' OR tax_archived_at IS NULL) AND company_id = $session_company_id ORDER BY tax_name ASC"); $taxes_sql = mysqli_query($mysqli, "SELECT * FROM taxes WHERE (tax_archived_at > '$item_created_at' OR tax_archived_at IS NULL) AND company_id = $session_company_id ORDER BY tax_name ASC");
@@ -95,8 +95,8 @@
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="edit_item" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
<button type="submit" name="edit_item" class="btn btn-primary"><strong><i class="fas fa-check"></i> Save</strong></button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

149
quote.php
View File

@@ -22,19 +22,19 @@ if (isset($_GET['quote_id'])) {
} }
$row = mysqli_fetch_array($sql); $row = mysqli_fetch_array($sql);
$quote_id = $row['quote_id']; $quote_id = intval($row['quote_id']);
$quote_prefix = htmlentities($row['quote_prefix']); $quote_prefix = htmlentities($row['quote_prefix']);
$quote_number = htmlentities($row['quote_number']); $quote_number = htmlentities($row['quote_number']);
$quote_scope = htmlentities($row['quote_scope']); $quote_scope = htmlentities($row['quote_scope']);
$quote_status = htmlentities($row['quote_status']); $quote_status = htmlentities($row['quote_status']);
$quote_date = $row['quote_date']; $quote_date = htmlentities($row['quote_date']);
$quote_amount = floatval($row['quote_amount']); $quote_amount = floatval($row['quote_amount']);
$quote_currency_code = htmlentities($row['quote_currency_code']); $quote_currency_code = htmlentities($row['quote_currency_code']);
$quote_note = htmlentities($row['quote_note']); $quote_note = htmlentities($row['quote_note']);
$quote_url_key = htmlentities($row['quote_url_key']); $quote_url_key = htmlentities($row['quote_url_key']);
$quote_created_at = $row['quote_created_at']; $quote_created_at = htmlentities($row['quote_created_at']);
$category_id = $row['quote_category_id']; $category_id = intval($row['quote_category_id']);
$client_id = $row['client_id']; $client_id = intval($row['client_id']);
$client_name = htmlentities($row['client_name']); $client_name = htmlentities($row['client_name']);
$location_address = htmlentities($row['location_address']); $location_address = htmlentities($row['location_address']);
$location_city = htmlentities($row['location_city']); $location_city = htmlentities($row['location_city']);
@@ -46,11 +46,11 @@ if (isset($_GET['quote_id'])) {
$contact_mobile = formatPhoneNumber($row['contact_mobile']); $contact_mobile = formatPhoneNumber($row['contact_mobile']);
$client_website = htmlentities($row['client_website']); $client_website = htmlentities($row['client_website']);
$client_currency_code = htmlentities($row['client_currency_code']); $client_currency_code = htmlentities($row['client_currency_code']);
$client_net_terms = htmlentities($row['client_net_terms']); $client_net_terms = intval($row['client_net_terms']);
if ($client_net_terms == 0) { if ($client_net_terms == 0) {
$client_net_terms = $config_default_net_terms; $client_net_terms = $config_default_net_terms;
} }
$company_id = $row['company_id']; $company_id = intval($row['company_id']);
$company_name = htmlentities($row['company_name']); $company_name = htmlentities($row['company_name']);
$company_country = htmlentities($row['company_country']); $company_country = htmlentities($row['company_country']);
$company_address = htmlentities($row['company_address']); $company_address = htmlentities($row['company_address']);
@@ -102,7 +102,6 @@ if (isset($_GET['quote_id'])) {
<a href="client_quotes.php?client_id=<?php echo $client_id; ?>"><?php echo $client_name; ?></a> <a href="client_quotes.php?client_id=<?php echo $client_id; ?>"><?php echo $client_name; ?></a>
</li> </li>
<li class="breadcrumb-item active"><?php echo "$quote_prefix$quote_number"; ?></li> <li class="breadcrumb-item active"><?php echo "$quote_prefix$quote_number"; ?></li>
<span class="ml-3 p-2 badge badge-<?php echo $quote_badge_color; ?>"><?php echo $quote_status; ?></span>
</ol> </ol>
<div class="card"> <div class="card">
@@ -110,48 +109,73 @@ if (isset($_GET['quote_id'])) {
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-8">
<?php if ($quote_status == 'Draft') { ?> <?php if ($quote_status == 'Draft') { ?>
<button class="btn btn-success btn-sm dropdown-toggle" type="button" data-toggle="dropdown"> <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
<i class="fas fa-fw fa-paper-plane"></i> Send <i class="fas fa-paper-plane mr-2"></i>Send
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">
<?php if (!empty($config_smtp_host) && !empty($contact_email)) { ?> <?php if (!empty($config_smtp_host) && !empty($contact_email)) { ?>
<a class="dropdown-item" href="post.php?email_quote=<?php echo $quote_id; ?>">Send Email</a> <a class="dropdown-item" href="post.php?email_quote=<?php echo $quote_id; ?>">
<i class="fas fa-fw fa-paper-plane mr-2"></i>Send Email
</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<?php } ?> <?php } ?>
<a class="dropdown-item" href="post.php?mark_quote_sent=<?php echo $quote_id; ?>">Mark Sent</a> <a class="dropdown-item" href="post.php?mark_quote_sent=<?php echo $quote_id; ?>">
<i class="fas fa-fw fa-check mr-2"></i>Mark Sent
</a>
</div> </div>
<?php } ?> <?php } ?>
<?php if ($quote_status == 'Sent' || $quote_status == 'Viewed') { ?> <?php if ($quote_status == 'Sent' || $quote_status == 'Viewed') { ?>
<a class="btn btn-success" href="post.php?accept_quote=<?php echo $quote_id; ?>"><i class="fas fa-fw fa-check"></i> Accept</a> <a class="btn btn-success" href="post.php?accept_quote=<?php echo $quote_id; ?>">
<a class="btn btn-danger" href="post.php?decline_quote=<?php echo $quote_id; ?>"><i class="fas fa-fw fa-times"></i> Decline</a> <i class="fas fa-thumbs-up mr-2"></i>Accept
</a>
<a class="btn btn-outline-danger" href="post.php?decline_quote=<?php echo $quote_id; ?>">
<i class="fas fa-thumbs-down mr-2"></i>Decline
</a>
<?php } ?> <?php } ?>
<?php if ($quote_status == 'Accepted') { ?> <?php if ($quote_status == 'Accepted') { ?>
<a class="btn btn-success btn-sm" href="#" data-toggle="modal" data-target="#addQuoteToInvoiceModal<?php echo $quote_id; ?>"><i class="fas fa-fw fa-check"></i> Invoice</a> <a class="btn btn-primary" href="#" data-toggle="modal" data-target="#addQuoteToInvoiceModal<?php echo $quote_id; ?>">
<i class="fas fa-check mr-2"></i>Invoice
</a>
<?php } ?> <?php } ?>
</div> </div>
<div class="col-md-8"> <div class="col-4">
<div class="dropdown dropleft text-center"> <div class="dropdown dropleft text-center float-right">
<button class="btn btn-primary btn-sm float-right" type="button" data-toggle="dropdown"> <button class="btn btn-secondary" type="button" data-toggle="dropdown">
<i class="fas fa-ellipsis-h"></i> <i class="fas fa-ellipsis-v"></i>
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editQuoteModal<?php echo $quote_id ?>">Edit</a> <a class="dropdown-item" href="#" data-toggle="modal" data-target="#editQuoteModal<?php echo $quote_id ?>">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#addQuoteCopyModal<?php echo $quote_id; ?>">Copy</a> <i class="fa fa-fw fa-edit text-secondary mr-2"></i>Edit
</a>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#addQuoteCopyModal<?php echo $quote_id; ?>">
<i class="fa fa-fw fa-copy text-secondary mr-2"></i>Copy
</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item" href="#" onclick="window.print();">Print</a> <a class="dropdown-item" href="#" onclick="window.print();">
<a class="dropdown-item" href="#" onclick="pdfMake.createPdf(docDefinition).download('<?php echo "$quote_date-$company_name-$client_name-Quote-$quote_prefix$quote_number.pdf"; ?>');">Download PDF</a> <i class="fa fa-fw fa-print text-secondary mr-2"></i>Print
</a>
<a class="dropdown-item" href="#"
onclick="pdfMake.createPdf(docDefinition).download('<?php echo "$quote_date-$company_name-$client_name-Quote-$quote_prefix$quote_number.pdf"; ?>');">
<i class="fa fa-fw fa-download text-secondary mr-2"></i>Download PDF
</a>
<?php if (!empty($config_smtp_host) && !empty($contact_email)) { ?> <?php if (!empty($config_smtp_host) && !empty($contact_email)) { ?>
<a class="dropdown-item" href="post.php?email_quote=<?php echo $quote_id; ?>">Send Email</a> <a class="dropdown-item" href="post.php?email_quote=<?php echo $quote_id; ?>">
<i class="fa fa-fw fa-paper-plane text-secondary mr-2"></i>Send Email
</a>
<?php } ?> <?php } ?>
<a class="dropdown-item" target="_blank" href="guest_view_quote.php?quote_id=<?php echo "$quote_id&url_key=$quote_url_key"; ?>">Guest URL</a> <a class="dropdown-item" target="_blank" href="guest_view_quote.php?quote_id=<?php echo "$quote_id&url_key=$quote_url_key"; ?>">
<i class="fa fa-fw fa-link text-secondary mr-2"></i>Guest URL
</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="#">Delete</a> <a class="dropdown-item text-danger" href="#">
<i class="fa fa-fw fa-times text-danger text-bold mr-2"></i>Delete
</a>
</div> </div>
</div> </div>
</div> </div>
@@ -161,15 +185,20 @@ if (isset($_GET['quote_id'])) {
<div class="card-body"> <div class="card-body">
<div class="row mb-4"> <div class="row mb-4">
<div class="col-sm-2"> <div class="col-2">
<img class="img-fluid" src="<?php echo "uploads/settings/$company_id/$company_logo"; ?>"> <img class="img-fluid" src="<?php echo "uploads/settings/$company_id/$company_logo"; ?>" alt="Company logo">
</div> </div>
<div class="col-sm-10"> <div class="col-10">
<h3 class="text-right"><strong>Quote</strong><br><small class="text-secondary"><?php echo "$quote_prefix$quote_number"; ?></small></h3> <div class="ribbon-wrapper">
<div class="ribbon bg-<?php echo $quote_badge_color; ?>">
<?php echo $quote_status; ?>
</div>
</div>
<h3 class="text-right mt-5"><strong>Quote</strong><br><small class="text-secondary"><?php echo "$quote_prefix$quote_number"; ?></small></h3>
</div> </div>
</div> </div>
<div class="row mb-4"> <div class="row mb-4">
<div class="col-sm"> <div class="col">
<ul class="list-unstyled"> <ul class="list-unstyled">
<li><h4><strong><?php echo $company_name; ?></strong></h4></li> <li><h4><strong><?php echo $company_name; ?></strong></h4></li>
<li><?php echo $company_address; ?></li> <li><?php echo $company_address; ?></li>
@@ -178,7 +207,7 @@ if (isset($_GET['quote_id'])) {
<li><?php echo $company_email; ?></li> <li><?php echo $company_email; ?></li>
</ul> </ul>
</div> </div>
<div class="col-sm"> <div class="col">
<ul class="list-unstyled text-right"> <ul class="list-unstyled text-right">
<li><h4><strong><?php echo $client_name; ?></strong></h4></li> <li><h4><strong><?php echo $client_name; ?></strong></h4></li>
<li><?php echo $location_address; ?></li> <li><?php echo $location_address; ?></li>
@@ -223,29 +252,37 @@ if (isset($_GET['quote_id'])) {
<tbody> <tbody>
<?php <?php
$total_tax = 0; $total_tax = 0.00;
$sub_total = 0; $sub_total = 0.00;
while ($row = mysqli_fetch_array($sql_items)) { while ($row = mysqli_fetch_array($sql_items)) {
$item_id = $row['item_id']; $item_id = intval($row['item_id']);
$item_name = htmlentities($row['item_name']); $item_name = htmlentities($row['item_name']);
$item_description = htmlentities($row['item_description']); $item_description = htmlentities($row['item_description']);
$item_quantity = floatval($row['item_quantity']); $item_quantity = floatval($row['item_quantity']);
$item_price = floatval($row['item_price']); $item_price = floatval($row['item_price']);
$item_tax = floatval($row['item_tax']); $item_tax = floatval($row['item_tax']);
$item_total = floatval($row['item_total']); $item_total = floatval($row['item_total']);
$item_created_at = $row['item_created_at']; $item_created_at = htmlentities($row['item_created_at']);
$tax_id = $row['item_tax_id']; $tax_id = intval($row['item_tax_id']);
$total_tax = $item_tax + $total_tax; $total_tax = $item_tax + $total_tax;
$sub_total = $item_price * $item_quantity + $sub_total; $sub_total = $item_price * $item_quantity + $sub_total;
?> ?>
<tr> <tr>
<td class="text-center d-print-none"> <td class="d-print-none">
<?php if ($quote_status !== "Invoiced" && $quote_status !== "Accepted" && $quote_status !== "Declined") { ?> <?php if ($quote_status !== "Invoiced" && $quote_status !== "Accepted" && $quote_status !== "Declined") { ?>
<a class="text-secondary" href="#" data-toggle="modal" data-target="#editItemModal<?php echo $item_id; ?>"><i class="fa fa-fw fa-edit"></i></a> <div class="dropdown">
<a class="text-danger" href="post.php?delete_quote_item=<?php echo $item_id; ?>"><i class="fa fa-fw fa-trash-alt"></i></a> <button class="btn btn-sm btn-light" type="button" data-toggle="dropdown">
<i class="fas fa-ellipsis-v"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editItemModal<?php echo $item_id; ?>"><i class="fa fa-fw fa-edit mr-2"></i>Edit</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="post.php?delete_quote_item=<?php echo $item_id; ?>"><i class="fa fa-fw fa-times mr-2"></i>Remove</a>
</div>
</div>
<?php } ?> <?php } ?>
</td> </td>
<td><?php echo $item_name; ?></td> <td><?php echo $item_name; ?></td>
@@ -275,15 +312,15 @@ if (isset($_GET['quote_id'])) {
<td><input type="number" step="0.01" min="0" class="form-control" id="qty" style="text-align: center;" name="qty" placeholder="QTY"></td> <td><input type="number" step="0.01" min="0" class="form-control" id="qty" style="text-align: center;" name="qty" placeholder="QTY"></td>
<td><input type="number" step="0.01" class="form-control" id="price" style="text-align: right;" name="price" placeholder="Price (<?php echo $quote_currency_code; ?>)"></td> <td><input type="number" step="0.01" class="form-control" id="price" style="text-align: right;" name="price" placeholder="Price (<?php echo $quote_currency_code; ?>)"></td>
<td> <td>
<select class="form-control select2" id="tax" name="tax_id" required> <select class="form-control" id="tax" name="tax_id" required>
<option value="0">None</option> <option value="0">No Tax</option>
<?php <?php
$taxes_sql = mysqli_query($mysqli, "SELECT * FROM taxes WHERE company_id = $session_company_id ORDER BY tax_name ASC"); $taxes_sql = mysqli_query($mysqli, "SELECT tax_id, tax_name, tax_percent FROM taxes WHERE company_id = $session_company_id ORDER BY tax_name ASC");
while ($row = mysqli_fetch_array($taxes_sql)) { while ($row = mysqli_fetch_array($taxes_sql)) {
$tax_id = $row['tax_id']; $tax_id = intval($row['tax_id']);
$tax_name = htmlentities($row['tax_name']); $tax_name = htmlentities($row['tax_name']);
$tax_percent = htmlentities($row['tax_percent']); $tax_percent = floatval($row['tax_percent']);
?> ?>
<option value="<?php echo $tax_id; ?>"><?php echo "$tax_name $tax_percent%"; ?></option> <option value="<?php echo $tax_id; ?>"><?php echo "$tax_name $tax_percent%"; ?></option>
@@ -292,9 +329,9 @@ if (isset($_GET['quote_id'])) {
?> ?>
</select> </select>
</td> </td>
<td> <td class="text-center">
<button class="btn btn-link text-success" type="submit" name="add_quote_item"> <button class="btn btn-light text-success" type="submit" name="add_quote_item">
<i class="fa fa-fw fa-check"></i> <i class="fa fa-check"></i>
</button> </button>
</td> </td>
</form> </form>
@@ -309,10 +346,10 @@ if (isset($_GET['quote_id'])) {
<div class="row mb-4"> <div class="row mb-4">
<div class="col-7"> <div class="col-7">
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header text-bold">
Notes Notes
<div class="card-tools d-print-none"> <div class="card-tools d-print-none">
<a href="#" class="btn btn-tool" data-toggle="modal" data-target="#quoteNoteModal"> <a href="#" class="btn btn-light btn-tool" data-toggle="modal" data-target="#quoteNoteModal">
<i class="fas fa-edit"></i> <i class="fas fa-edit"></i>
</a> </a>
</div> </div>
@@ -354,8 +391,8 @@ if (isset($_GET['quote_id'])) {
<div class="row mb-3"> <div class="row mb-3">
<div class="col-sm d-print-none"> <div class="col-sm d-print-none">
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header text-bold">
<i class="fa fa-fw fa-history"></i> History <i class="fa fa-history mr-2"></i>History
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse"> <button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i> <i class="fas fa-minus"></i>
@@ -378,7 +415,7 @@ if (isset($_GET['quote_id'])) {
<?php <?php
while ($row = mysqli_fetch_array($sql_history)) { while ($row = mysqli_fetch_array($sql_history)) {
$history_created_at = $row['history_created_at']; $history_created_at = htmlentities($row['history_created_at']);
$history_status = htmlentities($row['history_status']); $history_status = htmlentities($row['history_status']);
$history_description = htmlentities($row['history_description']); $history_description = htmlentities($row['history_description']);
@@ -565,8 +602,8 @@ require_once("footer.php");
], ],
// Items // Items
<?php <?php
$total_tax = 0; $total_tax = 0.00;
$sub_total = 0; $sub_total = 0.00;
$sql_invoice_items = mysqli_query($mysqli, "SELECT * FROM invoice_items WHERE item_quote_id = $quote_id ORDER BY item_id ASC"); $sql_invoice_items = mysqli_query($mysqli, "SELECT * FROM invoice_items WHERE item_quote_id = $quote_id ORDER BY item_id ASC");

View File

@@ -2,7 +2,7 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content bg-dark"> <div class="modal-content bg-dark">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title"><i class="fa fa-fw fa-file"></i> New Quote</h5> <h5 class="modal-title"><i class="fa fa-file mr-2"></i>New Quote</h5>
<button type="button" class="close text-white" data-dismiss="modal"> <button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -11,6 +11,16 @@
<div class="modal-body bg-white"> <div class="modal-body bg-white">
<div class="form-group">
<label>Scope</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-comment"></i></span>
</div>
<input type="text" class="form-control" name="scope" placeholder="Quick description">
</div>
</div>
<?php if (isset($_GET['client_id'])) { ?> <?php if (isset($_GET['client_id'])) { ?>
<input type="hidden" name="client" value="<?php echo $client_id; ?>"> <input type="hidden" name="client" value="<?php echo $client_id; ?>">
<?php } else { ?> <?php } else { ?>
@@ -39,16 +49,6 @@
<?php } ?> <?php } ?>
<div class="form-group">
<label>Date <strong class="text-danger">*</strong></label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-calendar"></i></span>
</div>
<input type="date" class="form-control" name="date" max="2999-12-31" value="<?php echo date("Y-m-d"); ?>" required>
</div>
</div>
<div class="form-group"> <div class="form-group">
<label>Category <strong class="text-danger">*</strong></label> <label>Category <strong class="text-danger">*</strong></label>
<div class="input-group"> <div class="input-group">
@@ -76,19 +76,19 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label>Scope</label> <label>Date <strong class="text-danger">*</strong></label>
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-comment"></i></span> <span class="input-group-text"><i class="fa fa-fw fa-calendar"></i></span>
</div> </div>
<input type="text" class="form-control" name="scope" placeholder="Quick description"> <input type="date" class="form-control" name="date" max="2999-12-31" value="<?php echo date("Y-m-d"); ?>" required>
</div> </div>
</div> </div>
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="add_quote" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Create</button>
<button type="submit" name="add_quote" class="btn btn-primary text-bold"><i class="fa fa-check"></i> Create</button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -2,7 +2,7 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content bg-dark"> <div class="modal-content bg-dark">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title"><i class="fa fa-fw fa-copy"></i> Copying quote: <strong><?php echo "$quote_prefix$quote_number"; ?></strong> - <?php echo $client_name; ?></h5> <h5 class="modal-title"><i class="fa fa-copy mr-2"></i> Copying quote: <strong><?php echo "$quote_prefix$quote_number"; ?></strong> - <?php echo $client_name; ?></h5>
<button type="button" class="close text-white" data-dismiss="modal"> <button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -12,7 +12,7 @@
<div class="modal-body bg-white"> <div class="modal-body bg-white">
<div class="form-group"> <div class="form-group">
<label>Quote Date <strong class="text-danger">*</strong></label> <label>Set Date for New Quote <strong class="text-danger">*</strong></label>
<div class="input-group"> <div class="input-group">
<div class="input-group-prepend"> <div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-calendar"></i></span> <span class="input-group-text"><i class="fa fa-fw fa-calendar"></i></span>
@@ -23,8 +23,8 @@
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="add_quote_copy" class="btn btn-primary text-bold"><i class="fa fa-check mr-2"></i>Copy</button>
<button type="submit" name="add_quote_copy" class="btn btn-primary text-bold"><i class="fa fa-check"></i> Copy</button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -2,7 +2,7 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content bg-dark"> <div class="modal-content bg-dark">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title text-white"><i class="fas fa-fw fa-file"></i> Editing quote: <strong><?php echo "$quote_prefix$quote_number"; ?></strong> - <?php echo $client_name; ?></h5> <h5 class="modal-title text-white"><i class="fas fa-file mr-2"></i> Editing quote: <strong><?php echo "$quote_prefix$quote_number"; ?></strong> - <?php echo $client_name; ?></h5>
<button type="button" class="close text-white" data-dismiss="modal"> <button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -61,8 +61,8 @@
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="edit_quote" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
<button type="submit" name="edit_quote" class="btn btn-primary"><strong><i class="fas fa-check"></i> Save</strong></button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -15,8 +15,8 @@
</div> </div>
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="quote_note" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
<button type="submit" name="quote_note" class="btn btn-primary"><strong><i class="fas fa-check"></i> Save</strong></button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -2,7 +2,7 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content bg-dark"> <div class="modal-content bg-dark">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title"><i class="fas fa-file"></i>Quote <?php echo "$quote_prefix$quote_number"; ?> <i class="fas fa-arrow-right"></i> Invoice</h5> <h5 class="modal-title"><i class="fas fa-file mr-2"></i>Quote <?php echo "$quote_prefix$quote_number"; ?> <i class="fas fa-arrow-right mr-2"></i>Invoice</h5>
<button type="button" class="close text-white" data-dismiss="modal"> <button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -25,8 +25,8 @@
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="add_quote_to_invoice" class="btn btn-primary text-bold"><strong><i class="fas fa-check mr-2"></i>Create Invoice</button>
<button type="submit" name="add_quote_to_invoice" class="btn btn-primary"><strong><i class="fas fa-check"></i> Create Invoice</strong></button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -2,7 +2,7 @@
require_once("inc_all.php"); require_once("inc_all.php");
if (!empty($_GET['sb'])) { if (!empty($_GET['sb'])) {
$sb = strip_tags(mysqli_real_escape_string($mysqli, $_GET['sb'])); $sb = sanitizeInput($_GET['sb']);
} else { } else {
$sb = "quote_number"; $sb = "quote_number";
} }
@@ -21,8 +21,8 @@ if (empty($_GET['canned_date'])) {
//Date Filter //Date Filter
if ($_GET['canned_date'] == "custom" && !empty($_GET['dtf'])) { if ($_GET['canned_date'] == "custom" && !empty($_GET['dtf'])) {
$dtf = strip_tags(mysqli_real_escape_string($mysqli, $_GET['dtf'])); $dtf = sanitizeInput($_GET['dtf']);
$dtt = strip_tags(mysqli_real_escape_string($mysqli, $_GET['dtt'])); $dtt = sanitizeInput($_GET['dtt']);
} elseif ($_GET['canned_date'] == "today") { } elseif ($_GET['canned_date'] == "today") {
$dtf = date('Y-m-d'); $dtf = date('Y-m-d');
$dtt = date('Y-m-d'); $dtt = date('Y-m-d');
@@ -71,9 +71,9 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<div class="card card-dark"> <div class="card card-dark">
<div class="card-header py-2"> <div class="card-header py-2">
<h3 class="card-title mt-2"><i class="fa fa-fw fa-file"></i> Quotes</h3> <h3 class="card-title mt-2"><i class="fa fa-file mr-2"></i>Quotes</h3>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addQuoteModal"><i class="fas fa-fw fa-plus"></i> New Quote</button> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addQuoteModal"><i class="fas fa-plus mr-2"></i>New Quote</button>
</div> </div>
</div> </div>
@@ -82,7 +82,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<div class="row"> <div class="row">
<div class="col-sm-4"> <div class="col-sm-4">
<div class="input-group"> <div class="input-group">
<input type="search" class="form-control" name="q" value="<?php if (isset($q)) {echo strip_tags(htmlentities($q));} ?>" placeholder="Search Quotes"> <input type="search" class="form-control" name="q" value="<?php if (isset($q)) { echo stripslashes(htmlentities($q)); } ?>" placeholder="Search Quotes">
<div class="input-group-append"> <div class="input-group-append">
<button class="btn btn-secondary" type="button" data-toggle="collapse" data-target="#advancedFilter"><i class="fas fa-filter"></i></button> <button class="btn btn-secondary" type="button" data-toggle="collapse" data-target="#advancedFilter"><i class="fas fa-filter"></i></button>
<button class="btn btn-primary"><i class="fa fa-search"></i></button> <button class="btn btn-primary"><i class="fa fa-search"></i></button>
@@ -142,7 +142,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<?php <?php
while ($row = mysqli_fetch_array($sql)) { while ($row = mysqli_fetch_array($sql)) {
$quote_id = $row['quote_id']; $quote_id = intval($row['quote_id']);
$quote_prefix = htmlentities($row['quote_prefix']); $quote_prefix = htmlentities($row['quote_prefix']);
$quote_number = htmlentities($row['quote_number']); $quote_number = htmlentities($row['quote_number']);
$quote_scope = htmlentities($row['quote_scope']); $quote_scope = htmlentities($row['quote_scope']);
@@ -152,16 +152,16 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
$quote_scope_display = $quote_scope; $quote_scope_display = $quote_scope;
} }
$quote_status = htmlentities($row['quote_status']); $quote_status = htmlentities($row['quote_status']);
$quote_date = $row['quote_date']; $quote_date = htmlentities($row['quote_date']);
$quote_amount = floatval($row['quote_amount']); $quote_amount = floatval($row['quote_amount']);
$quote_currency_code = htmlentities($row['quote_currency_code']); $quote_currency_code = htmlentities($row['quote_currency_code']);
$quote_created_at = $row['quote_created_at']; $quote_created_at = htmlentities($row['quote_created_at']);
$client_id = $row['client_id']; $client_id = intval($row['client_id']);
$client_name = htmlentities($row['client_name']); $client_name = htmlentities($row['client_name']);
$client_currency_code = htmlentities($row['client_currency_code']); $client_currency_code = htmlentities($row['client_currency_code']);
$category_id = $row['category_id']; $category_id = intval($row['category_id']);
$category_name = htmlentities($row['category_name']); $category_name = htmlentities($row['category_name']);
$client_net_terms = htmlentities($row['client_net_terms']); $client_net_terms = intval($row['client_net_terms']);
if ($client_net_terms == 0) { if ($client_net_terms == 0) {
$client_net_terms = $config_default_net_terms; $client_net_terms = $config_default_net_terms;
} }
@@ -183,16 +183,16 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?> ?>
<tr> <tr>
<td><a href="quote.php?quote_id=<?php echo $quote_id; ?>"><?php echo "$quote_prefix$quote_number"; ?></a></td> <td class="text-bold"><a href="quote.php?quote_id=<?php echo $quote_id; ?>"><?php echo "$quote_prefix$quote_number"; ?></a></td>
<td><?php echo $quote_scope_display; ?></td> <td><?php echo $quote_scope_display; ?></td>
<td><a href="client_quotes.php?client_id=<?php echo $client_id; ?>"><?php echo $client_name; ?></a></td> <td class="text-bold"><a href="client_quotes.php?client_id=<?php echo $client_id; ?>"><?php echo $client_name; ?></a></td>
<td class="text-right"><?php echo numfmt_format_currency($currency_format, $quote_amount, $quote_currency_code); ?></td> <td class="text-right text-bold"><?php echo numfmt_format_currency($currency_format, $quote_amount, $quote_currency_code); ?></td>
<td><?php echo $quote_date; ?></td> <td><?php echo $quote_date; ?></td>
<td><?php echo $category_name; ?></td> <td><?php echo $category_name; ?></td>
<td> <td>
<span class="p-2 badge badge-<?php echo $quote_badge_color; ?>"> <span class="p-2 badge badge-<?php echo $quote_badge_color; ?>">
<?php echo $quote_status; ?> <?php echo $quote_status; ?>
</span> </span>
</td> </td>
<td> <td>
<div class="dropdown dropleft text-center"> <div class="dropdown dropleft text-center">
@@ -200,14 +200,22 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<i class="fas fa-ellipsis-h"></i> <i class="fas fa-ellipsis-h"></i>
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editQuoteModal<?php echo $quote_id; ?>">Edit</a> <a class="dropdown-item" href="#" data-toggle="modal" data-target="#editQuoteModal<?php echo $quote_id; ?>">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#addQuoteCopyModal<?php echo $quote_id; ?>">Copy</a> <i class="fas fa-fw fa-edit mr-2"></i>Edit
</a>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#addQuoteCopyModal<?php echo $quote_id; ?>">
<i class="fas fa-fw fa-copy mr-2"></i>Copy
</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<?php if (!empty($config_smtp_host)) { ?> <?php if (!empty($config_smtp_host)) { ?>
<a class="dropdown-item" href="post.php?email_quote=<?php echo $quote_id; ?>">Send</a> <a class="dropdown-item" href="post.php?email_quote=<?php echo $quote_id; ?>">
<i class="fas fa-fw fa-paper-plane mr-2"></i>Email
</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<?php } ?> <?php } ?>
<a class="dropdown-item text-danger" href="post.php?delete_quote=<?php echo $quote_id; ?>">Delete</a> <a class="dropdown-item text-danger" href="post.php?delete_quote=<?php echo $quote_id; ?>">
<i class="fas fa-fw fa-trash mr-2"></i>Delete
</a>
</div> </div>
</div> </div>
</td> </td>

View File

@@ -16,23 +16,23 @@ if (isset($_GET['recurring_id'])) {
); );
$row = mysqli_fetch_array($sql); $row = mysqli_fetch_array($sql);
$recurring_id = $row['recurring_id']; $recurring_id = intval($row['recurring_id']);
$recurring_prefix = htmlentities($row['recurring_prefix']); $recurring_prefix = htmlentities($row['recurring_prefix']);
$recurring_number = htmlentities($row['recurring_number']); $recurring_number = intval($row['recurring_number']);
$recurring_scope = htmlentities($row['recurring_scope']); $recurring_scope = htmlentities($row['recurring_scope']);
$recurring_frequency = htmlentities($row['recurring_frequency']); $recurring_frequency = htmlentities($row['recurring_frequency']);
$recurring_status = htmlentities($row['recurring_status']); $recurring_status = htmlentities($row['recurring_status']);
$recurring_created_at = date('Y-m-d', strtotime($row['recurring_created_at'])); $recurring_created_at = date('Y-m-d', strtotime($row['recurring_created_at']));
$recurring_last_sent = $row['recurring_last_sent']; $recurring_last_sent = htmlentities($row['recurring_last_sent']);
if ($recurring_last_sent == 0) { if ($recurring_last_sent == 0) {
$recurring_last_sent = '-'; $recurring_last_sent = '-';
} }
$recurring_next_date = $row['recurring_next_date']; $recurring_next_date = htmlentities($row['recurring_next_date']);
$recurring_amount = floatval($row['recurring_amount']); $recurring_amount = floatval($row['recurring_amount']);
$recurring_currency_code = htmlentities($row['recurring_currency_code']); $recurring_currency_code = htmlentities($row['recurring_currency_code']);
$recurring_note = htmlentities($row['recurring_note']); $recurring_note = htmlentities($row['recurring_note']);
$category_id = $row['recurring_category_id']; $category_id = intval($row['recurring_category_id']);
$client_id = $row['client_id']; $client_id = intval($row['client_id']);
$client_name = htmlentities($row['client_name']); $client_name = htmlentities($row['client_name']);
$location_address = htmlentities($row['location_address']); $location_address = htmlentities($row['location_address']);
$location_city = htmlentities($row['location_city']); $location_city = htmlentities($row['location_city']);
@@ -44,7 +44,7 @@ if (isset($_GET['recurring_id'])) {
$contact_mobile = formatPhoneNumber($row['contact_mobile']); $contact_mobile = formatPhoneNumber($row['contact_mobile']);
$client_website = htmlentities($row['client_website']); $client_website = htmlentities($row['client_website']);
$client_currency_code = htmlentities($row['client_currency_code']); $client_currency_code = htmlentities($row['client_currency_code']);
$client_net_terms = htmlentities($row['client_net_terms']); $client_net_terms = intval($row['client_net_terms']);
if ($recurring_status == 1) { if ($recurring_status == 1) {
$status = "Active"; $status = "Active";
@@ -53,7 +53,7 @@ if (isset($_GET['recurring_id'])) {
$status = "Inactive"; $status = "Inactive";
$status_badge_color = "secondary"; $status_badge_color = "secondary";
} }
$company_id = $row['company_id']; $company_id = intval($row['company_id']);
$company_name = htmlentities($row['company_name']); $company_name = htmlentities($row['company_name']);
$company_country = htmlentities($row['company_country']); $company_country = htmlentities($row['company_country']);
$company_address = htmlentities($row['company_address']); $company_address = htmlentities($row['company_address']);
@@ -87,26 +87,31 @@ if (isset($_GET['recurring_id'])) {
<a href="client_recurring_invoices.php?client_id=<?php echo $client_id; ?>"> <?php echo $client_name; ?></a> <a href="client_recurring_invoices.php?client_id=<?php echo $client_id; ?>"> <?php echo $client_name; ?></a>
</li> </li>
<li class="breadcrumb-item active"><?php echo "$recurring_prefix$recurring_number"; ?></li> <li class="breadcrumb-item active"><?php echo "$recurring_prefix$recurring_number"; ?></li>
<span class="ml-3 p-2 badge badge-<?php echo $status_badge_color; ?>"><?php echo $status; ?></span>
</ol> </ol>
<div class="card"> <div class="card">
<div class="card-header d-print-none"> <div class="card-header d-print-none">
<div class="row"> <div class="row">
<div class="col-md-4"> <div class="col-8">
</div> </div>
<div class="col-md-8"> <div class="col-4">
<div class="dropdown dropleft text-center"> <div class="dropdown dropleft text-center float-right">
<button class="btn btn-primary btn-sm float-right" type="button" data-toggle="dropdown"> <button class="btn btn-secondary" type="button" data-toggle="dropdown">
<i class="fas fa-ellipsis-h"></i> <i class="fas fa-ellipsis-v"></i>
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editRecurringModal<?php echo $recurring_id; ?>">Edit</a> <a class="dropdown-item" href="#" data-toggle="modal" data-target="#editRecurringModal<?php echo $recurring_id; ?>">
<i class="fa fa-fw fa-edit text-secondary mr-2"></i>Edit
</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item" href="post.php?force_recurring=<?php echo $recurring_id; ?>">Force Send</a> <a class="dropdown-item" href="post.php?force_recurring=<?php echo $recurring_id; ?>">
<i class="fa fa-fw fa-paper-plane text-secondary mr-2"></i>Force Send
</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="post.php?delete_recurring=<?php echo $recurring_id; ?>">Delete</a> <a class="dropdown-item text-danger" href="post.php?delete_recurring=<?php echo $recurring_id; ?>">
<i class="fa fa-fw fa-trash mr-2"></i>Delete
</a>
</div> </div>
</div> </div>
</div> </div>
@@ -116,15 +121,20 @@ if (isset($_GET['recurring_id'])) {
<div class="card-body"> <div class="card-body">
<div class="row mb-4"> <div class="row mb-4">
<div class="col-sm-2"> <div class="col-2">
<img class="img-fluid" alt="Company logo" src="<?php echo "uploads/settings/$company_id/$company_logo"; ?>"> <img class="img-fluid" alt="Company logo" src="<?php echo "uploads/settings/$company_id/$company_logo"; ?>">
</div> </div>
<div class="col-sm-10"> <div class="col-10">
<h3 class="text-right"><strong>Recurring Invoice</strong><br><small class="text-secondary"><?php echo ucwords($recurring_frequency); ?>ly</small></h3> <div class="ribbon-wrapper">
<div class="ribbon bg-<?php echo $status_badge_color; ?>">
<?php echo $status; ?>
</div>
</div>
<h3 class="text-right mt-5"><strong>Recurring Invoice</strong><br><small class="text-secondary"><?php echo ucwords($recurring_frequency); ?>ly</small></h3>
</div> </div>
</div> </div>
<div class="row mb-4"> <div class="row mb-4">
<div class="col-sm"> <div class="col">
<ul class="list-unstyled"> <ul class="list-unstyled">
<li><h4><strong><?php echo $company_name; ?></strong></h4></li> <li><h4><strong><?php echo $company_name; ?></strong></h4></li>
<li><?php echo $company_address; ?></li> <li><?php echo $company_address; ?></li>
@@ -133,7 +143,7 @@ if (isset($_GET['recurring_id'])) {
<li><?php echo $company_email; ?></li> <li><?php echo $company_email; ?></li>
</ul> </ul>
</div> </div>
<div class="col-sm"> <div class="col">
<ul class="list-unstyled text-right"> <ul class="list-unstyled text-right">
<li><h4><strong><?php echo $client_name; ?></strong></h4></li> <li><h4><strong><?php echo $client_name; ?></strong></h4></li>
<li><?php echo $location_address; ?></li> <li><?php echo $location_address; ?></li>
@@ -149,18 +159,20 @@ if (isset($_GET['recurring_id'])) {
</div> </div>
<div class="col-sm-4"> <div class="col-sm-4">
<table class="table"> <table class="table">
<tr>
<td>Created</td>
<td class="text-right"><?php echo $recurring_created_at; ?></td>
</tr>
<tr> <tr>
<td>Next Date</td> <td>Next Date</td>
<td class="text-right"><?php echo $recurring_next_date; ?></td> <td class="text-right text-bold"><?php echo $recurring_next_date; ?></td>
</tr> </tr>
<tr> <tr>
<td>Last Sent</td> <td>Last Sent</td>
<td class="text-right"><?php echo $recurring_last_sent; ?></td> <td class="text-right"><?php echo $recurring_last_sent; ?></td>
</tr> </tr>
<tr>
<td>Created</td>
<td class="text-right text-secondary"><?php echo $recurring_created_at; ?></td>
</tr>
</table> </table>
</div> </div>
</div> </div>
@@ -173,41 +185,49 @@ if (isset($_GET['recurring_id'])) {
<div class="table-responsive"> <div class="table-responsive">
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
<th class="d-print-none"></th> <th class="d-print-none"></th>
<th>Item</th> <th>Item</th>
<th>Description</th> <th>Description</th>
<th class="text-center">Qty</th> <th class="text-center">Qty</th>
<th class="text-right">Price</th> <th class="text-right">Price</th>
<th class="text-right">Tax</th> <th class="text-right">Tax</th>
<th class="text-right">Total</th> <th class="text-right">Total</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<?php <?php
$total_tax = 0; $total_tax = 0.00;
$sub_total = 0; $sub_total = 0.00;
while ($row = mysqli_fetch_array($sql_items)) { while ($row = mysqli_fetch_array($sql_items)) {
$item_id = $row['item_id']; $item_id = intval($row['item_id']);
$item_name = htmlentities($row['item_name']); $item_name = htmlentities($row['item_name']);
$item_description = htmlentities($row['item_description']); $item_description = htmlentities($row['item_description']);
$item_quantity = floatval($row['item_quantity']); $item_quantity = floatval($row['item_quantity']);
$item_price = floatval($row['item_price']); $item_price = floatval($row['item_price']);
$item_tax = floatval($row['item_tax']); $item_tax = floatval($row['item_tax']);
$item_total = floatval($row['item_total']); $item_total = floatval($row['item_total']);
$item_created_at = $row['item_created_at']; $item_created_at = htmlentities($row['item_created_at']);
$tax_id = $row['item_tax_id']; $tax_id = intval($row['item_tax_id']);
$total_tax = $item_tax + $total_tax; $total_tax = $item_tax + $total_tax;
$sub_total = $item_price * $item_quantity + $sub_total; $sub_total = $item_price * $item_quantity + $sub_total;
?> ?>
<tr> <tr>
<td class="text-center d-print-none"> <td class="d-print-none">
<a class="text-secondary" href="#" data-toggle="modal" data-target="#editItemModal<?php echo $item_id; ?>"><i class="fa fa-fw fa-edit"></i></a> <div class="dropdown">
<a class="text-danger" href="post.php?delete_recurring_item=<?php echo $item_id; ?>"><i class="fa fa-fw fa-trash-alt"></i></a> <button class="btn btn-sm btn-light" type="button" data-toggle="dropdown">
<i class="fas fa-ellipsis-v"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editItemModal<?php echo $item_id; ?>"><i class="fa fa-fw fa-edit mr-2"></i>Edit</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="post.php?delete_recurring_item=<?php echo $item_id; ?>"><i class="fa fa-fw fa-times mr-2"></i>Remove</a>
</div>
</div>
</td> </td>
<td><?php echo $item_name; ?></td> <td><?php echo $item_name; ?></td>
<td><div style="white-space:pre-line"><?php echo $item_description; ?></div></td> <td><div style="white-space:pre-line"><?php echo $item_description; ?></div></td>
@@ -221,43 +241,43 @@ if (isset($_GET['recurring_id'])) {
require("item_edit_modal.php"); require("item_edit_modal.php");
} }
?> ?>
<tr class="d-print-none">
<form action="post.php" method="post">
<input type="hidden" name="recurring_id" value="<?php echo $recurring_id; ?>">
<td></td>
<td><input type="text" class="form-control" id="name" name="name" placeholder="Item" required></td>
<td><textarea class="form-control" rows="1" id="desc" name="description" placeholder="Description"></textarea></td>
<td><input type="number" step="0.01" min="0" class="form-control" style="text-align: center;" id="qty" name="qty" placeholder="QTY"></td>
<td><input type="number" step="0.01" class="form-control" style="text-align: right;" id="price" name="price" placeholder="Price"></td>
<td>
<select class="form-control select2" name="tax_id" required>
<option value="0">None</option>
<?php
$taxes_sql = mysqli_query($mysqli, "SELECT * FROM taxes WHERE company_id = $session_company_id ORDER BY tax_name ASC");
while ($row = mysqli_fetch_array($taxes_sql)) {
$tax_id = $row['tax_id'];
$tax_name = htmlentities($row['tax_name']);
$tax_percent = htmlentities($row['tax_percent']);
?>
<option value="<?php echo $tax_id; ?>"><?php echo "$tax_name $tax_percent%"; ?></option>
<tr class="d-print-none">
<form action="post.php" method="post">
<input type="hidden" name="recurring_id" value="<?php echo $recurring_id; ?>">
<td></td>
<td><input type="text" class="form-control" id="name" name="name" placeholder="Item" required></td>
<td><textarea class="form-control" rows="1" id="desc" name="description" placeholder="Description"></textarea></td>
<td><input type="number" step="0.01" min="0" class="form-control" style="text-align: center;" id="qty" name="qty" placeholder="QTY"></td>
<td><input type="number" step="0.01" class="form-control" style="text-align: right;" id="price" name="price" placeholder="Price"></td>
<td>
<select class="form-control" name="tax_id" required>
<option value="0">No Tax</option>
<?php <?php
}
?> $taxes_sql = mysqli_query($mysqli, "SELECT tax_id, tax_name, tax_percent FROM taxes WHERE company_id = $session_company_id ORDER BY tax_name ASC");
</select> while ($row = mysqli_fetch_array($taxes_sql)) {
</td> $tax_id = intval($row['tax_id']);
<td> $tax_name = htmlentities($row['tax_name']);
<button class="btn btn-link text-success" type="submit" name="add_recurring_item"> $tax_percent = floatval($row['tax_percent']);
<i class="fa fa-fw fa-check"></i> ?>
</button> <option value="<?php echo $tax_id; ?>"><?php echo "$tax_name $tax_percent%"; ?></option>
</td>
</form> <?php
</tr> }
?>
</select>
</td>
<td class="text-center">
<button class="btn btn-light text-success" type="submit" name="add_recurring_item">
<i class="fa fa-fw fa-check"></i>
</button>
</td>
</form>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@@ -268,10 +288,10 @@ if (isset($_GET['recurring_id'])) {
<div class="row mb-4"> <div class="row mb-4">
<div class="col-sm-7"> <div class="col-sm-7">
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header text-bold">
Notes Notes
<div class="card-tools d-print-none"> <div class="card-tools d-print-none">
<a href="#" class="btn btn-tool" data-toggle="modal" data-target="#recurringNoteModal"> <a href="#" class="btn btn-light btn-tool" data-toggle="modal" data-target="#recurringNoteModal">
<i class="fas fa-edit"></i> <i class="fas fa-edit"></i>
</a> </a>
</div> </div>
@@ -308,8 +328,8 @@ if (isset($_GET['recurring_id'])) {
<div class="row mb-3"> <div class="row mb-3">
<div class="col-sm d-print-none"> <div class="col-sm d-print-none">
<div class="card"> <div class="card">
<div class="card-header"> <div class="card-header text-bold">
<i class="fa fa-fw fa-history"></i> History <i class="fas fa-history mr-2"></i>History
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-tool" data-card-widget="collapse"> <button type="button" class="btn btn-tool" data-card-widget="collapse">
<i class="fas fa-minus"></i> <i class="fas fa-minus"></i>

View File

@@ -2,7 +2,7 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content bg-dark"> <div class="modal-content bg-dark">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title"><i class="fa fa-sync-alt"></i> New Recurring Invoice</h5> <h5 class="modal-title"><i class="fa fa-sync-alt mr-2"></i>New Recurring Invoice</h5>
<button type="button" class="close text-white" data-dismiss="modal"> <button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -10,6 +10,17 @@
<form action="post.php" method="post" autocomplete="off"> <form action="post.php" method="post" autocomplete="off">
<div class="modal-body bg-white"> <div class="modal-body bg-white">
<div class="form-group">
<label>Scope</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-comment"></i></span>
</div>
<input type="text" class="form-control" name="scope" placeholder="Quick description">
</div>
</div>
<?php if (isset($_GET['client_id'])) { ?> <?php if (isset($_GET['client_id'])) { ?>
<input type="hidden" name="client" value="<?php echo $client_id; ?>"> <input type="hidden" name="client" value="<?php echo $client_id; ?>">
<?php }else{ ?> <?php }else{ ?>
@@ -26,7 +37,7 @@
$sql = mysqli_query($mysqli, "SELECT * FROM clients WHERE company_id = $session_company_id ORDER BY client_name ASC"); $sql = mysqli_query($mysqli, "SELECT * FROM clients WHERE company_id = $session_company_id ORDER BY client_name ASC");
while ($row = mysqli_fetch_array($sql)) { while ($row = mysqli_fetch_array($sql)) {
$client_id = $row['client_id']; $client_id = intval($row['client_id']);
$client_name = htmlentities($row['client_name']); $client_name = htmlentities($row['client_name']);
?> ?>
<option value="<?php echo $client_id; ?>"><?php echo "$client_name"; ?></option> <option value="<?php echo $client_id; ?>"><?php echo "$client_name"; ?></option>
@@ -77,7 +88,7 @@
$sql = mysqli_query($mysqli, "SELECT * FROM categories WHERE category_type = 'Income' AND category_archived_at IS NULL AND company_id = $session_company_id ORDER BY category_name ASC"); $sql = mysqli_query($mysqli, "SELECT * FROM categories WHERE category_type = 'Income' AND category_archived_at IS NULL AND company_id = $session_company_id ORDER BY category_name ASC");
while ($row = mysqli_fetch_array($sql)) { while ($row = mysqli_fetch_array($sql)) {
$category_id = $row['category_id']; $category_id = intval($row['category_id']);
$category_name = htmlentities($row['category_name']); $category_name = htmlentities($row['category_name']);
?> ?>
<option value="<?php echo $category_id; ?>"><?php echo $category_name; ?></option> <option value="<?php echo $category_id; ?>"><?php echo $category_name; ?></option>
@@ -92,20 +103,10 @@
</div> </div>
</div> </div>
<div class="form-group">
<label>Scope</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-comment"></i></span>
</div>
<input type="text" class="form-control" name="scope" placeholder="Quick description">
</div>
</div>
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="add_recurring" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Create</button>
<button type="submit" name="add_recurring" class="btn btn-primary"><strong><i class="fas fa-check"></i> Create</strong></button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -2,7 +2,7 @@
<div class="modal-dialog"> <div class="modal-dialog">
<div class="modal-content bg-dark"> <div class="modal-content bg-dark">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title"><i class="fas fa-sync-alt mr-2"></i><?php echo "$recurring_prefix$recurring_number"; ?></h5> <h5 class="modal-title"><i class="fas fa-sync-alt mr-2"></i>Editing Recur Invoice: <strong><?php echo "$recurring_prefix$recurring_number"; ?></strong></h5>
<button type="button" class="close text-white" data-dismiss="modal"> <button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -12,6 +12,16 @@
<div class="modal-body bg-white"> <div class="modal-body bg-white">
<div class="form-group">
<label>Scope</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-comment"></i></span>
</div>
<input type="text" class="form-control" name="scope" placeholder="Quick description" value="<?php echo $recurring_scope; ?>">
</div>
</div>
<div class="form-group"> <div class="form-group">
<label>Frequency <strong class="text-danger">*</strong></label> <label>Frequency <strong class="text-danger">*</strong></label>
<div class="input-group"> <div class="input-group">
@@ -49,7 +59,7 @@
$sql_income_category = mysqli_query($mysqli, "SELECT * FROM categories WHERE category_type = 'Income' AND (category_archived_at > '$recurring_created_at' OR category_archived_at IS NULL) AND company_id = $session_company_id ORDER BY category_name ASC"); $sql_income_category = mysqli_query($mysqli, "SELECT * FROM categories WHERE category_type = 'Income' AND (category_archived_at > '$recurring_created_at' OR category_archived_at IS NULL) AND company_id = $session_company_id ORDER BY category_name ASC");
while ($row = mysqli_fetch_array($sql_income_category)) { while ($row = mysqli_fetch_array($sql_income_category)) {
$category_id_select= $row['category_id']; $category_id_select= intval($row['category_id']);
$category_name_select = htmlentities($row['category_name']); $category_name_select = htmlentities($row['category_name']);
?> ?>
<option <?php if ($category_id == $category_id_select) { ?> selected <?php } ?> value="<?php echo $category_id_select; ?>"><?php echo $category_name_select; ?></option> <option <?php if ($category_id == $category_id_select) { ?> selected <?php } ?> value="<?php echo $category_id_select; ?>"><?php echo $category_name_select; ?></option>
@@ -64,16 +74,6 @@
</div> </div>
</div> </div>
<div class="form-group">
<label>Scope</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-comment"></i></span>
</div>
<input type="text" class="form-control" name="scope" placeholder="Quick description" value="<?php echo $recurring_scope; ?>">
</div>
</div>
<div class="form-group"> <div class="form-group">
<label>Status <strong class="text-danger">*</strong></label> <label>Status <strong class="text-danger">*</strong></label>
<div class="input-group"> <div class="input-group">
@@ -89,8 +89,8 @@
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="edit_recurring" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i> Save</button>
<button type="submit" name="edit_recurring" class="btn btn-primary"><strong><i class="fas fa-check"></i> Save</strong></button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -2,7 +2,7 @@
<div class="modal-dialog modal-lg"> <div class="modal-dialog modal-lg">
<div class="modal-content bg-dark"> <div class="modal-content bg-dark">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title text-white"><i class="fa fa-edit mr-2"></i>Quote Notes</h5> <h5 class="modal-title text-white"><i class="fa fa-edit mr-2"></i>Editing: <strong>Recurring Invoice</strong> Notes</h5>
<button type="button" class="close text-white" data-dismiss="modal"> <button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -15,8 +15,8 @@
</div> </div>
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="recurring_note" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
<button type="submit" name="recurring_note" class="btn btn-primary"><strong><i class="fas fa-check"></i> Save</strong></button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -2,7 +2,7 @@
require_once("inc_all.php"); require_once("inc_all.php");
if (!empty($_GET['sb'])) { if (!empty($_GET['sb'])) {
$sb = strip_tags(mysqli_real_escape_string($mysqli, $_GET['sb'])); $sb = sanitizeInput($_GET['sb']);
} else { } else {
$sb = "recurring_next_date"; $sb = "recurring_next_date";
} }
@@ -15,8 +15,8 @@ if (empty($_GET['canned_date'])) {
//Date Filter //Date Filter
if ($_GET['canned_date'] == "custom" && !empty($_GET['dtf'])) { if ($_GET['canned_date'] == "custom" && !empty($_GET['dtf'])) {
$dtf = strip_tags(mysqli_real_escape_string($mysqli, $_GET['dtf'])); $dtf = sanitizeInput($_GET['dtf']);
$dtt = strip_tags(mysqli_real_escape_string($mysqli, $_GET['dtt'])); $dtt = sanitizeInput($_GET['dtt']);
} elseif ($_GET['canned_date'] == "today") { } elseif ($_GET['canned_date'] == "today") {
$dtf = date('Y-m-d'); $dtf = date('Y-m-d');
$dtt = date('Y-m-d'); $dtt = date('Y-m-d');
@@ -71,9 +71,9 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<div class="card card-dark"> <div class="card card-dark">
<div class="card-header py-2"> <div class="card-header py-2">
<h3 class="card-title mt-2"><i class="fa fa-fw fa-sync-alt"></i> Recurring Invoices</h3> <h3 class="card-title mt-2"><i class="fa fa-sync-alt mr-2"></i>Recurring Invoices</h3>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addRecurringModal"><i class="fas fa-fw fa-plus"></i> New Recurring</button> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addRecurringModal"><i class="fas fa-plus mr-2"></i>New Recurring</button>
</div> </div>
</div> </div>
@@ -145,9 +145,9 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<?php <?php
while ($row = mysqli_fetch_array($sql)) { while ($row = mysqli_fetch_array($sql)) {
$recurring_id = $row['recurring_id']; $recurring_id = intval($row['recurring_id']);
$recurring_prefix = htmlentities($row['recurring_prefix']); $recurring_prefix = htmlentities($row['recurring_prefix']);
$recurring_number = htmlentities($row['recurring_number']); $recurring_number = intval($row['recurring_number']);
$recurring_scope = htmlentities($row['recurring_scope']); $recurring_scope = htmlentities($row['recurring_scope']);
$recurring_frequency = htmlentities($row['recurring_frequency']); $recurring_frequency = htmlentities($row['recurring_frequency']);
$recurring_status = htmlentities($row['recurring_status']); $recurring_status = htmlentities($row['recurring_status']);
@@ -155,14 +155,14 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
if ($recurring_last_sent == 0) { if ($recurring_last_sent == 0) {
$recurring_last_sent = "-"; $recurring_last_sent = "-";
} }
$recurring_next_date = $row['recurring_next_date']; $recurring_next_date = htmlentities($row['recurring_next_date']);
$recurring_amount = floatval($row['recurring_amount']); $recurring_amount = floatval($row['recurring_amount']);
$recurring_currency_code = htmlentities($row['recurring_currency_code']); $recurring_currency_code = htmlentities($row['recurring_currency_code']);
$recurring_created_at = $row['recurring_created_at']; $recurring_created_at = htmlentities($row['recurring_created_at']);
$client_id = $row['client_id']; $client_id = intval($row['client_id']);
$client_name = htmlentities($row['client_name']); $client_name = htmlentities($row['client_name']);
$client_currency_code = htmlentities($row['client_currency_code']); $client_currency_code = htmlentities($row['client_currency_code']);
$category_id = $row['category_id']; $category_id = intval($row['category_id']);
$category_name = htmlentities($row['category_name']); $category_name = htmlentities($row['category_name']);
if ($recurring_status == 1) { if ($recurring_status == 1) {
$status = "Active"; $status = "Active";
@@ -175,18 +175,20 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
?> ?>
<tr> <tr>
<td><a href="recurring_invoice.php?recurring_id=<?php echo $recurring_id; ?>"><?php echo "$recurring_prefix$recurring_number"; ?></a></td> <td class="text-bold">
<td><?php echo $recurring_next_date; ?></td> <a href="recurring_invoice.php?recurring_id=<?php echo $recurring_id; ?>"><?php echo "$recurring_prefix$recurring_number"; ?></a>
</td>
<td class="text-bold"><?php echo $recurring_next_date; ?></td>
<td><?php echo $recurring_scope; ?></td> <td><?php echo $recurring_scope; ?></td>
<td><?php echo ucwords($recurring_frequency); ?>ly</td> <td class="text-bold"><?php echo ucwords($recurring_frequency); ?>ly</td>
<td><a href="client_recurring_invoices.php?client_id=<?php echo $client_id; ?>"><?php echo $client_name; ?></a></td> <td class="text-bold"><a href="client_recurring_invoices.php?client_id=<?php echo $client_id; ?>"><?php echo $client_name; ?></a></td>
<td class="text-right"><?php echo numfmt_format_currency($currency_format, $recurring_amount, $recurring_currency_code); ?></td> <td class="text-bold text-right"><?php echo numfmt_format_currency($currency_format, $recurring_amount, $recurring_currency_code); ?></td>
<td><?php echo $recurring_last_sent; ?></td> <td><?php echo $recurring_last_sent; ?></td>
<td><?php echo $category_name; ?></td> <td><?php echo $category_name; ?></td>
<td> <td>
<span class="p-2 badge badge-<?php echo $status_badge_color; ?>"> <span class="p-2 badge badge-<?php echo $status_badge_color; ?>">
<?php echo $status; ?> <?php echo $status; ?>
</span> </span>
</td> </td>
<td> <td>
@@ -195,9 +197,13 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<i class="fas fa-ellipsis-h"></i> <i class="fas fa-ellipsis-h"></i>
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editRecurringModal<?php echo $recurring_id; ?>">Edit</a> <a class="dropdown-item" href="#" data-toggle="modal" data-target="#editRecurringModal<?php echo $recurring_id; ?>">
<i class="fas fa-fw fa-edit mr-2"></i>Edit
</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="post.php?delete_recurring=<?php echo $recurring_id; ?>">Delete</a> <a class="dropdown-item text-danger" href="post.php?delete_recurring=<?php echo $recurring_id; ?>">
<i class="fas fa-fw fa-trash mr-2"></i>Delete
</a>
</div> </div>
</div> </div>
</td> </td>
@@ -206,8 +212,8 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<?php <?php
require("recurring_invoice_edit_modal.php"); require("recurring_invoice_edit_modal.php");
} }
?> ?>
</tbody> </tbody>
</table> </table>

View File

@@ -2,7 +2,7 @@
<div class="modal-dialog modal-lg"> <div class="modal-dialog modal-lg">
<div class="modal-content bg-dark"> <div class="modal-content bg-dark">
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title"><i class="fas fa-money-bill-alt"></i> New Revenue</h5> <h5 class="modal-title"><i class="fas fa-money-bill-alt mr-2"></i>New Revenue</h5>
<button type="button" class="close text-white" data-dismiss="modal"> <button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span> <span>&times;</span>
</button> </button>
@@ -63,26 +63,27 @@
$sql = mysqli_query($mysqli, "SELECT * FROM accounts WHERE account_archived_at IS NULL AND company_id = $session_company_id ORDER BY account_name ASC"); $sql = mysqli_query($mysqli, "SELECT * FROM accounts WHERE account_archived_at IS NULL AND company_id = $session_company_id ORDER BY account_name ASC");
while ($row = mysqli_fetch_array($sql)) { while ($row = mysqli_fetch_array($sql)) {
$account_id = $row['account_id']; $account_id = intval($row['account_id']);
$account_name = htmlentities($row['account_name']); $account_name = htmlentities($row['account_name']);
$account_currency_code = htmlentities($row['account_currency_code']);
$opening_balance = floatval($row['opening_balance']); $opening_balance = floatval($row['opening_balance']);
$sql_payments = mysqli_query($mysqli, "SELECT SUM(payment_amount) AS total_payments FROM payments WHERE payment_account_id = $account_id"); $sql_payments = mysqli_query($mysqli, "SELECT SUM(payment_amount) AS total_payments FROM payments WHERE payment_account_id = $account_id");
$row = mysqli_fetch_array($sql_payments); $row = mysqli_fetch_array($sql_payments);
$total_payments = $row['total_payments']; $total_payments = floatval($row['total_payments']);
$sql_revenues = mysqli_query($mysqli, "SELECT SUM(revenue_amount) AS total_revenues FROM revenues WHERE revenue_account_id = $account_id"); $sql_revenues = mysqli_query($mysqli, "SELECT SUM(revenue_amount) AS total_revenues FROM revenues WHERE revenue_account_id = $account_id");
$row = mysqli_fetch_array($sql_revenues); $row = mysqli_fetch_array($sql_revenues);
$total_revenues = $row['total_revenues']; $total_revenues = floatval($row['total_revenues']);
$sql_expenses = mysqli_query($mysqli, "SELECT SUM(expense_amount) AS total_expenses FROM expenses WHERE expense_account_id = $account_id"); $sql_expenses = mysqli_query($mysqli, "SELECT SUM(expense_amount) AS total_expenses FROM expenses WHERE expense_account_id = $account_id");
$row = mysqli_fetch_array($sql_expenses); $row = mysqli_fetch_array($sql_expenses);
$total_expenses = $row['total_expenses']; $total_expenses = floatval($row['total_expenses']);
$balance = $opening_balance + $total_payments + $total_revenues - $total_expenses; $balance = $opening_balance + $total_payments + $total_revenues - $total_expenses;
?> ?>
<option <?php if ($config_default_payment_account == $account_id) { echo "selected"; } ?> value="<?php echo $account_id; ?>"><?php echo $account_name; ?> [$<?php echo number_format($balance, 2); ?>]</option> <option <?php if ($config_default_payment_account == $account_id) { echo "selected"; } ?> value="<?php echo $account_id; ?>"><?php echo $account_name; ?> [ <?php echo numfmt_format_currency($currency_format, $balance, $account_currency_code); ?> ]</option>
<?php <?php
} }
@@ -103,7 +104,7 @@
$sql = mysqli_query($mysqli, "SELECT * FROM categories WHERE category_type = 'Income' AND category_archived_at IS NULL AND company_id = $session_company_id ORDER BY category_name ASC"); $sql = mysqli_query($mysqli, "SELECT * FROM categories WHERE category_type = 'Income' AND category_archived_at IS NULL AND company_id = $session_company_id ORDER BY category_name ASC");
while ($row = mysqli_fetch_array($sql)) { while ($row = mysqli_fetch_array($sql)) {
$category_id = $row['category_id']; $category_id = intval($row['category_id']);
$category_name = htmlentities($row['category_name']); $category_name = htmlentities($row['category_name']);
?> ?>
<option value="<?php echo $category_id; ?>"><?php echo $category_name; ?></option> <option value="<?php echo $category_id; ?>"><?php echo $category_name; ?></option>
@@ -141,7 +142,7 @@
while ($row = mysqli_fetch_array($sql)) { while ($row = mysqli_fetch_array($sql)) {
$category_name = htmlentities($row['category_name']); $category_name = htmlentities($row['category_name']);
?> ?>
<option><?php echo "$category_name"; ?></option> <option><?php echo $category_name; ?></option>
<?php <?php
} }
@@ -164,8 +165,8 @@
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="add_revenue" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Add Revenue</button>
<button type="submit" name="add_revenue" class="btn btn-primary"><strong><i class="fas fa-check"></i> Add Revenue</strong></button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -64,26 +64,27 @@
$sql_accounts = mysqli_query($mysqli, "SELECT * FROM accounts WHERE (account_archived_at > '$revenue_created_at' OR account_archived_at IS NULL) AND company_id = $session_company_id ORDER BY account_name ASC"); $sql_accounts = mysqli_query($mysqli, "SELECT * FROM accounts WHERE (account_archived_at > '$revenue_created_at' OR account_archived_at IS NULL) AND company_id = $session_company_id ORDER BY account_name ASC");
while ($row = mysqli_fetch_array($sql_accounts)) { while ($row = mysqli_fetch_array($sql_accounts)) {
$account_id_select = $row['account_id']; $account_id_select = intval($row['account_id']);
$account_name_select = htmlentities($row['account_name']); $account_name_select = htmlentities($row['account_name']);
$account_currency_code_select = htmlentities($row['account_currency_code']);
$opening_balance = floatval($row['opening_balance']); $opening_balance = floatval($row['opening_balance']);
$sql_payments = mysqli_query($mysqli, "SELECT SUM(payment_amount) AS total_payments FROM payments WHERE payment_account_id = $account_id_select"); $sql_payments = mysqli_query($mysqli, "SELECT SUM(payment_amount) AS total_payments FROM payments WHERE payment_account_id = $account_id_select");
$row = mysqli_fetch_array($sql_payments); $row = mysqli_fetch_array($sql_payments);
$total_payments = $row['total_payments']; $total_payments = floatval($row['total_payments']);
$sql_revenues = mysqli_query($mysqli, "SELECT SUM(revenue_amount) AS total_revenues FROM revenues WHERE revenue_account_id = $account_id_select"); $sql_revenues = mysqli_query($mysqli, "SELECT SUM(revenue_amount) AS total_revenues FROM revenues WHERE revenue_account_id = $account_id_select");
$row = mysqli_fetch_array($sql_revenues); $row = mysqli_fetch_array($sql_revenues);
$total_revenues = $row['total_revenues']; $total_revenues = floatval($row['total_revenues']);
$sql_expenses = mysqli_query($mysqli, "SELECT SUM(expense_amount) AS total_expenses FROM expenses WHERE expense_account_id = $account_id_select"); $sql_expenses = mysqli_query($mysqli, "SELECT SUM(expense_amount) AS total_expenses FROM expenses WHERE expense_account_id = $account_id_select");
$row = mysqli_fetch_array($sql_expenses); $row = mysqli_fetch_array($sql_expenses);
$total_expenses = $row['total_expenses']; $total_expenses = floatval($row['total_expenses']);
$balance = $opening_balance + $total_payments + $total_revenues - $total_expenses; $balance = $opening_balance + $total_payments + $total_revenues - $total_expenses;
?> ?>
<option <?php if ($account_id == $account_id_select) { echo "selected"; } ?> value="<?php echo $account_id_select; ?>"><?php echo $account_name_select; ?> [$<?php echo number_format($balance, 2); ?>]</option> <option <?php if ($account_id == $account_id_select) { echo "selected"; } ?> value="<?php echo $account_id_select; ?>"><?php echo $account_name_select; ?> [ <?php echo numfmt_format_currency($currency_format, $balance, $account_currency_code_select); ?> ]</option>
<?php <?php
} }
@@ -104,7 +105,7 @@
$sql_category = mysqli_query($mysqli, "SELECT * FROM categories WHERE category_type = 'Income' AND (category_archived_at > '$revenue_created_at' OR category_archived_at IS NULL) AND company_id = $session_company_id ORDER BY category_name ASC"); $sql_category = mysqli_query($mysqli, "SELECT * FROM categories WHERE category_type = 'Income' AND (category_archived_at > '$revenue_created_at' OR category_archived_at IS NULL) AND company_id = $session_company_id ORDER BY category_name ASC");
while ($row = mysqli_fetch_array($sql_category)) { while ($row = mysqli_fetch_array($sql_category)) {
$category_id_select = $row['category_id']; $category_id_select = intval($row['category_id']);
$category_name = htmlentities($row['category_name']); $category_name = htmlentities($row['category_name']);
?> ?>
<option <?php if ($category_id_select == $category_id) { echo "selected"; } ?> value="<?php echo $category_id_select; ?>"><?php echo $category_name; ?></option> <option <?php if ($category_id_select == $category_id) { echo "selected"; } ?> value="<?php echo $category_id_select; ?>"><?php echo $category_name; ?></option>
@@ -165,8 +166,8 @@
</div> </div>
<div class="modal-footer bg-white"> <div class="modal-footer bg-white">
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button> <button type="submit" name="edit_revenue" class="btn btn-primary text-bold"><i class="fas fa-check mr-2"></i>Save</button>
<button type="submit" name="edit_revenue" class="btn btn-primary"><strong><i class="fas fa-check"></i> Save</strong></button> <button type="button" class="btn btn-light" data-dismiss="modal"><i class="fas fa-times mr-2"></i>Cancel</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -3,7 +3,7 @@
require_once("inc_all.php"); require_once("inc_all.php");
if (!empty($_GET['sb'])) { if (!empty($_GET['sb'])) {
$sb = strip_tags(mysqli_real_escape_string($mysqli, $_GET['sb'])); $sb = sanitizeInput($_GET['sb']);
} else { } else {
$sb = "revenue_date"; $sb = "revenue_date";
} }
@@ -22,8 +22,8 @@ if (empty($_GET['canned_date'])) {
//Date Filter //Date Filter
if ($_GET['canned_date'] == "custom" && !empty($_GET['dtf'])) { if ($_GET['canned_date'] == "custom" && !empty($_GET['dtf'])) {
$dtf = strip_tags(mysqli_real_escape_string($mysqli, $_GET['dtf'])); $dtf = sanitizeInput($_GET['dtf']);
$dtt = strip_tags(mysqli_real_escape_string($mysqli, $_GET['dtt'])); $dtt = sanitizeInput($_GET['dtt']);
} elseif ($_GET['canned_date'] == "today") { } elseif ($_GET['canned_date'] == "today") {
$dtf = date('Y-m-d'); $dtf = date('Y-m-d');
$dtt = date('Y-m-d'); $dtt = date('Y-m-d');
@@ -72,9 +72,9 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<div class="card card-dark"> <div class="card card-dark">
<div class="card-header py-2"> <div class="card-header py-2">
<h3 class="card-title mt-2"><i class="fa fa-fw fa-credit-card"></i> Revenues</h3> <h3 class="card-title mt-2"><i class="fa fa-credit-card mr-2"></i>Revenues</h3>
<div class="card-tools"> <div class="card-tools">
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addRevenueModal"><i class="fas fa-fw fa-plus"></i> Add Revenue</button> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addRevenueModal"><i class="fas fa-plus mr-2"></i>New Revenue</button>
</div> </div>
</div> </div>
@@ -83,7 +83,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<div class="row"> <div class="row">
<div class="col-sm-4"> <div class="col-sm-4">
<div class="input-group"> <div class="input-group">
<input type="search" class="form-control" name="q" value="<?php if (isset($q)) {echo strip_tags(htmlentities($q));} ?>" placeholder="Search Revenues"> <input type="search" class="form-control" name="q" value="<?php if (isset($q)) {echo stripslashes(htmlentities($q));} ?>" placeholder="Search Revenues">
<div class="input-group-append"> <div class="input-group-append">
<button class="btn btn-secondary" type="button" data-toggle="collapse" data-target="#advancedFilter"><i class="fas fa-filter"></i></button> <button class="btn btn-secondary" type="button" data-toggle="collapse" data-target="#advancedFilter"><i class="fas fa-filter"></i></button>
<button class="btn btn-primary"><i class="fa fa-search"></i></button> <button class="btn btn-primary"><i class="fa fa-search"></i></button>
@@ -142,7 +142,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<?php <?php
while ($row = mysqli_fetch_array($sql)) { while ($row = mysqli_fetch_array($sql)) {
$revenue_id = $row['revenue_id']; $revenue_id = intval($row['revenue_id']);
$revenue_description = htmlentities($row['revenue_description']); $revenue_description = htmlentities($row['revenue_description']);
$revenue_reference = htmlentities($row['revenue_reference']); $revenue_reference = htmlentities($row['revenue_reference']);
if (empty($revenue_reference)) { if (empty($revenue_reference)) {
@@ -150,14 +150,14 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
} else { } else {
$revenue_reference_display = $revenue_reference; $revenue_reference_display = $revenue_reference;
} }
$revenue_date = $row['revenue_date']; $revenue_date = htmlentities($row['revenue_date']);
$revenue_payment_method = htmlentities($row['revenue_payment_method']); $revenue_payment_method = htmlentities($row['revenue_payment_method']);
$revenue_amount = floatval($row['revenue_amount']); $revenue_amount = floatval($row['revenue_amount']);
$revenue_currency_code = htmlentities($row['revenue_currency_code']); $revenue_currency_code = htmlentities($row['revenue_currency_code']);
$revenue_created_at = $row['revenue_created_at']; $revenue_created_at = htmlentities($row['revenue_created_at']);
$account_id = $row['account_id']; $account_id = intval($row['account_id']);
$account_name = htmlentities($row['account_name']); $account_name = htmlentities($row['account_name']);
$category_id = $row['category_id']; $category_id = intval($row['category_id']);
$category_name = htmlentities($row['category_name']); $category_name = htmlentities($row['category_name']);
?> ?>
@@ -165,7 +165,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<tr> <tr>
<td><a href="#" data-toggle="modal" data-target="#editRevenueModal<?php echo $revenue_id; ?>"><?php echo $revenue_date; ?></a></td> <td><a href="#" data-toggle="modal" data-target="#editRevenueModal<?php echo $revenue_id; ?>"><?php echo $revenue_date; ?></a></td>
<td><?php echo $category_name; ?></td> <td><?php echo $category_name; ?></td>
<td class="text-right"><?php echo numfmt_format_currency($currency_format, $revenue_amount, $revenue_currency_code); ?></td> <td class="text-bold text-right"><?php echo numfmt_format_currency($currency_format, $revenue_amount, $revenue_currency_code); ?></td>
<td><?php echo $revenue_payment_method; ?></td> <td><?php echo $revenue_payment_method; ?></td>
<td><?php echo $revenue_reference_display; ?></td> <td><?php echo $revenue_reference_display; ?></td>
<td><?php echo $account_name; ?></td> <td><?php echo $account_name; ?></td>
@@ -175,9 +175,13 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<i class="fas fa-ellipsis-h"></i> <i class="fas fa-ellipsis-h"></i>
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editRevenueModal<?php echo $revenue_id; ?>">Edit</a> <a class="dropdown-item" href="#" data-toggle="modal" data-target="#editRevenueModal<?php echo $revenue_id; ?>">
<i class="fas fa-fw fa-edit mr-2"></i>Edit
</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="post.php?delete_revenue=<?php echo $revenue_id; ?>">Delete</a> <a class="dropdown-item text-danger" href="post.php?delete_revenue=<?php echo $revenue_id; ?>">
<i class="fas fa-fw fa-trash mr-2"></i>Delete
</a>
</div> </div>
</div> </div>
<?php <?php