Moved Bulk Email from the side Menu to a contact Bulk Action, Also removed Client Statement as it did not work and payments covers that already this frees up 2 menu spaces on the client side nav

This commit is contained in:
johnnyq 2024-08-23 15:21:15 -04:00
parent d0ade72e6e
commit 58ec9121a0
5 changed files with 62 additions and 352 deletions

View File

@ -1,147 +0,0 @@
<?php
require_once "inc_all_client.php";
$sql = mysqli_query($mysqli, "SELECT * FROM contacts
WHERE contact_client_id = $client_id
AND contact_archived_at IS NULL
AND contact_email != ''
ORDER BY contact_primary DESC,
contact_important DESC"
);
?>
<div class="card">
<div class="card-header">
<h3 class="card-title mt-2 mb-2"><i class="fa fa-fw fa-envelope-open mr-2"></i>Bulk Mail to Special Contacts</h3>
<div class="card-tools">
<button id="bulkActionButton" hidden class="btn btn-primary" type="submit" form='bulkActions' name="send_bulk_mail_now">
<i class="fas fa-fw fa-paper-plane mr-2"></i>Send Now (<span id="selectedCount">0</span>)
</button>
</div>
</div>
<div class="card-body">
<form id="bulkActions" action="post.php" method="post">
<div class="row">
<div class="col">
<h5>Email Message</h5>
<hr>
<div class="form-group">
<select type="text" class="form-control select2" name="mail_from">
<option value="<?php echo nullable_htmlentities($config_mail_from_email); ?>">
<?php echo nullable_htmlentities("$config_mail_from_name - $config_mail_from_email"); ?></option>
<option value="<?php echo nullable_htmlentities($config_invoice_from_email); ?>">
<?php echo nullable_htmlentities("$config_invoice_from_name - $config_invoice_from_email"); ?></option>
<option value="<?php echo nullable_htmlentities($config_quote_from_email); ?>">
<?php echo nullable_htmlentities("$config_quote_from_name - $config_quote_from_email"); ?></option>
<option value="<?php echo nullable_htmlentities($config_ticket_from_email); ?>">
<?php echo nullable_htmlentities("$config_ticket_from_name - $config_ticket_from_email"); ?></option>
</select>
</div>
<div class="form-group">
<input type="text" class="form-control" name="mail_from_name" placeholder="From Name"
value="<?php echo nullable_htmlentities($config_mail_from_name); ?>" required>
</div>
<div class="form-group">
<input type="text" class="form-control" name="subject" placeholder="Subject" required>
</div>
<div class="form-group">
<textarea class="form-control tinymce" name="body"
placeholder="Type an email in here"></textarea>
</div>
<div class="form-group">
<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="datetime-local" class="form-control" name="queued_at">
</div>
</div>
</div>
<div class="col">
<h5>Select Contacts</h5>
<hr>
<div class="card">
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<td>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="selectAllCheckbox"
onclick="checkAll(this)">
</div>
</td>
<th>Name</th>
<th>Title</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_array($sql)) {
$contact_id = intval($row['contact_id']);
$contact_name = nullable_htmlentities($row['contact_name']);
$contact_title = nullable_htmlentities($row['contact_title']);
if (empty($contact_title)) {
$contact_title_display = "-";
} else {
$contact_title_display = "$contact_title";
}
$contact_email = nullable_htmlentities($row['contact_email']);
$contact_primary = intval($row['contact_primary']);
$contact_important = intval($row['contact_important']);
$contact_billing = intval($row['contact_billing']);
$contact_technical = intval($row['contact_technical']);
?>
<tr>
<td class="pr-0 bg-light">
<div class="form-check">
<input type="checkbox" class="form-check-input bulk-select" name="contact_ids[]"
value="<?php echo $contact_id; ?>">
</div>
</td>
<td>
<a href="client_contact_details.php?client_id=<?php echo $client_id; ?>&contact_id=<?php echo $contact_id; ?>"
target="_blank">
<?php echo $contact_name; ?>
</a>
</td>
<td><?php echo $contact_title_display; ?></td>
<td><?php echo $contact_email; ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</form>
</div>
</div>
</form>
<script src="js/bulk_actions.js"></script>
<?php
require_once "footer.php";

View File

@ -0,0 +1,57 @@
<div class="modal" id="bulkSendEmailModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content bg-dark">
<div class="modal-header">
<h5 class="modal-title"><i class="fa fa-fw fa-envelope-open mr-2"></i>Bulk Send Email</h5>
<button type="button" class="close text-white" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body bg-white">
<div class="form-group">
<select type="text" class="form-control select2" name="mail_from">
<option value="<?php echo nullable_htmlentities($config_mail_from_email); ?>">
<?php echo nullable_htmlentities("$config_mail_from_name - $config_mail_from_email"); ?></option>
<option value="<?php echo nullable_htmlentities($config_invoice_from_email); ?>">
<?php echo nullable_htmlentities("$config_invoice_from_name - $config_invoice_from_email"); ?></option>
<option value="<?php echo nullable_htmlentities($config_quote_from_email); ?>">
<?php echo nullable_htmlentities("$config_quote_from_name - $config_quote_from_email"); ?></option>
<option value="<?php echo nullable_htmlentities($config_ticket_from_email); ?>">
<?php echo nullable_htmlentities("$config_ticket_from_name - $config_ticket_from_email"); ?></option>
</select>
</div>
<div class="form-group">
<input type="text" class="form-control" name="mail_from_name" placeholder="From Name"
value="<?php echo nullable_htmlentities($config_mail_from_name); ?>" required>
</div>
<div class="form-group">
<input type="text" class="form-control" name="subject" placeholder="Subject" required>
</div>
<div class="form-group">
<textarea class="form-control tinymce" name="body"
placeholder="Type an email in here"></textarea>
</div>
<div class="form-group">
<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="datetime-local" class="form-control" name="queued_at">
</div>
</div>
</div>
<div class="modal-footer bg-white">
<button type="submit" name="send_bulk_mail_now" class="btn btn-primary text-bold"><i class="fas fa-paper-plane mr-2"></i>Send</button>
<button type="button" class="btn btn-light" data-dismiss="modal"><i class="fa fa-times mr-2"></i>Cancel</button>
</div>
</div>
</div>
</div>

View File

@ -156,6 +156,10 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#bulkAssignTagsModal">
<i class="fas fa-fw fa-tags mr-2"></i>Assign Tags
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#bulkSendEmailModal">
<i class="fas fa-fw fa-paper-plane mr-2"></i>Send Email
</a>
<?php if ($archived) { ?>
<div class="dropdown-divider"></div>
<button class="dropdown-item text-info"
@ -411,6 +415,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
<?php require_once "client_contact_bulk_edit_department_modal.php"; ?>
<?php require_once "client_contact_bulk_edit_role_modal.php"; ?>
<?php require_once "client_contact_bulk_assign_tags_modal.php"; ?>
<?php require_once "client_contact_bulk_email_modal.php"; ?>
</form>
<?php require_once "pagination.php";
?>

View File

@ -309,15 +309,6 @@
</a>
</li>
<li class="nav-item">
<a href="client_statement.php?client_id=<?php echo $client_id; ?>" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "client_statement.php") { echo "active"; } ?>">
<i class="nav-icon fas fa-file-invoice-dollar"></i>
<p>
Statement
</p>
</a>
</li>
<li class="nav-item">
<a href="client_trips.php?client_id=<?php echo $client_id; ?>" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "client_trips.php") { echo "active"; } ?>">
<i class="nav-icon fas fa-route"></i>
@ -335,13 +326,6 @@
<li class="nav-header mt-3">MISC</li>
<li class="nav-item">
<a href="client_bulk_mail.php?client_id=<?php echo $client_id; ?>" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "client_bulk_mail.php") { echo "active"; } ?>">
<i class="nav-icon fas fa-envelope-open"></i>
<p>Bulk Mail</p>
</a>
</li>
<li class="nav-item">
<a href="client_shared_items.php?client_id=<?php echo $client_id; ?>" class="nav-link <?php if (basename($_SERVER["PHP_SELF"]) == "client_shared_items.php") { echo "active"; } ?>">
<i class="nav-icon fas fa-share"></i>

