riainvoice/application/modules/invoice_groups/models/Mdl_invoice_groups.php
gandhimathi Bharathirajan c940cb1a2c all files
2017-09-11 14:38:03 +05:30

130 lines
3.7 KiB
PHP

<?php
if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
* InvoicePlane
*
* @author InvoicePlane Developers & Contributors
* @copyright Copyright (c) 2012 - 2017 InvoicePlane.com
* @license https://invoiceplane.com/license.txt
* @link https://invoiceplane.com
*/
/**
* Class Mdl_Invoice_Groups
*/
class Mdl_Invoice_Groups extends Response_Model
{
public $table = 'ip_invoice_groups';
public $primary_key = 'ip_invoice_groups.invoice_group_id';
public function default_select()
{
$this->db->select('SQL_CALC_FOUND_ROWS *', false);
}
public function default_order_by()
{
$this->db->order_by('ip_invoice_groups.invoice_group_name');
}
/**
* @return array
*/
public function validation_rules()
{
return array(
'invoice_group_name' => array(
'field' => 'invoice_group_name',
'label' => trans('name'),
'rules' => 'required'
),
'invoice_group_identifier_format' => array(
'field' => 'invoice_group_identifier_format',
'label' => trans('identifier_format'),
'rules' => 'required'
),
'invoice_group_next_id' => array(
'field' => 'invoice_group_next_id',
'label' => trans('next_id'),
'rules' => 'required'
),
'invoice_group_left_pad' => array(
'field' => 'invoice_group_left_pad',
'label' => trans('left_pad'),
'rules' => 'required'
)
);
}
/**
* @param $invoice_group_id
* @param bool $set_next
* @return mixed
*/
public function generate_invoice_number($invoice_group_id, $set_next = true)
{
$invoice_group = $this->get_by_id($invoice_group_id);
$invoice_identifier = $this->parse_identifier_format(
$invoice_group->invoice_group_identifier_format,
$invoice_group->invoice_group_next_id,
$invoice_group->invoice_group_left_pad
);
if ($set_next) {
$this->set_next_invoice_number($invoice_group_id);
}
return $invoice_identifier;
}
/**
* @param $identifier_format
* @param $next_id
* @param $left_pad
* @return mixed
*/
private function parse_identifier_format($identifier_format, $next_id, $left_pad)
{
if (preg_match_all('/{{{([^{|}]*)}}}/', $identifier_format, $template_vars)) {
foreach ($template_vars[1] as $var) {
switch ($var) {
case 'year':
$replace = date('Y');
break;
case 'yy':
$replace = date('y');
break;
case 'month':
$replace = date('m');
break;
case 'day':
$replace = date('d');
break;
case 'id':
$replace = str_pad($next_id, $left_pad, '0', STR_PAD_LEFT);
break;
default:
$replace = '';
}
$identifier_format = str_replace('{{{' . $var . '}}}', $replace, $identifier_format);
}
}
return $identifier_format;
}
/**
* @param $invoice_group_id
*/
public function set_next_invoice_number($invoice_group_id)
{
$this->db->where($this->primary_key, $invoice_group_id);
$this->db->set('invoice_group_next_id', 'invoice_group_next_id+1', false);
$this->db->update($this->table);
}
}