--- /dev/null
+<?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;
+ }
+
+
+
+};
--- /dev/null
+<?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'];
+?>