View File

@ -1,189 +0,0 @@
<?php
require_once "inc_all_client.php";
if (isset($_GET['client_id'])) {
$client_id = intval($_GET['client_id']);
$sql_client_details = "
SELECT
client_name,
client_type,
client_website,
client_net_terms
FROM
clients
WHERE
client_id = $client_id";
$result_client_details = mysqli_query($mysqli, $sql_client_details);
$row_client_details = mysqli_fetch_assoc($result_client_details);
$client_name = nullable_htmlentities($row_client_details['client_name']);
$client_type = nullable_htmlentities($row_client_details['client_type']);
$client_website = nullable_htmlentities($row_client_details['client_website']);
$client_net_terms = intval($row_client_details['client_net_terms']);
$sql_client_unpaid_invoices = "
SELECT
invoice_id,
invoice_number,
invoice_prefix,
invoice_date,
invoice_due,
invoice_amount
FROM
invoices
WHERE
invoice_client_id = $client_id
AND invoice_status NOT LIKE 'Draft'
AND invoice_status NOT LIKE 'Cancelled'
AND invoice_status NOT LIKE 'Paid'";
$result_client_unpaid_invoices = mysqli_query($mysqli, $sql_client_unpaid_invoices);
$currency_code = getSettingValue($mysqli, "company_currency");
?>
<ol class="breadcrumb d-print-none">
<li class="breadcrumb-item">
<a href="clients.php">Clients</a>
</li>
<li class="breadcrumb-item">
<a href="client_invoices.php?client_id=<?php echo $client_id; ?>"><?php echo $client_name; ?></a>
</li>
</ol>
<div class="card card-dark">
<div class="card-header py-2">
<h3 class="card-title mt-2"><i class="fas fa-fw fa-balance-scale mr-2"></i>Statement for <?php echo $client_name ?></h3>
<div class="card-tools">
<button type="button" class="btn btn-primary d-print-none" onclick="window.print();"><i class="fas fa-fw fa-print mr-2"></i>Print</button>
</div>
</div>
<div class="card-body p-0">
<div>
<div class="table-responsive-sm">
<table class="table table-sm">
<!-- Past Due Payments -->
<thead class="text-dark">
<tr>
<th>Invoice Number</th>
<th>Date</th>
<th>Due Date</th>
<th>Amount</th>
<th>Balance</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_assoc($result_client_unpaid_invoices)) {
$invoice_number = intval($row['invoice_number']);
$invoice_id = intval($row['invoice_id']);
$invoice_prefix = nullable_htmlentities($row['invoice_prefix']);
$invoice_date = nullable_htmlentities($row['invoice_date']);
$invoice_amount = floatval($row['invoice_amount']);
$invoice_amount_formatted = numfmt_format_currency($currency_format, $invoice_amount, $currency_code);
$invoice_url = "invoice.php?invoice_id=$invoice_id";
$invoice_due = nullable_htmlentities($row['invoice_due']);
$invoice_balance = floatval(calculateInvoiceBalance($mysqli, $invoice_id));
$invoice_balance_formatted = numfmt_format_currency($currency_format, $invoice_balance, $currency_code);
?>
<tr>
<td>
<a href="<?php echo $invoice_url; ?>" target="_blank"><?php echo $invoice_prefix . $invoice_number; ?></a>
</td>
<td>
<?php echo $invoice_date; ?>
</td>
<td>
<?php echo $invoice_due; ?>
</td>
<td>
<?php echo $invoice_amount_formatted; ?>
</td>
<td>
<?php echo $invoice_balance_formatted; ?>
</td>
<?php
}
?>
</tbody>
</table>
</div>
<div class="table-responsive-sm">
<!-- Previous Payments -->
<table class="table table-sm">
<thead class="text-dark">
<tr>
<th>Payment Reference</th>
<th>Payment Date</th>
<th>Payment Amount</th>
<th>Invoice Number</th>
</tr>
</thead>
<tbody>
<?php
$sql_client_payments = "
SELECT
payments.payment_date,
payments.payment_amount,
payments.payment_reference,
invoices.invoice_number,
invoices.invoice_prefix,
invoices.invoice_client_id
FROM
payments
LEFT JOIN
invoices ON payments.payment_invoice_id = invoices.invoice_id
WHERE
invoice_client_id = $client_id
AND payment_archived_at IS NULL
ORDER BY
payment_date DESC";
$result_client_payments = mysqli_query($mysqli, $sql_client_payments);
while ($row = mysqli_fetch_assoc($result_client_payments)) {
$payment_date = nullable_htmlentities($row['payment_date']);
$payment_amount = floatval($row['payment_amount']);
$payment_reference = nullable_htmlentities($row['payment_reference']);
$invoice_number = nullable_htmlentities($row['invoice_prefix'].$row['invoice_number']);
$payment_amount_formatted = numfmt_format_currency($currency_format, $payment_amount, $currency_code);
?>
<tr>
<td>
<?php echo $payment_reference; ?>
</td>
<td>
<?php echo $payment_date; ?>
</td>
<td>
<?php echo $payment_amount_formatted; ?>
</td>
<td>
<?php echo $invoice_number; ?>
</td>
<?php
}
?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<?php require_once "footer.php";
}
?>