diff --git a/add_recurring_invoice_modal.php b/add_recurring_invoice_modal.php index 9dcb293b..f18510ed 100644 --- a/add_recurring_invoice_modal.php +++ b/add_recurring_invoice_modal.php @@ -39,7 +39,7 @@
- " required> + " required>
@@ -48,12 +48,12 @@
- - - - - + + + +
@@ -85,7 +85,7 @@ diff --git a/create_recurring_invoices.php b/create_recurring_invoices.php new file mode 100644 index 00000000..caf78492 --- /dev/null +++ b/create_recurring_invoices.php @@ -0,0 +1,55 @@ + + + diff --git a/cron.php b/cron.php index 702a2b15..2b38e6f7 100644 --- a/cron.php +++ b/cron.php @@ -59,13 +59,52 @@ $invoice_date_due = $row['invoice_date_due']; //Send Recurring Invoices -$sql = mysqli_query($mysqli,"SELECT * FROM recurring_invoices WHERE recurring_invoice_active = 1"); +$sql = mysqli_query($mysqli,"SELECT * FROM recurring_invoices, clients, invoices WHERE clients.client_id = invoices.client_id AND invoices.invoice_id = recurring_invoices.invoice_id AND recurring_invoices.recurring_invoice_next_date = CURDATE()"); -$recurring_invoice_id = $row['recurring_invoice_id']; -$recurring_invoice_frequency = $row['recurring_invoice_frequency']; -$recurring_invoice_amount = $row['recurring_invoice_amount']; -$recurring_invoice_start_date = $row['recurring_invoice_start_date']; -$recurring_invoice_last_sent = $row['recurring_invoice_last_sent']; +while($row = mysqli_fetch_array($sql)){ + $recurring_invoice_id = $row['recurring_invoice_id']; + $recurring_invoice_frequency = $row['recurring_invoice_frequency']; + $recurring_invoice_status = $row['recurring_invoice_status']; + $recurring_invoice_start_date = $row['recurring_invoice_start_date']; + $recurring_invoice_last_sent = $row['recurring_invoice_last_sent']; + $recurring_invoice_next_date = $row['recurring_invoice_next_date']; + $invoice_id = $row['invoice_id']; + $invoice_status = $row['invoice_status']; + $invoice_amount = $row['invoice_amount']; + $invoice_note = $row['invoice_note']; + $invoice_category_id = $row['category_id']; + $client_id = $row['client_id']; + $client_name = $row['client_name']; + + //Get the last Invoice Number and add 1 for the new invoice number + $sql = mysqli_query($mysqli,"SELECT invoice_number FROM invoices ORDER BY invoice_id DESC LIMIT 1"); + $row = mysqli_fetch_array($sql); + $invoice_number = $row['invoice_number'] + 1; + + mysqli_query($mysqli,"INSERT INTO invoices SET invoice_number = $invoice_number, invoice_date = CURDATE(), invoice_due = CURDATE(), invoice_amount = '$invoice_amount', invoice_note = '$invoice_note', category_id = $invoice_category_id, invoice_status = 'Sent', client_id = $client_id"); + + $new_invoice_id = mysqli_insert_id($mysqli); + + + //Copy Items from original invoice to new invoice + $sql_invoice_items = mysqli_query($mysqli,"SELECT * FROM invoice_items WHERE invoice_id = $invoice_id ORDER BY invoice_item_id ASC"); + + while($row = mysqli_fetch_array($sql_invoice_items)){ + $invoice_item_id = $row['invoice_item_id']; + $invoice_item_name = $row['invoice_item_name']; + $invoice_item_description = $row['invoice_item_description']; + $invoice_item_quantity = $row['invoice_item_quantity']; + $invoice_item_price = $row['invoice_item_price']; + $invoice_item_subtotal = $row['invoice_item_price']; + $invoice_item_tax = $row['invoice_item_tax']; + $invoice_item_total = $row['invoice_item_total']; + + mysqli_query($mysqli,"INSERT INTO invoice_items SET invoice_item_name = '$invoice_item_name', invoice_item_description = '$invoice_item_description', invoice_item_quantity = $invoice_item_quantity, invoice_item_price = '$invoice_item_price', invoice_item_subtotal = '$invoice_item_subtotal', invoice_item_tax = '$invoice_item_tax', invoice_item_total = '$invoice_item_total', invoice_id = $new_invoice_id"); + } + + mysqli_query($mysqli,"INSERT INTO invoice_history SET invoice_history_date = CURDATE(), invoice_history_status = 'Draft', invoice_history_description = 'INVOICE added!', invoice_id = $new_invoice_id"); + + mysqli_query($mysqli,"UPDATE recurring_invoices SET recurring_invoice_last_sent = CURDATE(), recurring_invoice_next_date = DATE_ADD(CURDATE(), INTERVAL 1 $recurring_invoice_frequency) , recurring_invoice_id = $recurring_invoice_id"); //Send Past Due Invoice Reminders diff --git a/invoices.php b/invoices.php index c6b7efcf..4a8ac137 100644 --- a/invoices.php +++ b/invoices.php @@ -4,6 +4,7 @@ $sql = mysqli_query($mysqli,"SELECT * FROM invoices, clients WHERE invoices.client_id = clients.client_id + AND invoices.invoice_number > 0 ORDER BY invoices.invoice_number DESC"); ?> @@ -43,6 +44,8 @@ $unixtime_invoice_due = strtotime($invoice_due); if($unixtime_invoice_due < time()){ $overdue_color = "text-danger"; + }else{ + $overdue_color = ""; } if($invoice_status == "Sent"){ diff --git a/post.php b/post.php index 7135ed3f..2b70dfe4 100644 --- a/post.php +++ b/post.php @@ -472,7 +472,7 @@ if(isset($_POST['add_invoice'])){ $category = intval($_POST['category']); //Get the last Invoice Number and add 1 for the new invoice number - $sql = mysqli_query($mysqli,"SELECT invoice_number FROM invoices ORDER BY invoice_id DESC LIMIT 1"); + $sql = mysqli_query($mysqli,"SELECT invoice_number FROM invoices ORDER BY invoice_number DESC LIMIT 1"); $row = mysqli_fetch_array($sql); $invoice_number = $row['invoice_number'] + 1; @@ -503,6 +503,28 @@ if(isset($_POST['edit_invoice'])){ } +if(isset($_POST['add_recurring_invoice'])){ + + $client = intval($_POST['client']); + $frequency = strip_tags(mysqli_real_escape_string($mysqli,$_POST['frequency'])); + $start_date = strip_tags(mysqli_real_escape_string($mysqli,$_POST['start_date'])); + $category = intval($_POST['category']); + + mysqli_query($mysqli,"INSERT INTO invoices SET category_id = $category, invoice_status = 'Draft', client_id = $client"); + + $invoice_id = mysqli_insert_id($mysqli); + + mysqli_query($mysqli,"INSERT INTO recurring_invoices SET recurring_invoice_frequency = '$frequency', recurring_invoice_start_date = '$start_date', recurring_invoice_next_date = '$start_date', invoice_id = $invoice_id"); + + $recurring_invoice_id = mysqli_insert_id($mysqli); + + $_SESSION['alert_message'] = "Recurring Invoice added"; + + header("Location: recurring_invoice.php?recurring_invoice_id=$recurring_invoice_id"); + +} + + if(isset($_GET['mark_invoice_sent'])){ $invoice_id = intval($_GET['mark_invoice_sent']); diff --git a/recurring.php b/recurring.php index 93d79834..cfe17291 100644 --- a/recurring.php +++ b/recurring.php @@ -2,9 +2,10 @@
@@ -21,7 +22,7 @@ Client Start Date Last Sent - Amount + Next Date Status Actions @@ -30,49 +31,41 @@ - INV- - - $ - -
- - - - - + + + + + + - + diff --git a/recurring_invoice.php b/recurring_invoice.php new file mode 100644 index 00000000..a4d99d20 --- /dev/null +++ b/recurring_invoice.php @@ -0,0 +1,292 @@ + + +2){ + $client_phone = substr($row['client_phone'],0,3)."-".substr($row['client_phone'],3,3)."-".substr($row['client_phone'],6,4); + } + $client_website = $row['client_website']; + + $sql_invoice_history = mysqli_query($mysqli,"SELECT * FROM invoice_history WHERE invoice_id = $invoice_id ORDER BY invoice_history_id ASC"); + + $sql_payments = mysqli_query($mysqli,"SELECT * FROM payments, accounts WHERE payments.account_id = accounts.account_id AND payments.invoice_id = $invoice_id ORDER BY payments.payment_id DESC"); + + //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 invoice_id = $invoice_id"); + $row = mysqli_fetch_array($sql_amount_paid); + $amount_paid = $row['amount_paid']; + + $balance = $invoice_amount - $amount_paid; + +?> + + + +
+
+ +
+
+ +
+
+
+
+ From +
+
+
    +
  • +
  • +
  • +
  • +
  • +
+
+
+
+
+
+
+ Bill To +
+
+
    +
  • +
  • +
  • +
  • +
  • +
+
+
+
+
+
+
+ Details +
+
+
    +
  • Frequency:
  • +
  • Start Date:
  • +
  • Next Date:
  • +
  • Last Sent:
  • +
  • Net Terms:
    30 Day
  • +
+
+
+
+
+ + + +
+
+
+
+ Items +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ItemDescriptionUnit CostQuantityTaxLine Total
$$$
+ +
+
+
+
+ +
+
+
+
+ Notes +
+
+

+
+
+
+
+ + + + + + + 0){ ?> + + + + + + 0){ ?> + + + + + + 0){ ?> + + + + + + + + + + +
Subtotal$
Discount$
Tax$
Paid to Date
$
Balance Due$
+
+
+ +
+
+
+
+ History +
+
+ + + + + + + + + + + + + + + + + +
Date SentInvoice Number
+
+
+
+
+ + + + + +