Initail commit master
authorMaxim Bourget <bmx007@gmail.com>
Tue, 4 Nov 2014 08:38:19 +0000 (09:38 +0100)
committerJanusz Dobrowolski <janusz@frontaccounting.eu>
Tue, 4 Nov 2014 08:38:19 +0000 (09:38 +0100)
README.md [new file with mode: 0644]
hooks.php [new file with mode: 0644]
includes/customer_emailer.inc [new file with mode: 0644]
includes/doctext.inc [new file with mode: 0644]
index.php [new file with mode: 0644]
reporting/index.php [new file with mode: 0644]
reporting/rep_email_customers.php [new file with mode: 0644]
reporting/reports_custom.php [new file with mode: 0644]

diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..5d026f4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,6 @@
+# Overview
+This report send emial to every customers.
+
+# Parameters
+
+
diff --git a/hooks.php b/hooks.php
new file mode 100644 (file)
index 0000000..b464b88
--- /dev/null
+++ b/hooks.php
@@ -0,0 +1,31 @@
+<?php
+// ----------------------------------------------------------------
+// $ Revision:  1.0 $
+// Creator: Maxime Bourget
+// date_:   2014-10-19
+// Title:   Email Customer
+// Free software under GNU GPL
+// ----------------------------------------------------------------
+define ('SS_EMAIL_CUSTOMER', 103<<8);
+
+class hooks_rep_email_customers extends hooks {
+       var $module_name = 'rep_email_customers';
+
+       /*
+               Install additonal menu options provided by module
+       */
+               function install_tabs($app) {
+                               global $path_to_root;
+
+               }
+
+
+               function install_access()
+       {
+                               $security_sections[SS_EMAIL_CUSTOMER] =  _("Email Customer Report");
+               $security_areas['SA_EMAIL_CUSTOMER_EMAIL'] = array(SS_EMAIL_CUSTOMER|1, _("send emails."));
+
+               return array($security_areas, $security_sections);
+       }
+}
+
diff --git a/includes/customer_emailer.inc b/includes/customer_emailer.inc
new file mode 100644 (file)
index 0000000..2a14c2f
--- /dev/null
@@ -0,0 +1,142 @@
+<?php
+global $path_to_root;
+include_once($path_to_root . "/reporting/includes/pdf_report.inc");
+
+class CustomerEmailer {
+       private $customer;
+       private $area;
+       private $salesman;
+       private $pricelist;
+       private $email;
+       private $email_body;
+       private $orientation;
+
+
+       function __construct($use_global=true) {
+               $customer = $_POST['PARAM_0'];
+               $subject = $_POST['PARAM_1'];
+               $email_body = $_POST['PARAM_2'];
+               $email = $_POST['PARAM_3'];
+               $area = $_POST['PARAM_4'];
+               $use_area = $_POST['PARAM_5'];
+               $pricelist = $_POST['PARAM_6'];
+               $use_pricelist = $_POST['PARAM_7'];
+               $salesman = $_POST['PARAM_8'];
+
+               $fno = explode("-", $from);
+               $tno = explode("-", $to);
+        
+        $this->customer = $customer;
+        $this->subject = $subject;
+               $this->email = $email;
+               $this->email_body = $email_body;
+        foreach(array('area', 'pricelist') as $var) {
+            $use_var = "use_".$var;
+            if($$use_var) {
+                $this->$var = $$var;
+                }
+            }
+        $this->salesman = $salesman;
+       }
+
+    protected function branches () {
+        $sql = "SELECT DISTINCT dm.debtor_no,
+                    dm.name  ,
+                    cb.branch_code
+                FROM ".TB_PREF."debtors_master dm
+                JOIN ".TB_PREF."cust_branch  cb
+                    ON (dm.debtor_no = cb.debtor_no)
+                WHERE dm.inactive = 0
+                      AND cb.inactive = 0
+                ";
+
+        if($this->customer) 
+            $sql .= " AND dm.debtor_no = " . db_escape($this->customer);
+
+        if($this->area)
+            $sql .= " AND cb.area = " . db_escape($this->area);
+
+        if($this->pricelist)
+            $sql .= " AND dm.sales_type = ". db_escape($this->pricelist);
+
+        if($this->salesman > 0)
+            $sql .= " AND cb.salesman = ". db_escape($this->salesman);
+
+        $sql .= " ORDER BY dm.name";
+        $query = db_query($sql);
+        $customers = array();
+
+        while($row = db_fetch($query)) {
+            $customers[$row[0]] = $row;
+            }
+
+        return $customers;
+    }
+
+    public function printReports() {
+        $rep = null;
+        foreach($this->branches() as $branchInfo) {
+            $contacts = get_branch_contacts($branchInfo['branch_code'],null,  $branchInfo['debtor_no'], false);
+            if($this->email == 1) {
+                $this->sendEmail($branchInfo, $contacts);
+            }
+            else {
+                if(!$rep) {
+                    $rep = new FrontReport(_('Announcement')
+                        , "announcement"
+                        , user_pagesize()
+                        , 9
+                        , 'P');
+                    $rep->Info();
+                    $rep->filename = "email_preview.pdf";
+                }
+                $this->previewEmail($rep, $branchInfo, $contacts);
+            }
+
+
+        }
+        if($rep) $rep->End();
+    }
+
+
+
+    protected function previewEmail($rep, $branchInfo, $contacts) {
+        $name = $branchInfo['name'];
+        // $rep->NewPage();
+        $rep->TextWrapLines(8, 800, $name);
+        $done =  array();
+        foreach($contacts as $contact) {
+                $email = $contact['email'];
+                if(!$email) continue;
+                $contact_name = $contact['name'];
+                $key = $contact_name ." : ". $email ." [" .$contact['action']."]";
+                if(!array_key_exists($key, $done)) {
+                    $rep->NewLine();
+                    $rep->TextWrapLInes(25,700, $key);
+                    $done[$key]=1;
+                }
+        }
+        $rep->NewLine();
+    }
+
+    protected function sendEmail($branchInfo, $contacts) {
+        $rep = new FrontReport("", "", user_pagesize(), 9, 'P');
+        //$rep->company = get_company_prefs();
+        $rep->Info();
+        $rep->SetCommonData(null, null, null, null, null, $contacts);
+        $rep->no_attachment = true;
+        $rep->email_body = "Hi [contact]\n\n"
+            .  $this->generateEmailBody()
+            . "\n\n\n"
+            ;
+            
+        $rep->End(1, $this->subject);
+    }
+
+    protected function generateEmailBody($branchInfo) {
+        return $this->email_body;
+    }
+
+
+
+};
diff --git a/includes/doctext.inc b/includes/doctext.inc
new file mode 100644 (file)
index 0000000..983bdaf
--- /dev/null
@@ -0,0 +1,287 @@
+<?php
+/**********************************************************************
+    Copyright (C) FrontAccounting, LLC.
+       Released under the terms of the GNU General Public License, GPL, 
+       as published by the Free Software Foundation, either version 3 
+       of the License, or (at your option) any later version.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
+***********************************************************************/
+/*****
+*
+*      Set document type dependent elements of common page layout.
+*
+*/
+       $Addr1 = array(
+                       'title' => _("Charge To"),
+                       'name' => @$this->formData['br_name'] ? $this->formData['br_name'] : @$this->formData['DebtorName'],
+                       'address' => @$this->formData['br_address'] ? $this->formData['br_address'] : @$this->formData['address']
+       );
+       $Addr2 = array(
+                       'title' => _("Delivered To"),
+                       'name' => @$this->formData['deliver_to'],
+                       'address' => @$this->formData['delivery_address']
+       );
+
+       // default item column headers
+       $this->headers = array(_("Item Code"), _("Item Description"), _("Quantity"),
+               _("Unit"), _("Price"), _("Discount %"), _("Total"));
+
+       // for links use 'text' => 'url'
+       $Footer[0] = _("All amounts stated in") . " - " . @$this->formData['curr_code'];
+
+       switch ($this->formData['doctype'])
+       {
+               case ST_SALESQUOTE:
+                       $this->title = _("SALES QUOTATION");
+                       $this->formData['document_name'] =_("Quotation No.");
+                       $this->formData['document_date'] = $this->formData['ord_date'];
+                       $this->formData['document_number'] = $print_invoice_no == 0 && isset($this->formData['reference'])
+                               ? $this->formData['reference'] : $this->formData['order_no'];
+                       $aux_info = array(
+                               _("Customer's Reference") => $this->formData["customer_ref"],
+                               _("Sales Person") => get_salesman_name($this->formData['salesman']),
+                               _("Your VAT no.") => $this->formData['tax_id'],
+                               _("Our Quotation No") => $this->formData['order_no'],
+                               _("Valid until") => sql2date($this->formData['delivery_date']),
+                       );
+                       break;
+
+               case ST_SALESORDER:
+                       $this->title = ($print_as_quote==1 ? _("PROFORMA INVOICE") : _("SALES ORDER"));
+                       $this->formData['document_name'] =_("Order No.");
+                       $this->formData['document_date'] = $this->formData['ord_date'];
+                       $this->formData['document_number'] = $print_invoice_no == 0 && isset($this->formData['reference'])
+                               ? $this->formData['reference'] : $this->formData['order_no'];
+                       $this->formData['document_amount'] = $this->formData['order_no'];
+
+                       $aux_info = array(
+                               _("Customer's Reference") => $this->formData["customer_ref"],
+                               _("Sales Person") => get_salesman_name($this->formData['salesman']),
+                               _("Your VAT no.") => $this->formData['tax_id'],
+                               _("Our Order No") => $this->formData['order_no'],
+                               _("Delivery Date") => sql2date($this->formData['delivery_date']),
+                       );
+                       break;
+
+               case ST_CUSTDELIVERY:
+/* Packing slip corresponding to a invoic, not 'delivery'.
+ * Therefore the code is similar to ST_SALESINVOICES 
+ */
+                       $this->title = _("PACKING SLIP");
+                               $this->formData['document_name'] =_("Invoice No.");
+                       $this->formData['domicile'] = $this->company['domicile'];
+                       //$Footer[0] = _("Please quote Invoice no. when paying. All amounts stated in"). " - " . $this->formData['curr_code'];
+
+                       $deliveries = get_sales_parent_numbers(ST_SALESINVOICE, $this->formData['trans_no']);
+                       if ($print_invoice_no == 0)
+                       {
+                               foreach($deliveries as $n => $delivery) {
+                                       $delivery_transaction = get_customer_trans($delivery, ST_CUSTDELIVERY);
+                                       $order = get_reference(ST_SALESORDER, $delivery_transaction['order_']);
+                                       if($order) $deliveries[$n] = $order;
+                               }
+                       }
+                       $aux_info = array(
+                               _("Customer's Reference") => $this->formData["customer_ref"],
+                               _("Sales Person") => get_salesman_name($this->formData['salesman']),
+                               _("Your VAT no.") => $this->formData['tax_id'],
+                               _("Order No.") => implode(',', $deliveries),
+                               _("Due Date") => sql2date($this->formData['due_date']),
+                       );
+                       break;
+
+               case ST_CUSTCREDIT:
+                       $this->title = _("CREDIT NOTE");
+                       $this->formData['document_name'] =_("Credit No.");
+                       $Footer[0] = _("Please quote Credit no. when paying. All amounts stated in") . " - " . $this->formData['curr_code'];
+
+                       $aux_info = array(
+                               _("Customer's Reference") => @$this->formData["customer_ref"],
+                               _("Sales Person") => get_salesman_name($this->formData['salesman']),
+                               _("Your VAT no.") => $this->formData['tax_id'],
+                               _("Our Order No") => $this->formData['order_'],
+                               _("Due Date") => '',
+                       );
+                       break;
+
+               case ST_SALESINVOICE:
+                       if($print_as_quote) {
+                               $this->title =  _("PROFORMA INVOICE");
+                               $this->formData['document_name'] =_("Proforma No.");
+                       }
+                       else {
+                               $this->title =  _("INVOICE");
+                               $this->formData['document_name'] =_("Invoice No.");
+                       }
+                       $this->formData['domicile'] = $this->company['domicile'];
+                       $Footer[0] = _("Please quote Invoice no. when paying. All amounts stated in"). " - " . $this->formData['curr_code'];
+
+                       $deliveries = get_sales_parent_numbers(ST_SALESINVOICE, $this->formData['trans_no']);
+                       if ($print_invoice_no == 0)
+                       {
+                               foreach($deliveries as $n => $delivery) {
+                                       $deliveries[$n] = get_reference(ST_CUSTDELIVERY, $delivery);
+                               }
+                       }
+                       $aux_info = array(
+                               _("Customer's Reference") => $this->formData["customer_ref"],
+                               _("Sales Person") => get_salesman_name($this->formData['salesman']),
+                               _("Your VAT no.") => $this->formData['tax_id'],
+                               _("Delivery Note No.") => implode(',', $deliveries),
+                               _("Due Date") => sql2date($this->formData['due_date']),
+                       );
+                       break;
+
+               case ST_SUPPAYMENT:
+                       global $systypes_array;
+
+                       $this->title = _("REMITTANCE");
+                       $this->formData['document_name'] =_("Remittance No.");
+                       $Addr1['title'] = _("Order To");
+                       $Addr1['name'] = $this->formData['supp_name'];
+                       $Addr1['address'] = $this->formData['address'];
+                       $Addr2['title'] = _("Charge To");
+                       $Addr2['name'] = '';
+                       $Addr2['address'] = '';
+
+                       $aux_info = array(
+                               _("Customer's Reference") => $this->formData['supp_account_no'],
+                               _("Type") =>$systypes_array[$this->formData["type"]],
+                               _("Your VAT no.") => $this->formData['tax_id'],
+                               _("Supplier's Reference") => '',
+                               _("Due Date") => sql2date($this->formData['tran_date']),
+                       );
+                       $this->headers = array(_("Transaction"), _("#"), _("Date"), _("Due Date"), _("Total Amount"), _("Left to Allocate"), _("This Allocation"));
+                       break;
+
+               case ST_PURCHORDER:
+                       $this->title = _("PURCHASE ORDER");
+                       $this->formData['document_name'] =_("Purchase Order No.");
+                       $Addr1['title'] = _("Order To");
+                       $Addr1['name'] = $this->formData['supp_name'];
+                       $Addr1['address'] = $this->formData['address'];
+                       $Addr2['title'] = _("Deliver To");
+                       $Addr2['name'] = $this->company['coy_name'];
+                       //$Addr2['address'] = $this->company['postal_address']; No, don't destroy delivery address!
+                       $this->formData['document_date'] = $this->formData['ord_date'];
+                       $this->formData['document_number'] = $print_invoice_no == 0 && isset($this->formData['reference'])
+                               ? $this->formData['reference'] : $this->formData['order_no'];
+
+                       $aux_info = array(
+                               _("Customer's Reference") => $this->formData['supp_account_no'],
+                               _("Sales Person") => $this->formData['contact'],
+                               _("Your VAT no.") => $this->formData['tax_id'],
+                               _("Supplier's Reference") => $this->formData['requisition_no'],
+                               _("Order Date") => sql2date($this->formData['document_date']),
+                       );
+
+                       $this->headers = array(_("Item Code"), _("Item Description"),
+                               _("Delivery Date"), _("Quantity"),      _("Unit"), _("Price"), _("Total"));
+                       break;
+
+               case ST_CUSTPAYMENT:
+                       global $systypes_array;
+
+                       $this->title = _("RECEIPT");
+                       $this->formData['document_name'] =_("Receipt No.");
+                       $Addr1['title'] = _("With thanks from");
+                       $aux_info = array(
+                               _("Customer's Reference") => $this->formData["debtor_ref"],
+                               _("Type") =>$systypes_array[$this->formData["type"]],
+                               _("Your VAT no.") => $this->formData['tax_id'],
+                               _("Our Order No") => $this->formData['order_'],
+                               _("Due Date") => sql2date($this->formData['tran_date']),
+                       );
+                       $this->headers = array(_("Trans Type"), _("#"), _("Date"), _("Due Date"), _("Total Amount"), _("Left to Allocate"), _("This Allocation"));
+                       break;
+
+               case ST_WORKORDER:
+                       global $wo_types_array;
+
+                       $this->title = _("WORK ORDER");
+                       $this->formData['document_name'] =_("Work Order No.");
+                       $this->formData['document_date'] = $this->formData['date_'];
+                       $this->formData['document_number'] = $this->formData['id'];
+                       $Addr1['name'] = $this->formData['location_name'];
+                       $Addr1['address'] = $this->formData['delivery_address'];
+                       $aux_info = array(
+                               _("Reference") => $this->formData['wo_ref'],
+                               _("Type") => $wo_types_array[$this->formData["type"]],
+                               _("Manufactured Item") => $this->formData["StockItemName"],
+                               _("Into Location") => $this->formData["location_name"],
+                               _("Quantity") => $this->formData["units_issued"],
+                       );
+                       $Payment_Terms = _("Required By").": ".sql2date($this->formData["required_by"]);
+                       $this->headers = array(_("Item Code"), _("Item Description"),
+                               _("From Location"), _("Work Centre"),   _("Unit Quantity"), _("Total Quantity"), _("Units Issued"));
+                       unset($Footer[0]);
+                       break;
+
+
+               case ST_STATEMENT:
+                       $this->formData['document_name'] = '';
+                       $this->formData['domicile'] = $this->company['domicile'];
+                       $Payment_Terms = '';
+                       $this->title = _("STATEMENT");
+                       $aux_info = array(
+                               _("Customer's Reference") => '',
+                               _("Sales Person") => '',
+                               _("Your VAT no.") => $this->formData['tax_id'],
+                               _("Our Order No") => '',
+                               _("Delivery Date") => '',
+                       );
+                       $this->headers = array(_("Date"), _("Trans Type"), _("#"), _("Issue Date"), _("Charges"),
+                               _("Credits"), _("Balance"));
+       }
+
+       // default values
+       if (!isset($this->formData['document_date']))
+               $this->formData['document_date'] = $this->formData['tran_date'];
+
+       if (!isset($this->formData['document_number']))
+               $this->formData['document_number'] = $print_invoice_no == 0 && isset($this->formData['reference'])
+                       ? $this->formData['reference'] : @$this->formData['trans_no'];
+
+       if (!isset($Payment_Terms))
+       {
+               $id = $this->formData['payment_terms'];
+               $sql = "SELECT terms FROM ".TB_PREF."payment_terms WHERE terms_indicator=".db_escape($id);
+               $result = db_query($sql,"could not get paymentterms");
+               $row = db_fetch($result);
+               $Payment_Terms = _("Payment Terms") . ': ' . $row["terms"];
+       }
+
+       // footer generic content
+       if (@$this->formData['bank_name'])
+               $Footer[] = _("Bank"). ": ".$this->formData['bank_name']. ", " . _("Bank Account") . ": " . $this->formData['bank_account_number'];
+
+       if (@$this->formData['payment_service'])        //payment link
+       {
+               $amt = number_format($this->formData["ov_freight"] + $this->formData["ov_gst"] + $this->formData["ov_amount"], user_price_dec());
+               $service = $this->formData['payment_service'];
+               $url = payment_link($service, array(
+                       'company_email' => $this->company['email'],
+                       'amount' => $amt,
+                       'currency' => $this->formData['curr_code'],
+                       'comment' => $this->title . " " . $this->formData['reference']
+                       ));
+               $Footer[_("You can pay through"). " $service: "] = "$url";
+       }
+
+       if ($this->formData['doctype'] == ST_CUSTPAYMENT)
+               $Footer[] = _("* Subject to Realisation of the Cheque.");
+
+       if ($this->params['comments'] != '')
+               $Footer[] = $this->params['comments'];
+
+       if (($this->formData['doctype'] == ST_SALESINVOICE || $this->formData['doctype'] == ST_STATEMENT) && $this->company['legal_text'] != "") 
+       {
+               foreach(explode("\n", $this->company['legal_text']) as $line)
+                       $Footer[] = $line;
+       }
+
+       $this->formData['recipient_name'] = $Addr1['name'];
+?>
diff --git a/index.php b/index.php
new file mode 100644 (file)
index 0000000..763940a
--- /dev/null
+++ b/index.php
@@ -0,0 +1,3 @@
+<?php
+header("Location: ../index.php");
+?>
diff --git a/reporting/index.php b/reporting/index.php
new file mode 100644 (file)
index 0000000..763940a
--- /dev/null
@@ -0,0 +1,3 @@
+<?php
+header("Location: ../index.php");
+?>
diff --git a/reporting/rep_email_customers.php b/reporting/rep_email_customers.php
new file mode 100644 (file)
index 0000000..1e9716a
--- /dev/null
@@ -0,0 +1,33 @@
+<?php
+/**********************************************************************
+    Copyright (C) FrontAccounting, LLC.
+       Released under the terms of the GNU General Public License, GPL, 
+       as published by the Free Software Foundation, either version 3 
+       of the License, or (at your option) any later version.
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+    See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
+***********************************************************************/
+$page_security = 'SA_EMAIL_CUSTOMER_EMAIL';
+// ----------------------------------------------------------------
+// $ Revision: 2.0 $
+// Creator:    Maxime Bourget
+// date_ :     2014-10-19
+// Title:      Email Customer
+// ----------------------------------------------------------------
+$path_to_root="..";
+
+include_once($path_to_root . "/includes/session.inc");
+include_once($path_to_root . "/includes/date_functions.inc");
+include_once($path_to_root . "/includes/data_checks.inc");
+include_once($path_to_root . "/sales/includes/sales_db.inc");
+
+include_once(dirname(__FILE__)."/../includes/customer_emailer.inc");
+
+add_access_extensions();
+//----------------------------------------------------------------------------------------------------
+
+$reporter = new CustomerEmailer();
+
+$reporter->printReports();
diff --git a/reporting/reports_custom.php b/reporting/reports_custom.php
new file mode 100644 (file)
index 0000000..7b3a551
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+
+global $reports;
+
+$reports->addReport(RC_CUSTOMER, "_email_customers", _('Email Customers'),
+       array(  _('Customer') => 'CUSTOMERS_NO_FILTER',
+                       _('Email Subject') => 'TEXT',
+                       _('Email Body') => 'TEXTBOX',
+                       _('email Customers') => 'YES_NO',
+                       _('Areas') => 'AREAS',
+                       _('Filter Areas') => 'YES_NO',
+                       _('Price List') => 'SALESTYPES',
+                       _('Filter Price List') => 'YES_NO',
+                       _('Salesmen') => 'SALESMEN',
+));
+
+