Skip to content
Snippets Groups Projects
Commit 428013d6 authored by Uma's avatar Uma
Browse files

Merge branch 'add_next_ivnoice_date_field_in_sales_orders' into 'master'

Fix #1287 Create Field *Next Invoice Date*

Create Field *Next Invoice Date* in SalesOrders from existing column in table vtiger_invoice_recurring_info.

See merge request !627
parents a6992079 77bc6759
No related branches found
No related tags found
No related merge requests found
......@@ -231,6 +231,7 @@ if (defined('VTIGER_UPGRADE')) {
$params = array('69', 'image');
$db->pquery($sql, $params);
//add options to payment_duration field in SalesOrder module
$moduleInstance = Vtiger_Module_Model::getInstance('SalesOrder');
$fieldInstance = Vtiger_Field_Model::getInstance('payment_duration', $moduleInstance);
$fieldInstance->setPicklistValues(array('Net 01 day', 'Net 05 days', 'Net 07 days', 'Net 10 days', 'Net 15 days'));
......@@ -243,4 +244,18 @@ if (defined('VTIGER_UPGRADE')) {
}
$query .= ' ELSE sortorderid END';
$db->pquery($query, array());
//Create new read-only field to display the date of the next invoice creation in recurring sales orders.
$field = new Vtiger_Field();
$field->name = 'last_recurring_date';
$field->label= 'Next Invoice Date';
$field->column = 'last_recurring_date';
$field->table = 'vtiger_invoice_recurring_info';
$field->displaytype = 2;
$field->uitype= 5;
$field->columntype = "date";
$field->typeofdata = 'D~O';
$block = Vtiger_Block::getInstance('Recurring Invoice Information', $moduleInstance);
$block->addField($field);
}
\ No newline at end of file
......@@ -12,39 +12,66 @@
require_once('include/utils/utils.php');
class RecurringInvoiceHandler extends VTEventHandler {
public function handleEvent($handlerType, $entityData){
global $log, $adb;
$moduleName = $entityData->getModuleName();
if ($moduleName == 'SalesOrder') {
$soId = $entityData->getId();
$data = $entityData->getData();
if($data['enable_recurring'] == 'on' || $data['enable_recurring'] == 1) {
$frequency = $data['recurring_frequency'];
$startPeriod = getValidDBInsertDateValue($data['start_period']);
$endPeriod = getValidDBInsertDateValue($data['end_period']);
$paymentDuration = $data['payment_duration'];
$invoiceStatus = $data['invoicestatus'];
if (isset($frequency) && $frequency != '' && $frequency != '--None--') {
$check_query = "SELECT * FROM vtiger_invoice_recurring_info WHERE salesorderid=?";
$check_res = $adb->pquery($check_query, array($soId));
$noofrows = $adb->num_rows($check_res);
if ($noofrows > 0) {
$row = $adb->query_result_rowdata($check_res, 0);
$query = "UPDATE vtiger_invoice_recurring_info SET recurring_frequency=?, start_period=?, end_period=?, payment_duration=?, invoice_status=? WHERE salesorderid=?";
$params = array($frequency,$startPeriod,$endPeriod,$paymentDuration,$invoiceStatus,$soId);
} else {
$query = "INSERT INTO vtiger_invoice_recurring_info VALUES (?,?,?,?,?,?,?)";
$params = array($soId,$frequency,$startPeriod,$endPeriod,$startPeriod,$paymentDuration,$invoiceStatus);
}
$adb->pquery($query, $params);
}
} else {
$query = "DELETE FROM vtiger_invoice_recurring_info WHERE salesorderid = ?";
$adb->pquery($query, array($soId));
private $entityData;
public function handleEvent($handlerType, $entityData) {
$this->entityData = $entityData;
if ($this->isSalesOrderModule()) {
$this->handleRecurringInvoiceGeneration();
}
}
private function handleRecurringInvoiceGeneration() {
if ($this->isRecurringInvoiceEnabled()) {
if (empty($this->getNextInvoiceDate()) || $this->isStartDateAfterNextInvoiceDate()) {
$this->setNextInvoiceDateEqualsToStartDate();
}
} else {
$this->deleteRecurringInvoiceData();
}
}
}
?>
\ No newline at end of file
private function isStartDateAfterNextInvoiceDate()
{
$startPeriod = new DateTime($this->getStartDate());
$nextInvoiceDate = new DateTime($this->getNextInvoiceDate());
return $startPeriod > $nextInvoiceDate;
}
private function isSalesOrderModule() {
return $this->entityData->getModuleName() == 'SalesOrder';
}
private function getStartDate()
{
$data = $this->entityData->getData();
return DateTimeField::convertToDBFormat($data['start_period']);
}
private function getNextInvoiceDate() {
$data = $this->entityData->getData();
return $data['last_recurring_date'];
}
private function isRecurringInvoiceEnabled() {
$data = $this->entityData->getData();
return !empty($data['enable_recurring']);
}
private function setNextInvoiceDateEqualsToStartDate()
{
$db = PearDatabase::getInstance();
$query = "UPDATE vtiger_invoice_recurring_info SET last_recurring_date = start_period WHERE salesorderid = ?";
$db->pquery($query, [$this->entityData->getId()]);
}
private function deleteRecurringInvoiceData()
{
$db = PearDatabase::getInstance();
$query = "DELETE FROM vtiger_invoice_recurring_info WHERE salesorderid = ?";
$db->pquery($query, [$this->entityData->getId()]);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment