From f6300cf24b55c8253bcbfb9ff9c64078770c9261 Mon Sep 17 00:00:00 2001 From: Maxim Bourget Date: Tue, 4 Nov 2014 09:38:19 +0100 Subject: [PATCH 1/1] Initail commit --- README.md | 6 + hooks.php | 31 ++++ includes/customer_emailer.inc | 142 +++++++++++++++ includes/doctext.inc | 287 ++++++++++++++++++++++++++++++ index.php | 3 + reporting/index.php | 3 + reporting/rep_email_customers.php | 33 ++++ reporting/reports_custom.php | 17 ++ 8 files changed, 522 insertions(+) create mode 100644 README.md create mode 100644 hooks.php create mode 100644 includes/customer_emailer.inc create mode 100644 includes/doctext.inc create mode 100644 index.php create mode 100644 reporting/index.php create mode 100644 reporting/rep_email_customers.php create mode 100644 reporting/reports_custom.php diff --git a/README.md b/README.md new file mode 100644 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 index 0000000..b464b88 --- /dev/null +++ b/hooks.php @@ -0,0 +1,31 @@ +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 index 0000000..983bdaf --- /dev/null +++ b/includes/doctext.inc @@ -0,0 +1,287 @@ +. +***********************************************************************/ +/***** +* +* 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 index 0000000..763940a --- /dev/null +++ b/index.php @@ -0,0 +1,3 @@ + diff --git a/reporting/index.php b/reporting/index.php new file mode 100644 index 0000000..763940a --- /dev/null +++ b/reporting/index.php @@ -0,0 +1,3 @@ + diff --git a/reporting/rep_email_customers.php b/reporting/rep_email_customers.php new file mode 100644 index 0000000..1e9716a --- /dev/null +++ b/reporting/rep_email_customers.php @@ -0,0 +1,33 @@ +. +***********************************************************************/ +$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 index 0000000..7b3a551 --- /dev/null +++ b/reporting/reports_custom.php @@ -0,0 +1,17 @@ +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', +)); + + -- 2.30.2