mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-09-08 11:34:04 -04:00
Add Expenses support (#1235)
This commit is contained in:
1 parent
b5b2d4f62f
commit
2cde603949
36 files changed
+1648
-70
No files matched your search
@@ -132,4 +132,4 @@ $autoload['language'] = array();
|
||||
|
|
||||
| $autoload['model'] = array('first_model' => 'first');
|
||||
*/
|
||||
$autoload['model'] = array('Appconfig', 'Person', 'Customer', 'Employee', 'Module', 'Item', 'Item_taxes', 'Sale', 'Supplier', 'Inventory', 'Receiving', 'Giftcard', 'Item_kit', 'Item_kit_items', 'Stock_location', 'Item_quantity', 'Dinner_table', 'Customer_rewards', 'Rewards', 'Tax');
|
||||
$autoload['model'] = array('Appconfig', 'Person', 'Customer', 'Employee', 'Module', 'Item', 'Item_taxes', 'Sale', 'Supplier', 'Inventory', 'Receiving', 'Giftcard', 'Item_kit', 'Item_kit_items', 'Stock_location', 'Item_quantity', 'Dinner_table', 'Customer_rewards', 'Rewards', 'Tax', 'Expense_category', 'Expense' );
|
||||
@@ -69,7 +69,7 @@ $config['migration_auto_latest'] = FALSE;
|
||||
| be upgraded / downgraded to.
|
||||
|
|
||||
*/
|
||||
$config['migration_version'] = 20170924150000;
|
||||
$config['migration_version'] = 20171126100000;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
@@ -53,13 +53,19 @@ defined('BASEPATH') OR exit('No direct script access allowed');
|
||||
$route['default_controller'] = 'login';
|
||||
$route['no_access/([^/]+)'] = 'no_access/index/$1';
|
||||
$route['no_access/([^/]+)/([^/]+)'] = 'no_access/index/$1/$2';
|
||||
|
||||
$route['sales/index/([^/]+)'] = 'sales/manage/$1';
|
||||
$route['sales/index/([^/]+)/([^/]+)'] = 'sales/manage/$1/$2';
|
||||
$route['sales/index/([^/]+)/([^/]+)/([^/]+)'] = 'sales/manage/$1/$2/$3';
|
||||
|
||||
$route['reports/(summary_:any)/([^/]+)/([^/]+)'] = 'reports/$1/$2/$3/$4';
|
||||
$route['reports/summary_expenses_categories'] = 'reports/date_input_only';
|
||||
$route['reports/summary_:any'] = 'reports/date_input';
|
||||
|
||||
$route['reports/(graphical_:any)/([^/]+)/([^/]+)'] = 'reports/$1/$2/$3/$4';
|
||||
$route['reports/graphical_summary_expenses_categories'] = 'reports/date_input_only';
|
||||
$route['reports/graphical_:any'] = 'reports/date_input';
|
||||
|
||||
$route['reports/(inventory_:any)/([^/]+)'] = 'reports/$1/$2';
|
||||
$route['reports/inventory_summary'] = 'reports/inventory_summary_input';
|
||||
$route['reports/(inventory_summary)/([^/]+)/([^/]+)/([^/]+)'] = 'reports/$1/$2';
|
||||
@@ -68,10 +74,11 @@ $route['reports/(detailed_sales)/([^/]+)/([^/]+)/([^/]+)'] = 'reports/$1/$2/$3$/
|
||||
$route['reports/detailed_sales'] = 'reports/date_input_sales';
|
||||
$route['reports/(detailed_receivings)/([^/]+)/([^/]+)/([^/]+)'] = 'reports/$1/$2/$3/$4';
|
||||
$route['reports/detailed_receivings'] = 'reports/date_input_recv';
|
||||
|
||||
$route['reports/(specific_:any)/([^/]+)/([^/]+)/([^/]+)'] = 'reports/$1/$2/$3/$4';
|
||||
$route['reports/specific_customer'] = 'reports/specific_customer_input';
|
||||
$route['reports/specific_employee'] = 'reports/specific_employee_input';
|
||||
$route['reports/specific_discount'] = 'reports/specific_discount_input';
|
||||
|
||||
$route['404_override'] = '';
|
||||
$route['translate_uri_dashes'] = FALSE;
|
||||
$route['translate_uri_dashes'] = FALSE;
|
||||
@@ -0,0 +1,173 @@
|
||||
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once("Secure_Controller.php");
|
||||
|
||||
class Expenses extends Secure_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('expenses');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$data['table_headers'] = $this->xss_clean(get_expenses_manage_table_headers());
|
||||
|
||||
// filters that will be loaded in the multiselect dropdown
|
||||
$data['filters'] = array('only_cash' => $this->lang->line('expenses_cash_filter'),
|
||||
'only_due' => $this->lang->line('expenses_due_filter'),
|
||||
'only_check' => $this->lang->line('expenses_check_filter'),
|
||||
'only_credit' => $this->lang->line('expenses_credit_filter'),
|
||||
'only_debit' => $this->lang->line('expenses_debit_filter'),
|
||||
'is_deleted' => $this->lang->line('expenses_is_deleted'));
|
||||
|
||||
$this->load->view('expenses/manage', $data);
|
||||
}
|
||||
|
||||
public function search()
|
||||
{
|
||||
$payments = 0;
|
||||
$search = $this->input->get('search');
|
||||
$limit = $this->input->get('limit');
|
||||
$offset = $this->input->get('offset');
|
||||
$sort = $this->input->get('sort');
|
||||
$order = $this->input->get('order');
|
||||
$filters = array(
|
||||
'start_date' => $this->input->get('start_date'),
|
||||
'end_date' => $this->input->get('end_date'),
|
||||
'only_cash' => FALSE,
|
||||
'only_due' => FALSE,
|
||||
'only_check' => FALSE,
|
||||
'only_credit' => FALSE,
|
||||
'only_debit' => FALSE,
|
||||
'is_deleted' => FALSE);
|
||||
|
||||
// check if any filter is set in the multiselect dropdown
|
||||
$filledup = array_fill_keys($this->input->get('filters'), TRUE);
|
||||
$filters = array_merge($filters, $filledup);
|
||||
$expenses = $this->Expense->search($search, $filters, $limit, $offset, $sort, $order);
|
||||
$total_rows = $this->Expense->get_found_rows($search, $filters);
|
||||
$payments = $this->Expense->get_payments_summary($search, $filters);
|
||||
$payment_summary = get_expenses_manage_payments_summary($payments, $expenses);
|
||||
$data_rows = array();
|
||||
foreach($expenses->result() as $expense)
|
||||
{
|
||||
$data_rows[] = $this->xss_clean(get_expenses_data_row($expense));
|
||||
}
|
||||
|
||||
if($total_rows > 0)
|
||||
{
|
||||
$data_rows[] = $this->xss_clean(get_expenses_data_last_row($expenses));
|
||||
}
|
||||
|
||||
echo json_encode(array('total' => $total_rows, 'rows' => $data_rows, 'payment_summary' => $payment_summary));
|
||||
}
|
||||
|
||||
public function view($expense_id = -1)
|
||||
{
|
||||
$data = array();
|
||||
|
||||
$data['employees'] = array();
|
||||
foreach($this->Employee->get_all()->result() as $employee)
|
||||
{
|
||||
foreach(get_object_vars($employee) as $property => $value)
|
||||
{
|
||||
$employee->$property = $this->xss_clean($value);
|
||||
}
|
||||
|
||||
$data['employees'][$employee->person_id] = $employee->first_name . ' ' . $employee->last_name;
|
||||
}
|
||||
|
||||
$data['expenses_info'] = $this->Expense->get_info($expense_id);
|
||||
|
||||
$data['expense_categories'] = array();
|
||||
foreach($this->Expense_category->get_all(0, 0, TRUE)->result_array() as $row)
|
||||
{
|
||||
$expense_categories[$row['expense_category_id']] = $row['category_name'];
|
||||
}
|
||||
$data['expense_categories'] = $expense_categories;
|
||||
|
||||
$expense_id = $data['expenses_info']->expense_id;
|
||||
|
||||
if(empty($expense_id))
|
||||
{
|
||||
$data['expenses_info']->date = date('Y-m-d H:i:s');
|
||||
$data['expenses_info']->employee_id = $this->Employee->get_logged_in_employee_info()->person_id;
|
||||
}
|
||||
|
||||
$data['payments'] = array();
|
||||
foreach($this->Expense->get_expense_payment($expense_id)->result() as $payment)
|
||||
{
|
||||
foreach(get_object_vars($payment) as $property => $value)
|
||||
{
|
||||
$payment->$property = $this->xss_clean($value);
|
||||
}
|
||||
|
||||
$data['payments'][] = $payment;
|
||||
}
|
||||
|
||||
// don't allow gift card to be a payment option in a sale transaction edit because it's a complex change
|
||||
$data['payment_options'] = $this->xss_clean($this->Expense->get_payment_options(FALSE));
|
||||
|
||||
$this->load->view("expenses/form", $data);
|
||||
}
|
||||
|
||||
public function get_row($row_id)
|
||||
{
|
||||
$expense_info = $this->Expense->get_info($row_id);
|
||||
$data_row = $this->xss_clean(get_expenses_data_row($expense_info));
|
||||
|
||||
echo json_encode($data_row);
|
||||
}
|
||||
|
||||
public function save($expense_id = -1)
|
||||
{
|
||||
$newdate = $this->input->post('date');
|
||||
|
||||
$date_formatter = date_create_from_format($this->config->item('dateformat') . ' ' . $this->config->item('timeformat'), $newdate);
|
||||
|
||||
$expense_data = array(
|
||||
'date' => $date_formatter->format('Y-m-d H:i:s'),
|
||||
'amount' => $this->input->post('amount'),
|
||||
'payment_type' => $this->input->post('payment_type'),
|
||||
'expense_category_id' => $this->input->post('expense_category_id'),
|
||||
'description' => $this->input->post('description'),
|
||||
'employee_id' => $this->input->post('employee_id'),
|
||||
'deleted' => $this->input->post('deleted') != NULL
|
||||
);
|
||||
|
||||
if($this->Expense->save($expense_data, $expense_id))
|
||||
{
|
||||
$expense_data = $this->xss_clean($expense_data);
|
||||
|
||||
//New expense_id
|
||||
if($expense_id == -1)
|
||||
{
|
||||
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('expenses_successful_adding'), 'id' => $expense_data['expense_id']));
|
||||
}
|
||||
else // Existing Expense
|
||||
{
|
||||
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('expenses_successful_updating'), 'id' => $expense_id));
|
||||
}
|
||||
}
|
||||
else//failure
|
||||
{
|
||||
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('expenses_error_adding_updating'), 'id' => -1));
|
||||
}
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$expenses_to_delete = $this->input->post('ids');
|
||||
|
||||
if($this->Expense->delete_list($expenses_to_delete))
|
||||
{
|
||||
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('expenses_successful_deleted') . ' ' . count($expenses_to_delete) . ' ' . $this->lang->line('expenses_one_or_multiple'), 'ids' => $expenses_to_delete));
|
||||
}
|
||||
else
|
||||
{
|
||||
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('expenses_cannot_be_deleted'), 'ids' => $expenses_to_delete));
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,97 @@
|
||||
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once("Secure_Controller.php");
|
||||
|
||||
class Expenses_categories extends Secure_Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct('expenses_categories');
|
||||
}
|
||||
|
||||
public function index()
|
||||
{
|
||||
$data['table_headers'] = $this->xss_clean(get_expense_category_manage_table_headers());
|
||||
|
||||
$this->load->view('expenses_categories/manage', $data);
|
||||
}
|
||||
|
||||
/*
|
||||
Returns expense_category_manage table data rows. This will be called with AJAX.
|
||||
*/
|
||||
public function search()
|
||||
{
|
||||
$search = $this->input->get('search');
|
||||
$limit = $this->input->get('limit');
|
||||
$offset = $this->input->get('offset');
|
||||
$sort = $this->input->get('sort');
|
||||
$order = $this->input->get('order');
|
||||
|
||||
$expense_categories = $this->Expense_category->search($search, $limit, $offset, $sort, $order);
|
||||
$total_rows = $this->Expense_category->get_found_rows($search);
|
||||
|
||||
$data_rows = array();
|
||||
foreach($expense_categories->result() as $expense_category)
|
||||
{
|
||||
$data_rows[] = $this->xss_clean(get_expense_category_data_row($expense_category));
|
||||
}
|
||||
|
||||
echo json_encode(array('total' => $total_rows, 'rows' => $data_rows));
|
||||
}
|
||||
|
||||
public function get_row($row_id)
|
||||
{
|
||||
$data_row = $this->xss_clean(get_expense_category_data_row($this->Expense_category->get_info($row_id)));
|
||||
|
||||
echo json_encode($data_row);
|
||||
}
|
||||
|
||||
public function view($expense_category_id = -1)
|
||||
{
|
||||
$data['category_info'] = $this->Expense_category->get_info($expense_category_id);
|
||||
|
||||
$this->load->view("expenses_categories/form", $data);
|
||||
}
|
||||
|
||||
public function save($expense_category_id = -1)
|
||||
{
|
||||
$expense_category_data = array(
|
||||
'category_name' => $this->input->post('category_name'),
|
||||
'category_description' => $this->input->post('category_description')
|
||||
);
|
||||
|
||||
if($this->Expense_category->save($expense_category_data, $expense_category_id))
|
||||
{
|
||||
$expense_category_data = $this->xss_clean($expense_category_data);
|
||||
|
||||
// New expense_category_id
|
||||
if($expense_category_id == -1)
|
||||
{
|
||||
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('expenses_categories_successful_adding'), 'id' => $expense_category_data['expense_category_id']));
|
||||
}
|
||||
else // Existing Expense Category
|
||||
{
|
||||
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('expenses_categories_successful_updating'), 'id' => $expense_category_id));
|
||||
}
|
||||
}
|
||||
else//failure
|
||||
{
|
||||
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('expenses_categories_error_adding_updating') . ' ' . $expense_category_data['category_name'], 'id' => -1));
|
||||
}
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$expense_category_to_delete = $this->input->post('ids');
|
||||
|
||||
if ($this->Expense_category->delete_list($expense_category_to_delete))
|
||||
{
|
||||
echo json_encode(array('success' => TRUE, 'message' => $this->lang->line('expenses_categories_successful_deleted') . ' ' . count($expense_category_to_delete) . ' ' . $this->lang->line('expenses_categories_one_or_multiple')));
|
||||
}
|
||||
else
|
||||
{
|
||||
echo json_encode(array('success' => FALSE, 'message' => $this->lang->line('expenses_categories_cannot_be_deleted')));
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -29,7 +29,7 @@ class Reports extends Secure_Controller
|
||||
$this->load->helper('report');
|
||||
}
|
||||
|
||||
//Initial report listing screen
|
||||
//Initial Report listing screen
|
||||
public function index()
|
||||
{
|
||||
$data['grants'] = $this->xss_clean($this->Employee->get_employee_grants($this->session->userdata('person_id')));
|
||||
@@ -73,7 +73,7 @@ class Reports extends Secure_Controller
|
||||
$this->load->view('reports/tabular', $data);
|
||||
}
|
||||
|
||||
//Summary categories report
|
||||
//Summary Categories report
|
||||
public function summary_categories($start_date, $end_date, $sale_type, $location_id = 'all')
|
||||
{
|
||||
$inputs = array('start_date' => $start_date, 'end_date' => $end_date, 'sale_type' => $sale_type, 'location_id' => $location_id);
|
||||
@@ -108,8 +108,40 @@ class Reports extends Secure_Controller
|
||||
|
||||
$this->load->view('reports/tabular', $data);
|
||||
}
|
||||
|
||||
//Summary Expenses by Categories report
|
||||
public function summary_expenses_categories($start_date, $end_date, $sale_type)
|
||||
{
|
||||
$inputs = array('start_date' => $start_date, 'end_date' => $end_date, 'sale_type' => $sale_type);
|
||||
|
||||
//Summary customers report
|
||||
$this->load->model('reports/Summary_expenses_categories');
|
||||
$model = $this->Summary_expenses_categories;
|
||||
|
||||
$report_data = $model->getData($inputs);
|
||||
$summary = $this->xss_clean($model->getSummaryData($inputs));
|
||||
|
||||
$tabular_data = array();
|
||||
foreach($report_data as $row)
|
||||
{
|
||||
$tabular_data[] = $this->xss_clean(array(
|
||||
'category_name' => $row['category_name'],
|
||||
'count' => $row['count'],
|
||||
'total_amount' => to_currency($row['total_amount'])
|
||||
));
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'title' => $this->lang->line('reports_expenses_categories_summary_report'),
|
||||
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
|
||||
'headers' => $this->xss_clean($model->getDataColumns()),
|
||||
'data' => $tabular_data,
|
||||
'summary_data' => $summary
|
||||
);
|
||||
|
||||
$this->load->view('reports/tabular', $data);
|
||||
}
|
||||
|
||||
//Summary Customers report
|
||||
public function summary_customers($start_date, $end_date, $sale_type, $location_id = 'all')
|
||||
{
|
||||
$inputs = array('start_date' => $start_date, 'end_date' => $end_date, 'sale_type' => $sale_type, 'location_id' => $location_id);
|
||||
@@ -145,7 +177,7 @@ class Reports extends Secure_Controller
|
||||
$this->load->view('reports/tabular', $data);
|
||||
}
|
||||
|
||||
//Summary suppliers report
|
||||
//Summary Suppliers report
|
||||
public function summary_suppliers($start_date, $end_date, $sale_type, $location_id = 'all')
|
||||
{
|
||||
$inputs = array('start_date' => $start_date, 'end_date' => $end_date, 'sale_type' => $sale_type, 'location_id' => $location_id);
|
||||
@@ -181,7 +213,7 @@ class Reports extends Secure_Controller
|
||||
$this->load->view('reports/tabular', $data);
|
||||
}
|
||||
|
||||
//Summary items report
|
||||
//Summary Items report
|
||||
public function summary_items($start_date, $end_date, $sale_type, $location_id = 'all')
|
||||
{
|
||||
$inputs = array('start_date' => $start_date, 'end_date' => $end_date, 'sale_type' => $sale_type, 'location_id' => $location_id);
|
||||
@@ -217,7 +249,7 @@ class Reports extends Secure_Controller
|
||||
$this->load->view('reports/tabular', $data);
|
||||
}
|
||||
|
||||
//Summary employees report
|
||||
//Summary Employees report
|
||||
public function summary_employees($start_date, $end_date, $sale_type, $location_id = 'all')
|
||||
{
|
||||
$inputs = array('start_date' => $start_date, 'end_date' => $end_date, 'sale_type' => $sale_type, 'location_id' => $location_id);
|
||||
@@ -253,7 +285,7 @@ class Reports extends Secure_Controller
|
||||
$this->load->view('reports/tabular', $data);
|
||||
}
|
||||
|
||||
//Summary taxes report
|
||||
//Summary Taxes report
|
||||
public function summary_taxes($start_date, $end_date, $sale_type, $location_id = 'all')
|
||||
{
|
||||
$inputs = array('start_date' => $start_date, 'end_date' => $end_date, 'sale_type' => $sale_type, 'location_id' => $location_id);
|
||||
@@ -287,7 +319,7 @@ class Reports extends Secure_Controller
|
||||
$this->load->view('reports/tabular', $data);
|
||||
}
|
||||
|
||||
//Summary discounts report
|
||||
//Summary Discounts report
|
||||
public function summary_discounts($start_date, $end_date, $sale_type, $location_id = 'all')
|
||||
{
|
||||
$inputs = array('start_date' => $start_date, 'end_date' => $end_date, 'sale_type' => $sale_type, 'location_id' => $location_id);
|
||||
@@ -318,7 +350,7 @@ class Reports extends Secure_Controller
|
||||
$this->load->view('reports/tabular', $data);
|
||||
}
|
||||
|
||||
//Summary payments report
|
||||
//Summary Payments report
|
||||
public function summary_payments($start_date, $end_date, $sale_type, $location_id = 'all')
|
||||
{
|
||||
$inputs = array('start_date' => $start_date, 'end_date' => $end_date, 'sale_type' => $sale_type, 'location_id' => $location_id);
|
||||
@@ -363,6 +395,14 @@ class Reports extends Secure_Controller
|
||||
$this->load->view('reports/date_input', $data);
|
||||
}
|
||||
|
||||
//Input for reports that require only a date range. (see routes.php to see that all graphical summary reports route here)
|
||||
public function date_input_only()
|
||||
{
|
||||
$data = array();
|
||||
|
||||
$this->load->view('reports/date_input', $data);
|
||||
}
|
||||
|
||||
//Input for reports that require only a date range. (see routes.php to see that all graphical summary reports route here)
|
||||
public function date_input_sales()
|
||||
{
|
||||
@@ -387,6 +427,40 @@ class Reports extends Secure_Controller
|
||||
$this->load->view('reports/date_input', $data);
|
||||
}
|
||||
|
||||
//Graphical Expenses by Categories report
|
||||
public function graphical_summary_expenses_categories($start_date, $end_date, $sale_type)
|
||||
{
|
||||
$inputs = array('start_date' => $start_date, 'end_date' => $end_date, 'sale_type' => $sale_type);
|
||||
|
||||
$this->load->model('reports/Summary_expenses_categories');
|
||||
$model = $this->Summary_expenses_categories;
|
||||
|
||||
$report_data = $model->getData($inputs);
|
||||
$summary = $this->xss_clean($model->getSummaryData($inputs));
|
||||
|
||||
$labels = array();
|
||||
$series = array();
|
||||
foreach($report_data as $row)
|
||||
{
|
||||
$row = $this->xss_clean($row);
|
||||
|
||||
$labels[] = $row['category_name'];
|
||||
$series[] = array('meta' => $row['category_name'] . ' ' . round($row['total_amount'] / $summary['expenses_total_amount'] * 100, 2) . '%', 'value' => $row['total_amount']);
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'title' => $this->lang->line('reports_expenses_categories_summary_report'),
|
||||
'subtitle' => $this->_get_subtitle_report(array('start_date' => $start_date, 'end_date' => $end_date)),
|
||||
'chart_type' => 'reports/graphs/pie',
|
||||
'labels_1' => $labels,
|
||||
'series_data_1' => $series,
|
||||
'summary_data_1' => $summary,
|
||||
'show_currency' => TRUE
|
||||
);
|
||||
|
||||
$this->load->view('reports/graphical', $data);
|
||||
}
|
||||
|
||||
//Graphical summary sales report
|
||||
public function graphical_summary_sales($start_date, $end_date, $sale_type, $location_id = 'all')
|
||||
{
|
||||
@@ -882,7 +956,7 @@ class Reports extends Secure_Controller
|
||||
$data['specific_input_name'] = $this->lang->line('reports_discount');
|
||||
|
||||
$discounts = array();
|
||||
for ($i = 0; $i <= 100; $i += 10)
|
||||
for($i = 0; $i <= 100; $i += 10)
|
||||
{
|
||||
$discounts[$i] = $i . '%';
|
||||
}
|
||||
|
||||
@@ -580,8 +580,6 @@ class Sales extends Secure_Controller
|
||||
$override_invoice_number = $candidate_invoice_number;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1174,7 +1172,9 @@ class Sales extends Secure_Controller
|
||||
public function save($sale_id = -1)
|
||||
{
|
||||
$newdate = $this->input->post('date');
|
||||
|
||||
$date_formatter = date_create_from_format($this->config->item('dateformat') . ' ' . $this->config->item('timeformat'), $newdate);
|
||||
|
||||
$sale_data = array(
|
||||
'sale_time' => $date_formatter->format('Y-m-d H:i:s'),
|
||||
'customer_id' => $this->input->post('customer_id') != '' ? $this->input->post('customer_id') : NULL,
|
||||
|
||||
@@ -20,7 +20,9 @@ function get_sales_manage_table_headers()
|
||||
$headers[] = array('invoice' => ' ', 'sortable' => FALSE);
|
||||
}
|
||||
|
||||
return transform_headers(array_merge($headers, array(array('receipt' => ' ', 'sortable' => FALSE))));
|
||||
$headers[] = array('receipt' => ' ', 'sortable' => FALSE);
|
||||
|
||||
return transform_headers($headers);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -450,4 +452,112 @@ function get_item_kit_data_row($item_kit)
|
||||
array('class'=>'modal-dlg', 'data-btn-submit' => $CI->lang->line('common_submit'), 'title'=>$CI->lang->line($controller_name.'_update'))
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
function get_expense_category_manage_table_headers()
|
||||
{
|
||||
$CI =& get_instance();
|
||||
|
||||
$headers = array(
|
||||
array('expense_category_id' => $CI->lang->line('expenses_categories_category_id')),
|
||||
array('category_name' => $CI->lang->line('expenses_categories_name')),
|
||||
array('category_description' => $CI->lang->line('expenses_categories_description'))
|
||||
);
|
||||
|
||||
return transform_headers($headers);
|
||||
}
|
||||
|
||||
/*
|
||||
Gets the html data rows for the expenses categories.
|
||||
*/
|
||||
|
||||
function get_expense_category_data_row($expense_category)
|
||||
{
|
||||
$CI =& get_instance();
|
||||
$controller_name = strtolower(get_class($CI));
|
||||
|
||||
return array (
|
||||
'expense_category_id' => $expense_category->expense_category_id,
|
||||
'category_name' => $expense_category->category_name,
|
||||
'category_description' => $expense_category->category_description,
|
||||
'edit' => anchor($controller_name."/view/$expense_category->expense_category_id", '<span class="glyphicon glyphicon-edit"></span>',
|
||||
array('class'=>'modal-dlg', 'data-btn-submit' => $CI->lang->line('common_submit'), 'title'=>$CI->lang->line($controller_name.'_update'))
|
||||
));
|
||||
}
|
||||
|
||||
|
||||
function get_expenses_manage_table_headers()
|
||||
{
|
||||
$CI =& get_instance();
|
||||
$headers = array(
|
||||
array('expense_id' => $CI->lang->line('expenses_expense_id')),
|
||||
array('date' => $CI->lang->line('expenses_date')),
|
||||
array('amount' => $CI->lang->line('expenses_amount')),
|
||||
array('payment_type' => $CI->lang->line('expenses_payment')),
|
||||
array('category_name' => $CI->lang->line('expenses_categories_name')),
|
||||
array('description' => $CI->lang->line('expenses_description')),
|
||||
array('createdBy' => $CI->lang->line('expenses_employee'))
|
||||
);
|
||||
|
||||
return transform_headers($headers);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Gets the html data rows for the expenses.
|
||||
*/
|
||||
function get_expenses_data_row($expense)
|
||||
{
|
||||
$CI =& get_instance();
|
||||
$controller_name = strtolower(get_class($CI));
|
||||
return array (
|
||||
'expense_id' => $expense->expense_id,
|
||||
'date' => date($CI->config->item('dateformat') . ' ' . $CI->config->item('timeformat'), strtotime($expense->date)),
|
||||
'amount' => to_currency($expense->amount),
|
||||
'payment_type' => $expense->payment_type,
|
||||
'category_name' => $expense->category_name,
|
||||
'description' => $expense->description,
|
||||
'createdBy' => $expense->first_name.' '. $expense->last_name,
|
||||
'edit' => anchor($controller_name."/view/$expense->expense_id", '<span class="glyphicon glyphicon-edit"></span>',
|
||||
array('class'=>'modal-dlg', 'data-btn-submit' => $CI->lang->line('common_submit'), 'title'=>$CI->lang->line($controller_name.'_update'))
|
||||
));
|
||||
}
|
||||
|
||||
function get_expenses_data_last_row($expense)
|
||||
{
|
||||
$CI =& get_instance();
|
||||
$table_data_rows = '';
|
||||
$sum_amount_expense = 0;
|
||||
|
||||
foreach($expense->result() as $key=>$expense)
|
||||
{
|
||||
$sum_amount_expense += $expense->amount;
|
||||
}
|
||||
|
||||
return array(
|
||||
'expense_id' => '-',
|
||||
'date' => '<b>'.$CI->lang->line('sales_total').'</b>',
|
||||
'amount' => '<b>'. to_currency($sum_amount_expense).'</b>'
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Get the expenses payments summary
|
||||
*/
|
||||
function get_expenses_manage_payments_summary($payments, $expenses)
|
||||
{
|
||||
$CI =& get_instance();
|
||||
$table = '<div id="report_summary">';
|
||||
|
||||
foreach($payments as $key=>$payment)
|
||||
{
|
||||
$amount = $payment['amount'];
|
||||
$table .= '<div class="summary_row">' . $payment['payment_type'] . ': ' . to_currency($amount) . '</div>';
|
||||
}
|
||||
$table .= '</div>';
|
||||
|
||||
return $table;
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
$lang["expenses_categories_add_item"] = "Add Category";
|
||||
$lang["expenses_categories_cannot_be_deleted"] = "Could not delete Category Expense(s)";
|
||||
$lang["expenses_categories_confirm_delete"] = "Are you sure you want to delete the selected Expense Category?";
|
||||
$lang["expenses_categories_description"] = "Category Description";
|
||||
$lang["expenses_categories_error_adding_updating"] = "Error adding/updating Expense Category";
|
||||
$lang["expenses_categories_info"] = "Category Expense Info";
|
||||
$lang["expenses_categories_category_id"] = "Id";
|
||||
$lang["expenses_categories_name"] = "Category Name";
|
||||
$lang["expenses_categories_new"] = "New Category";
|
||||
$lang["expenses_categories_no_expenses_categories_to_display"] = "No Category to display";
|
||||
$lang["expenses_categories_none_selected"] = "You have not selected any Category Expense";
|
||||
$lang["expenses_categories_one_or_multiple"] = "Category Expense";
|
||||
$lang["expenses_categories_quantity"] = "Quantity";
|
||||
$lang["expenses_categories_successful_adding"] = "Expense Category add successful";
|
||||
$lang["expenses_categories_successful_deleted"] = "Expense Category delete successful";
|
||||
$lang["expenses_categories_successful_updating"] = "Expense Category update successful";
|
||||
$lang["expenses_categories_update"] = "Update Expense Category";
|
||||
$lang["category_name_required"] = "Expense Category name required";
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
$lang["expenses_add_item"] = "Add Expense";
|
||||
$lang["expenses_cannot_be_deleted"] = "Could not delete Category Expense(s)";
|
||||
$lang["expenses_confirm_delete"] = "Are you sure you want to delete the selected Expense?";
|
||||
$lang["expenses_description"] = "Description";
|
||||
$lang["expenses_error_adding_updating"] = "Error adding/updating Expense";
|
||||
$lang["expenses_info"] = "Expense Info";
|
||||
$lang["expenses_expense_id"] = "Id";
|
||||
$lang["expenses_expenses_employee"] = "Employee";
|
||||
$lang["expenses_date"] = "Date";
|
||||
$lang["expenses_amount"] = "Amount";
|
||||
$lang["expenses_categories_name"] = "Category";
|
||||
$lang["expenses_new"] = "New Expense";
|
||||
$lang["expenses_no_expenses_to_display"] = "There are no Expenses to display";
|
||||
$lang["expenses_none_selected"] = "You have not selected any Expense";
|
||||
$lang["expenses_one_or_multiple"] = "Expense(s)";
|
||||
$lang["expenses_successful_adding"] = "Expense add successful";
|
||||
$lang["expenses_successful_deleted"] = "Expense delete successful";
|
||||
$lang["expenses_successful_updating"] = "Expense update successful";
|
||||
$lang["expenses_update"] = "Update Expense";
|
||||
$lang["expenses_name_required"] = "Expense Name required";
|
||||
$lang["expenses_amount_required"] = "Expense Amount required";
|
||||
$lang["expenses_employee"] = "Created By";
|
||||
$lang["expenses_amount_number"] = "Amount must be a number";
|
||||
$lang["expenses_amount_required"] = "Amount is a required field";
|
||||
$lang["expenses_date_number"] = "date must be a number";
|
||||
$lang["expenses_date_required"] = "date is a required field";
|
||||
$lang["expenses_category_required"] = "category is a required field";
|
||||
$lang["expenses_by_category"] = "Category";
|
||||
$lang["expenses_payment"] = "Payment Type";
|
||||
$lang["expenses_debit"] = "Debit Card";
|
||||
$lang["expenses_debit_filter"] = "Debit Card";
|
||||
$lang["expenses_credit"] = "Credit Card";
|
||||
$lang["expenses_credit_filter"] = "Credit Card";
|
||||
$lang["expenses_cash"] = "Cash";
|
||||
$lang["expenses_cash_filter"] = "Cash";
|
||||
$lang["expenses_check"] = "Check";
|
||||
$lang["expenses_check_filter"] = "Check";
|
||||
$lang["expenses_due"] = "Due";
|
||||
$lang["expenses_due_filter"] = "Due";
|
||||
$lang["expenses_is_deleted"] = "Deleted";
|
||||
@@ -2,11 +2,15 @@
|
||||
|
||||
$lang["module_both"] = "Both";
|
||||
$lang["module_config"] = "Configuration";
|
||||
$lang["module_config_desc"] = "Change the OSPOS's Configuration";
|
||||
$lang["module_config_desc"] = "Change OSPOS's Configuration";
|
||||
$lang["module_customers"] = "Customers";
|
||||
$lang["module_customers_desc"] = "Add, Update, Delete, and Search Customers";
|
||||
$lang["module_employees"] = "Employees";
|
||||
$lang["module_employees_desc"] = "Add, Update, Delete, and Search Employees";
|
||||
$lang["module_expenses"] = "Expenses";
|
||||
$lang["module_expenses_desc"] = "Add, Update, Delete, and Search Expenses";
|
||||
$lang["module_expenses_categories"] = "Expenses Categories";
|
||||
$lang["module_expenses_categories_desc"] = "Add, Update, and Delete Expenses Categories";
|
||||
$lang["module_giftcards"] = "Gift Cards";
|
||||
$lang["module_giftcards_desc"] = "Add, Update, Delete and Search Gift Cards";
|
||||
$lang["module_home"] = "Home";
|
||||
|
||||
@@ -35,6 +35,11 @@ $lang["reports_earned"] = "Points Earned";
|
||||
$lang["reports_employee"] = "Employee";
|
||||
$lang["reports_employees"] = "Employees";
|
||||
$lang["reports_employees_summary_report"] = "Employees Summary Report";
|
||||
$lang["reports_expenses_categories"] = "Expenses";
|
||||
$lang["reports_expenses_categories_summary_report"] = "Expense Categories Summary Report";
|
||||
$lang["reports_expenses_category"] = "Category";
|
||||
$lang["reports_expenses_amount"] = "Amount";
|
||||
$lang["reports_expenses_total_amount"] = "Total Amount";
|
||||
$lang["reports_graphical_reports"] = "Graphical Reports";
|
||||
$lang["reports_inventory"] = "Inventory";
|
||||
$lang["reports_inventory_low"] = "Low Inventory";
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
$lang["suppliers_account_number"] = "Account #";
|
||||
$lang["suppliers_agency_name"] = "Agency Name";
|
||||
$lang["suppliers_cannot_be_deleted"] = "Could not delete the selected Supplier(s). One or more have Sales";
|
||||
$lang["suppliers_company_name"] = "Company Name is a required field";
|
||||
$lang["suppliers_company_name"] = "Company Name";
|
||||
$lang["suppliers_company_name_required"] = "Company Name is a required field";
|
||||
$lang["suppliers_confirm_delete"] = "Are you sure you want to delete the selected Supplier(s)?";
|
||||
$lang["suppliers_error_adding_updating"] = "Supplier update or add failed";
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
$lang["expenses_categories_add_item"] = "Add Category";
|
||||
$lang["expenses_categories_cannot_be_deleted"] = "Could not delete Category Expense(s)";
|
||||
$lang["expenses_categories_confirm_delete"] = "Are you sure you want to delete the selected Expense Category?";
|
||||
$lang["expenses_categories_description"] = "Category Description";
|
||||
$lang["expenses_categories_error_adding_updating"] = "Error adding/updating Expense Category";
|
||||
$lang["expenses_categories_info"] = "Category Expense Info";
|
||||
$lang["expenses_categories_category_id"] = "Id";
|
||||
$lang["expenses_categories_name"] = "Category Name";
|
||||
$lang["expenses_categories_new"] = "New Category";
|
||||
$lang["expenses_categories_no_expenses_categories_to_display"] = "No Category to display";
|
||||
$lang["expenses_categories_none_selected"] = "You have not selected any Category Expense";
|
||||
$lang["expenses_categories_one_or_multiple"] = "Category Expense";
|
||||
$lang["expenses_categories_quantity"] = "Quantity";
|
||||
$lang["expenses_categories_successful_adding"] = "Expense Category add successful";
|
||||
$lang["expenses_categories_successful_deleted"] = "Expense Category delete successful";
|
||||
$lang["expenses_categories_successful_updating"] = "Expense Category update successful";
|
||||
$lang["expenses_categories_update"] = "Update Category";
|
||||
$lang["category_name_required"] = "Expense Category name required";
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
$lang["expenses_add_item"] = "Add Expense";
|
||||
$lang["expenses_cannot_be_deleted"] = "Could not delete Category Expense(s)";
|
||||
$lang["expenses_confirm_delete"] = "Are you sure you want to delete the selected Expense?";
|
||||
$lang["expenses_description"] = "Description";
|
||||
$lang["expenses_error_adding_updating"] = "Error adding/updating Expense";
|
||||
$lang["expenses_info"] = "Expense Info";
|
||||
$lang["expenses_expense_id"] = "Id";
|
||||
$lang["expenses_expenses_employee"] = "Employee";
|
||||
$lang["expenses_date"] = "Date";
|
||||
$lang["expenses_amount"] = "Amount";
|
||||
$lang["expenses_categories_name"] = "Category";
|
||||
$lang["expenses_new"] = "New Expense";
|
||||
$lang["expenses_no_expenses_to_display"] = "There are no Expenses to display";
|
||||
$lang["expenses_none_selected"] = "You have not selected any Expense";
|
||||
$lang["expenses_one_or_multiple"] = "Expense(s)";
|
||||
$lang["expenses_successful_adding"] = "Expense add successful";
|
||||
$lang["expenses_successful_deleted"] = "Expense delete successful";
|
||||
$lang["expenses_successful_updating"] = "Expense update successful";
|
||||
$lang["expenses_update"] = "Update Expense";
|
||||
$lang["expenses_name_required"] = "Expense Name required";
|
||||
$lang["expenses_amount_required"] = "Expense Amount required";
|
||||
$lang["expenses_employee"] = "Created By";
|
||||
$lang["expenses_amount_number"] = "Amount must be a number";
|
||||
$lang["expenses_amount_required"] = "Amount is a required field";
|
||||
$lang["expenses_date_number"] = "date must be a number";
|
||||
$lang["expenses_date_required"] = "date is a required field";
|
||||
$lang["expenses_category_required"] = "category is a required field";
|
||||
$lang["expenses_by_category"] = "Category";
|
||||
$lang["expenses_payment"] = "Payment Type";
|
||||
$lang["expenses_debit"] = "Debit Card";
|
||||
$lang["expenses_debit_filter"] = "Debit Card";
|
||||
$lang["expenses_credit"] = "Credit Card";
|
||||
$lang["expenses_credit_filter"] = "Credit Card";
|
||||
$lang["expenses_cash"] = "Cash";
|
||||
$lang["expenses_cash_filter"] = "Cash";
|
||||
$lang["expenses_check"] = "Check";
|
||||
$lang["expenses_check_filter"] = "Check";
|
||||
$lang["expenses_due"] = "Due";
|
||||
$lang["expenses_due_filter"] = "Due";
|
||||
$lang["expenses_is_deleted"] = "Deleted";
|
||||
@@ -1,12 +1,16 @@
|
||||
<?php
|
||||
|
||||
$lang["module_both"] = "Both";
|
||||
$lang["module_config"] = "Store Config";
|
||||
$lang["module_config_desc"] = "Change the store's configuration";
|
||||
$lang["module_config"] = "Configuration";
|
||||
$lang["module_config_desc"] = "Change OSPOS's Configuration.";
|
||||
$lang["module_customers"] = "Customers";
|
||||
$lang["module_customers_desc"] = "Add, Update, Delete, and Search Customers.";
|
||||
$lang["module_employees"] = "Employees";
|
||||
$lang["module_employees_desc"] = "Add, Update, Delete, and Search Employees.";
|
||||
$lang["module_expenses"] = "Expenses";
|
||||
$lang["module_expenses_desc"] = "Add, Update, Delete, and Search Expenses.";
|
||||
$lang["module_expenses_categories"] = "Expenses Categories";
|
||||
$lang["module_expenses_categories_desc"] = "Add, Update, and Delete Expenses Categories.";
|
||||
$lang["module_giftcards"] = "Gift Cards";
|
||||
$lang["module_giftcards_desc"] = "Add, Update, Delete and Search Gift Cards.";
|
||||
$lang["module_home"] = "Home";
|
||||
|
||||
@@ -35,6 +35,11 @@ $lang["reports_earned"] = "Points Earned";
|
||||
$lang["reports_employee"] = "Employee";
|
||||
$lang["reports_employees"] = "Employees";
|
||||
$lang["reports_employees_summary_report"] = "Employees Summary Report";
|
||||
$lang["reports_expenses_categories"] = "Expenses";
|
||||
$lang["reports_expenses_categories_summary_report"] = "Expense Categories Summary Report";
|
||||
$lang["reports_expenses_category"] = "Category";
|
||||
$lang["reports_expenses_amount"] = "Amount";
|
||||
$lang["reports_expenses_total_amount"] = "Total Amount";
|
||||
$lang["reports_graphical_reports"] = "Graphical Reports";
|
||||
$lang["reports_inventory"] = "Inventory";
|
||||
$lang["reports_inventory_low"] = "Low Inventory";
|
||||
|
||||
File renamed without changes.
@@ -112,3 +112,89 @@ WHERE `name_lang_key` = 'module_office';
|
||||
UPDATE `ospos_modules`
|
||||
SET `sort` = 98
|
||||
WHERE `name_lang_key` = 'module_messages';
|
||||
|
||||
|
||||
--
|
||||
-- Add support for expenses tracking
|
||||
--
|
||||
|
||||
INSERT INTO `ospos_modules` (`name_lang_key`, `desc_lang_key`, `sort`, `module_id`) VALUES
|
||||
('module_expenses', 'module_expenses_desc', 108, 'expenses'),
|
||||
('module_expenses_categories', 'module_expenses_categories_desc', 109, 'expenses_categories');
|
||||
|
||||
INSERT INTO `ospos_permissions` (`permission_id`, `module_id`) VALUES
|
||||
('expenses_categories', 'expenses_categories'),
|
||||
('expenses', 'expenses'),
|
||||
('reports_expenses_categories', 'reports');
|
||||
|
||||
INSERT INTO `ospos_grants` (`permission_id`, `person_id`) VALUES
|
||||
('expenses', 1),
|
||||
('expenses_categories', 1),
|
||||
('reports_expenses_categories', 1);
|
||||
|
||||
|
||||
-- Table structure for table `ospos_expense_categories`
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `ospos_expense_categories` (
|
||||
`expense_category_id` int(10) NOT NULL,
|
||||
`category_name` varchar(255) DEFAULT NULL,
|
||||
`category_description` varchar(255) NOT NULL,
|
||||
`deleted` int(1) NOT NULL DEFAULT '0'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT INTO `ospos_expense_categories` (`expense_category_id`, `category_name`, `category_description`) VALUES
|
||||
(1, 'Utilities', 'Water');
|
||||
|
||||
|
||||
-- Table structure for table `ospos_expenses`
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `ospos_expenses` (
|
||||
`expense_id` int(10) NOT NULL,
|
||||
`date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`amount` decimal(15,2) NOT NULL,
|
||||
`payment_type` varchar(40) NOT NULL,
|
||||
`expense_category_id` int(11) NOT NULL,
|
||||
`description` varchar(255) NOT NULL,
|
||||
`employee_id` int(10) NOT NULL,
|
||||
`deleted` int(1) NOT NULL DEFAULT '0'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
|
||||
|
||||
-- Dumping data for table `ospos_expenses`
|
||||
|
||||
INSERT INTO `ospos_expenses` (`expense_id`, `date`, `amount`, `expense_category_id`, `description`, `employee_id`) VALUES
|
||||
(1, '2017-04-20 07:00:00', '15.00', 1, 'Water', 1);
|
||||
|
||||
|
||||
-- Indexes for table `ospos_expense_categories`
|
||||
|
||||
ALTER TABLE `ospos_expense_categories`
|
||||
ADD PRIMARY KEY (`expense_category_id`),
|
||||
ADD UNIQUE KEY `category_name` (`category_name`);
|
||||
|
||||
|
||||
-- Indexes for table `ospos_expenses`
|
||||
|
||||
ALTER TABLE `ospos_expenses`
|
||||
ADD PRIMARY KEY (`expense_id`),
|
||||
ADD KEY `expense_category_id` (`expense_category_id`),
|
||||
ADD KEY `employee_id` (`employee_id`);
|
||||
|
||||
|
||||
-- AUTO_INCREMENT for table `ospos_expense_categories`
|
||||
|
||||
ALTER TABLE `ospos_expense_categories`
|
||||
MODIFY `expense_category_id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
|
||||
|
||||
|
||||
-- AUTO_INCREMENT for table `ospos_expenses`
|
||||
|
||||
ALTER TABLE `ospos_expenses`
|
||||
MODIFY `expense_id` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
|
||||
|
||||
|
||||
-- Constraints for table `ospos_expenses`
|
||||
|
||||
ALTER TABLE `ospos_expenses`
|
||||
ADD CONSTRAINT `ospos_expenses_ibfk_1` FOREIGN KEY (`expense_category_id`) REFERENCES `ospos_expense_categories` (`expense_category_id`),
|
||||
ADD CONSTRAINT `ospos_expenses_ibfk_2` FOREIGN KEY (`employee_id`) REFERENCES `ospos_employees` (`person_id`);
|
||||
@@ -0,0 +1,314 @@
|
||||
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Expense class
|
||||
*/
|
||||
|
||||
class Expense extends CI_Model
|
||||
{
|
||||
/*
|
||||
Determines if a given Expense_id is an Expense
|
||||
*/
|
||||
public function exists($expense_id)
|
||||
{
|
||||
$this->db->from('expenses');
|
||||
$this->db->where('expense_id', $expense_id);
|
||||
|
||||
return ($this->db->get()->num_rows() == 1);
|
||||
}
|
||||
|
||||
/*
|
||||
Gets category info
|
||||
*/
|
||||
public function get_expense_category($expense_id)
|
||||
{
|
||||
$this->db->from('expenses');
|
||||
$this->db->where('expense_id', $expense_id);
|
||||
|
||||
return $this->Expense_category->get_info($this->db->get()->row()->expense_category_id);
|
||||
}
|
||||
|
||||
/*
|
||||
Gets employee info
|
||||
*/
|
||||
public function get_employee($expense_id)
|
||||
{
|
||||
$this->db->from('expenses');
|
||||
$this->db->where('expense_id', $expense_id);
|
||||
|
||||
return $this->Employee->get_info($this->db->get()->row()->employee_id);
|
||||
}
|
||||
|
||||
public function get_multiple_info($expense_ids)
|
||||
{
|
||||
$this->db->from('expenses');
|
||||
$this->db->where_in('expenses.expense_id', $expense_ids);
|
||||
$this->db->order_by('expense_id', 'asc');
|
||||
|
||||
return $this->db->get();
|
||||
}
|
||||
|
||||
/*
|
||||
Gets rows
|
||||
*/
|
||||
public function get_found_rows($search, $filters)
|
||||
{
|
||||
return $this->search($search, $filters)->num_rows();
|
||||
}
|
||||
|
||||
/*
|
||||
Searches expenses
|
||||
*/
|
||||
public function search($search, $filters, $rows = 0, $limit = 0, $sort = 'expense_id', $order = 'asc')
|
||||
{
|
||||
$this->db->select('
|
||||
expenses.expense_id,
|
||||
MAX(expenses.date) AS date,
|
||||
MAX(expenses.amount) AS amount,
|
||||
MAX(expenses.payment_type) AS payment_type,
|
||||
MAX(expenses.description) AS description,
|
||||
MAX(employees.first_name) AS first_name,
|
||||
MAX(employees.last_name) AS last_name,
|
||||
MAX(expense_categories.category_name) AS category_name
|
||||
');
|
||||
$this->db->from('expenses AS expenses');
|
||||
$this->db->join('people AS employees', 'employees.person_id = expenses.employee_id', 'LEFT');
|
||||
$this->db->join('expense_categories AS expense_categories', 'expense_categories.expense_category_id = expenses.expense_category_id', 'LEFT');
|
||||
|
||||
$this->db->group_start();
|
||||
$this->db->like('employees.first_name', $search);
|
||||
$this->db->or_like('expenses.date', $search);
|
||||
$this->db->or_like('employees.last_name', $search);
|
||||
$this->db->or_like('expenses.payment_type', $search);
|
||||
$this->db->or_like('expenses.amount', $search);
|
||||
$this->db->or_like('expense_categories.category_name', $search);
|
||||
$this->db->or_like('CONCAT(employees.first_name, " ", employees.last_name)', $search);
|
||||
$this->db->group_end();
|
||||
|
||||
$this->db->where('expenses.deleted', $filters['is_deleted']);
|
||||
|
||||
if(empty($this->config->item('date_or_time_format')))
|
||||
{
|
||||
$this->db->where('DATE_FORMAT(expenses.date, "%Y-%m-%d") BETWEEN ' . $this->db->escape($filters['start_date']) . ' AND ' . $this->db->escape($filters['end_date']));
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->where('expenses.date BETWEEN ' . $this->db->escape(rawurldecode($filters['start_date'])) . ' AND ' . $this->db->escape(rawurldecode($filters['end_date'])));
|
||||
}
|
||||
|
||||
if($filters['only_debit'] != FALSE)
|
||||
{
|
||||
$this->db->like('expenses.payment_type', $this->lang->line('expenses_debit'));
|
||||
}
|
||||
|
||||
if($filters['only_credit'] != FALSE)
|
||||
{
|
||||
$this->db->like('expenses.payment_type', $this->lang->line('expenses_credit'));
|
||||
}
|
||||
|
||||
if($filters['only_cash'] != FALSE)
|
||||
{
|
||||
$this->db->group_start();
|
||||
$this->db->like('expenses.payment_type', $this->lang->line('expenses_cash'));
|
||||
$this->db->or_where('expenses.payment_type IS NULL');
|
||||
$this->db->group_end();
|
||||
}
|
||||
|
||||
if($filters['only_due'] != FALSE)
|
||||
{
|
||||
$this->db->like('expenses.payment_type', $this->lang->line('expenses_due'));
|
||||
}
|
||||
|
||||
if($filters['only_check'] != FALSE)
|
||||
{
|
||||
$this->db->like('expenses.payment_type', $this->lang->line('expenses_check'));
|
||||
}
|
||||
|
||||
$this->db->group_by('expense_id');
|
||||
$this->db->order_by($sort, $order);
|
||||
|
||||
if($rows > 0)
|
||||
{
|
||||
$this->db->limit($rows, $limit);
|
||||
}
|
||||
|
||||
return $this->db->get();
|
||||
}
|
||||
|
||||
/*
|
||||
Gets information about a particular expense
|
||||
*/
|
||||
public function get_info($expense_id)
|
||||
{
|
||||
$this->db->select('
|
||||
expenses.expense_id AS expense_id,
|
||||
expenses.date AS date,
|
||||
expenses.amount AS amount,
|
||||
expenses.payment_type AS payment_type,
|
||||
expenses.description AS description,
|
||||
expenses.employee_id AS employee_id,
|
||||
expenses.deleted AS deleted,
|
||||
employees.first_name AS first_name,
|
||||
employees.last_name AS last_name,
|
||||
expense_categories.expense_category_id AS expense_category_id,
|
||||
expense_categories.category_name AS category_name
|
||||
');
|
||||
$this->db->from('expenses AS expenses');
|
||||
$this->db->join('people AS employees', 'employees.person_id = expenses.employee_id', 'LEFT');
|
||||
$this->db->join('expense_categories AS expense_categories', 'expense_categories.expense_category_id = expenses.expense_category_id', 'LEFT');
|
||||
$this->db->where('expense_id', $expense_id);
|
||||
|
||||
$query = $this->db->get();
|
||||
if($query->num_rows() == 1)
|
||||
{
|
||||
return $query->row();
|
||||
}
|
||||
else
|
||||
{
|
||||
//Get empty base parent object
|
||||
$expenses_obj = new stdClass();
|
||||
|
||||
//Get all the fields from expenses table
|
||||
foreach($this->db->list_fields('expenses') as $field)
|
||||
{
|
||||
$expenses_obj->$field = '';
|
||||
}
|
||||
|
||||
return $expenses_obj;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Inserts or updates an expense
|
||||
*/
|
||||
public function save(&$expense_data, $expense_id = FALSE)
|
||||
{
|
||||
//$expense_id = $expense_data['expense_id'];
|
||||
if(!$expense_id == -1 || !$this->exists($expense_id))
|
||||
{
|
||||
if($this->db->insert('expenses', $expense_data))
|
||||
{
|
||||
$expense_data['expense_id'] = $this->db->insert_id();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$this->db->where('expense_id', $expense_id);
|
||||
|
||||
return $this->db->update('expenses', $expense_data);
|
||||
}
|
||||
|
||||
/*
|
||||
Deletes a list of expense_category
|
||||
*/
|
||||
public function delete_list($expense_ids)
|
||||
{
|
||||
$success = FALSE;
|
||||
|
||||
//Run these queries as a transaction, we want to make sure we do all or nothing
|
||||
$this->db->trans_start();
|
||||
$this->db->where_in('expense_id', $expense_ids);
|
||||
$success = $this->db->update('expenses', array('deleted'=>1));
|
||||
$this->db->trans_complete();
|
||||
|
||||
return $success;
|
||||
}
|
||||
|
||||
/*
|
||||
Gets the payment summary for the expenses (expenses/manage) view
|
||||
*/
|
||||
public function get_payments_summary($search, $filters)
|
||||
{
|
||||
// get payment summary
|
||||
$this->db->select('payment_type, COUNT(amount) AS count, SUM(amount) AS amount');
|
||||
$this->db->from('expenses');
|
||||
$this->db->where('deleted', $filters['is_deleted']);
|
||||
|
||||
if(empty($this->config->item('date_or_time_format')))
|
||||
{
|
||||
$this->db->where('DATE_FORMAT(date, "%Y-%m-%d") BETWEEN ' . $this->db->escape($filters['start_date']) . ' AND ' . $this->db->escape($filters['end_date']));
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->where('date BETWEEN ' . $this->db->escape(rawurldecode($filters['start_date'])) . ' AND ' . $this->db->escape(rawurldecode($filters['end_date'])));
|
||||
}
|
||||
|
||||
if($filters['only_cash'] != FALSE)
|
||||
{
|
||||
$this->db->like('payment_type', $this->lang->line('expenses_cash'));
|
||||
}
|
||||
|
||||
if($filters['only_due'] != FALSE)
|
||||
{
|
||||
$this->db->like('payment_type', $this->lang->line('expenses_due'));
|
||||
}
|
||||
|
||||
if($filters['only_check'] != FALSE)
|
||||
{
|
||||
$this->db->like('payment_type', $this->lang->line('expenses_check'));
|
||||
}
|
||||
|
||||
if($filters['only_credit'] != FALSE)
|
||||
{
|
||||
$this->db->like('payment_type', $this->lang->line('expenses_credit'));
|
||||
}
|
||||
|
||||
if($filters['only_debit'] != FALSE)
|
||||
{
|
||||
$this->db->like('payment_type', $this->lang->line('expenses_debit'));
|
||||
}
|
||||
|
||||
$this->db->group_by('payment_type');
|
||||
|
||||
$payments = $this->db->get()->result_array();
|
||||
|
||||
return $payments;
|
||||
}
|
||||
|
||||
/*
|
||||
Gets the payment options to show in the expense forms
|
||||
*/
|
||||
public function get_payment_options()
|
||||
{
|
||||
$payments = array();
|
||||
|
||||
if($this->config->item('payment_options_order') == 'debitcreditcash')
|
||||
{
|
||||
$payments[$this->lang->line('sales_debit')] = $this->lang->line('sales_debit');
|
||||
$payments[$this->lang->line('sales_credit')] = $this->lang->line('sales_credit');
|
||||
$payments[$this->lang->line('sales_cash')] = $this->lang->line('sales_cash');
|
||||
}
|
||||
elseif($this->config->item('payment_options_order') == 'debitcashcredit')
|
||||
{
|
||||
$payments[$this->lang->line('sales_debit')] = $this->lang->line('sales_debit');
|
||||
$payments[$this->lang->line('sales_cash')] = $this->lang->line('sales_cash');
|
||||
$payments[$this->lang->line('sales_credit')] = $this->lang->line('sales_credit');
|
||||
}
|
||||
else // default: if($this->config->item('payment_options_order') == 'cashdebitcredit')
|
||||
{
|
||||
$payments[$this->lang->line('sales_cash')] = $this->lang->line('sales_cash');
|
||||
$payments[$this->lang->line('sales_debit')] = $this->lang->line('sales_debit');
|
||||
$payments[$this->lang->line('sales_credit')] = $this->lang->line('sales_credit');
|
||||
}
|
||||
|
||||
$payments[$this->lang->line('sales_due')] = $this->lang->line('sales_due');
|
||||
$payments[$this->lang->line('sales_check')] = $this->lang->line('sales_check');
|
||||
|
||||
return $payments;
|
||||
}
|
||||
|
||||
/*
|
||||
Gets the expense payment
|
||||
*/
|
||||
public function get_expense_payment($expense_id)
|
||||
{
|
||||
$this->db->from('expenses');
|
||||
$this->db->where('expense_id', $expense_id);
|
||||
|
||||
return $this->db->get();
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,158 @@
|
||||
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
/**
|
||||
* Expense_category class
|
||||
*/
|
||||
|
||||
class Expense_category extends CI_Model
|
||||
{
|
||||
/*
|
||||
Determines if a given Expense_id is an Expense category
|
||||
*/
|
||||
public function exists($expense_category_id)
|
||||
{
|
||||
$this->db->from('expense_categories');
|
||||
$this->db->where('expense_category_id', $expense_category_id);
|
||||
|
||||
return ($this->db->get()->num_rows() == 1);
|
||||
}
|
||||
|
||||
/*
|
||||
Gets total of rows
|
||||
*/
|
||||
public function get_total_rows()
|
||||
{
|
||||
$this->db->from('expense_categories');
|
||||
$this->db->where('deleted', 0);
|
||||
|
||||
return $this->db->count_all_results();
|
||||
}
|
||||
|
||||
/*
|
||||
Gets information about a particular category
|
||||
*/
|
||||
public function get_info($expense_category_id)
|
||||
{
|
||||
$this->db->from('expense_categories');
|
||||
$this->db->where('expense_category_id', $expense_category_id);
|
||||
$this->db->where('deleted', 0);
|
||||
$query = $this->db->get();
|
||||
|
||||
if($query->num_rows()==1)
|
||||
{
|
||||
return $query->row();
|
||||
}
|
||||
else
|
||||
{
|
||||
//Get empty base parent object, as $item_kit_id is NOT an item kit
|
||||
$expense_obj = new stdClass();
|
||||
|
||||
//Get all the fields from items table
|
||||
foreach($this->db->list_fields('expense_categories') as $field)
|
||||
{
|
||||
$expense_obj->$field = '';
|
||||
}
|
||||
|
||||
return $expense_obj;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Returns all the expense_categories
|
||||
*/
|
||||
public function get_all($rows = 0, $limit_from = 0, $no_deleted = FALSE)
|
||||
{
|
||||
$this->db->from('expense_categories');
|
||||
$this->db->order_by('category_name', 'asc');
|
||||
if($no_deleted == TRUE)
|
||||
{
|
||||
$this->db->where('deleted', 0);
|
||||
}
|
||||
|
||||
if($rows > 0)
|
||||
{
|
||||
$this->db->limit($rows, $limit_from);
|
||||
}
|
||||
|
||||
return $this->db->get();
|
||||
}
|
||||
|
||||
/*
|
||||
Gets information about multiple expense_category_id
|
||||
*/
|
||||
public function get_multiple_info($expense_category_ids)
|
||||
{
|
||||
$this->db->from('expense_categories');
|
||||
$this->db->where_in('expense_category_id', $expense_category_ids);
|
||||
$this->db->order_by('category_name', 'asc');
|
||||
|
||||
return $this->db->get();
|
||||
}
|
||||
|
||||
/*
|
||||
Inserts or updates an expense_category
|
||||
*/
|
||||
public function save(&$expense_category_data, $expense_category_id = FALSE)
|
||||
{
|
||||
if(!$expense_category_id || !$this->exists($expense_category_id))
|
||||
{
|
||||
if($this->db->insert('expense_categories', $expense_category_data))
|
||||
{
|
||||
$expense_category_data['expense_category_id'] = $this->db->insert_id();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$this->db->where('expense_category_id', $expense_category_id);
|
||||
|
||||
return $this->db->update('expense_categories', $expense_category_data);
|
||||
}
|
||||
|
||||
/*
|
||||
Deletes a list of expense_category
|
||||
*/
|
||||
public function delete_list($expense_category_ids)
|
||||
{
|
||||
$this->db->where_in('expense_category_id', $expense_category_ids);
|
||||
|
||||
return $this->db->update('expense_categories', array('deleted' => 1));
|
||||
}
|
||||
|
||||
/*
|
||||
Perform a search on expense_category
|
||||
*/
|
||||
public function search($search, $rows = 0, $limit_from = 0, $sort = 'category_name', $order='asc')
|
||||
{
|
||||
$this->db->from('expense_categories');
|
||||
$this->db->group_start();
|
||||
$this->db->like('category_name', $search);
|
||||
$this->db->or_like('category_description', $search);
|
||||
$this->db->group_end();
|
||||
$this->db->where('deleted', 0);
|
||||
|
||||
$this->db->order_by($sort, $order);
|
||||
|
||||
if($rows > 0)
|
||||
{
|
||||
$this->db->limit($rows, $limit_from);
|
||||
}
|
||||
|
||||
return $this->db->get();
|
||||
}
|
||||
|
||||
public function get_found_rows($search)
|
||||
{
|
||||
$this->db->from('expense_categories');
|
||||
$this->db->group_start();
|
||||
$this->db->like('category_name', $search);
|
||||
$this->db->or_like('category_description', $search);
|
||||
$this->db->group_end();
|
||||
$this->db->where('deleted', 0);
|
||||
|
||||
return $this->db->get()->num_rows();
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -29,7 +29,6 @@ class Giftcard extends CI_Model
|
||||
$this->db->order_by("giftcard_number","desc");
|
||||
$this->db->limit(1);
|
||||
|
||||
|
||||
return $this->db->get()->row();
|
||||
}
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ class Inventory extends CI_Model
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
|
||||
|
||||
require_once("Summary_report.php");
|
||||
|
||||
class Summary_expenses_categories extends Summary_report
|
||||
{
|
||||
protected function _get_data_columns()
|
||||
{
|
||||
return array(
|
||||
array('category_name' => $this->lang->line('reports_expenses_category')),
|
||||
array('count' => $this->lang->line('reports_count'), 'sorter' => 'number_sorter'),
|
||||
array('total_amount' => $this->lang->line('reports_expenses_amount'), 'sorter' => 'number_sorter'));
|
||||
}
|
||||
|
||||
public function getData(array $inputs)
|
||||
{
|
||||
$this->db->select('expense_categories.category_name AS category_name, COUNT(expenses.expense_id) AS count, SUM(expenses.amount) AS total_amount');
|
||||
$this->db->from('expenses AS expenses');
|
||||
$this->db->join('expense_categories AS expense_categories', 'expense_categories.expense_category_id = expenses.expense_category_id', 'LEFT');
|
||||
|
||||
if(empty($this->config->item('date_or_time_format')))
|
||||
{
|
||||
$this->db->where('DATE(expenses.date) BETWEEN ' . $this->db->escape($inputs['start_date']) . ' AND ' . $this->db->escape($inputs['end_date']));
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->where('expenses.date BETWEEN ' . $this->db->escape(rawurldecode($inputs['start_date'])) . ' AND ' . $this->db->escape(rawurldecode($inputs['end_date'])));
|
||||
}
|
||||
|
||||
$this->db->where('expenses.deleted', 0);
|
||||
|
||||
$this->db->group_by('expense_categories.category_name');
|
||||
$this->db->order_by('expense_categories.category_name');
|
||||
|
||||
return $this->db->get()->result_array();
|
||||
}
|
||||
|
||||
public function getSummaryData(array $inputs)
|
||||
{
|
||||
$this->db->select('SUM(expenses.amount) AS expenses_total_amount');
|
||||
$this->db->from('expenses AS expenses');
|
||||
|
||||
if(empty($this->config->item('date_or_time_format')))
|
||||
{
|
||||
$this->db->where('DATE(expenses.date) BETWEEN ' . $this->db->escape($inputs['start_date']) . ' AND ' . $this->db->escape($inputs['end_date']));
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->where('expenses.date BETWEEN ' . $this->db->escape(rawurldecode($inputs['start_date'])) . ' AND ' . $this->db->escape(rawurldecode($inputs['end_date'])));
|
||||
}
|
||||
|
||||
$this->db->where('expenses.deleted', 0);
|
||||
|
||||
return $this->db->get()->row_array();
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -5,7 +5,7 @@ require_once("Report.php");
|
||||
abstract class Summary_report extends Report
|
||||
{
|
||||
/**
|
||||
* Private interface
|
||||
* Private interface implementing the core basic functionality for all reports
|
||||
*/
|
||||
|
||||
private function _common_select(array $inputs)
|
||||
@@ -94,17 +94,17 @@ abstract class Summary_report extends Report
|
||||
{
|
||||
$this->db->where('sale_status', COMPLETED);
|
||||
$this->db->group_start();
|
||||
$this->db->where('sale_type', SALE_TYPE_POS);
|
||||
$this->db->or_where('sale_type', SALE_TYPE_INVOICE);
|
||||
$this->db->or_where('sale_type', SALE_TYPE_RETURN);
|
||||
$this->db->where('sale_type', SALE_TYPE_POS);
|
||||
$this->db->or_where('sale_type', SALE_TYPE_INVOICE);
|
||||
$this->db->or_where('sale_type', SALE_TYPE_RETURN);
|
||||
$this->db->group_end();
|
||||
}
|
||||
elseif($inputs['sale_type'] == 'sales')
|
||||
{
|
||||
$this->db->where('sale_status', COMPLETED);
|
||||
$this->db->group_start();
|
||||
$this->db->where('sale_type', SALE_TYPE_POS);
|
||||
$this->db->or_where('sale_type', SALE_TYPE_INVOICE);
|
||||
$this->db->where('sale_type', SALE_TYPE_POS);
|
||||
$this->db->or_where('sale_type', SALE_TYPE_INVOICE);
|
||||
$this->db->group_end();
|
||||
}
|
||||
elseif($inputs['sale_type'] == 'quotes')
|
||||
@@ -126,12 +126,10 @@ abstract class Summary_report extends Report
|
||||
$this->db->where('sale_status', COMPLETED);
|
||||
$this->db->where('sale_type', SALE_TYPE_RETURN);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Protected class interface implemented by derived classes
|
||||
* Protected class interface implemented by derived classes if necessary
|
||||
*/
|
||||
|
||||
abstract protected function _get_data_columns();
|
||||
@@ -142,7 +140,7 @@ abstract class Summary_report extends Report
|
||||
protected function _group_order() {}
|
||||
|
||||
/**
|
||||
* Public interface implementing the base abstract class, in general it should not be extended unless there is a valid reason
|
||||
* Public interface implementing the base abstract class, in general it should not be extended unless there is a valid reason like a non sale report (e.g. expenses)
|
||||
*/
|
||||
|
||||
public function getDataColumns()
|
||||
|
||||
@@ -0,0 +1,175 @@
|
||||
<div id="required_fields_message"><?php echo $this->lang->line('common_fields_required_message'); ?></div>
|
||||
|
||||
<ul id="error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<?php echo form_open('expenses/save/'.$expenses_info->expense_id, array('id'=>'expenses_edit_form', 'class'=>'form-horizontal')); ?>
|
||||
<fieldset id="item_basic_info">
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('expenses_info'), 'expenses_info', array('class'=>'control-label col-xs-3')); ?>
|
||||
<?php echo form_label(!empty($expenses_info->expense_id) ? $this->lang->line('expenses_expense_id') . ' ' . $expenses_info->expense_id : '', 'expenses_info_id', array('class'=>'control-label col-xs-8', 'style'=>'text-align:left')); ?>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('expenses_date'), 'date', array('class'=>'required control-label col-xs-3')); ?>
|
||||
<div class='col-xs-6'>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon input-sm"><span class="glyphicon glyphicon-calendar"></span></span>
|
||||
<?php echo form_input(array(
|
||||
'name'=>'date',
|
||||
'id'=>'datetime',
|
||||
'class'=>'form-control input-sm datepicker',
|
||||
'value'=>date($this->config->item('dateformat') . ' ' . $this->config->item('timeformat'), strtotime($expenses_info->date)))
|
||||
);?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('expenses_amount'), 'amount', array('class'=>'required control-label col-xs-3')); ?>
|
||||
<div class='col-xs-6'>
|
||||
<div class="input-group input-group-sm">
|
||||
<?php if (!currency_side()): ?>
|
||||
<span class="input-group-addon input-sm"><b><?php echo $this->config->item('currency_symbol'); ?></b></span>
|
||||
<?php endif; ?>
|
||||
<?php echo form_input(array(
|
||||
'name'=>'amount',
|
||||
'id'=>'amount',
|
||||
'class'=>'form-control input-sm',
|
||||
'value'=>to_currency_no_money($expenses_info->amount))
|
||||
);?>
|
||||
<?php if (currency_side()): ?>
|
||||
<span class="input-group-addon input-sm"><b><?php echo $this->config->item('currency_symbol'); ?></b></span>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('expenses_payment'), 'payment_type', array('class'=>'control-label col-xs-3')); ?>
|
||||
<div class='col-xs-6'>
|
||||
<?php echo form_dropdown('payment_type', $payment_options, $expenses_info->payment_type, array('class'=>'form-control', 'id'=>'payment_type'));?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('expenses_categories_name'), 'category', array('class'=>'control-label col-xs-3')); ?>
|
||||
<div class='col-xs-6'>
|
||||
<?php echo form_dropdown('expense_category_id', $expense_categories, $expenses_info->expense_category_id, array('class'=>'form-control', 'id'=>'category')); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('expenses_employee'), 'employee', array('class'=>'control-label col-xs-3')); ?>
|
||||
<div class='col-xs-6'>
|
||||
<?php echo form_dropdown('employee_id', $employees, $expenses_info->employee_id, 'id="employee_id" class="form-control"');?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('expenses_description'), 'description', array('class'=>'control-label col-xs-3')); ?>
|
||||
<div class='col-xs-6'>
|
||||
<?php echo form_textarea(array(
|
||||
'name'=>'description',
|
||||
'id'=>'description',
|
||||
'class'=>'form-control input-sm',
|
||||
'value'=>$expenses_info->description)
|
||||
);?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('expenses_is_deleted').':', 'deleted', array('class'=>'control-label col-xs-3')); ?>
|
||||
<div class='col-xs-5'>
|
||||
<?php echo form_checkbox(array(
|
||||
'name'=>'deleted',
|
||||
'id'=>'deleted',
|
||||
'value'=>1,
|
||||
'checked'=>($expenses_info->deleted) ? 1 : 0)
|
||||
);?>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
<?php echo form_close(); ?>
|
||||
|
||||
<script type='text/javascript'>
|
||||
//validation and submit handling
|
||||
$(document).ready(function()
|
||||
{
|
||||
<?php $this->load->view('partial/datepicker_locale'); ?>
|
||||
|
||||
$('#datetime').datetimepicker({
|
||||
format: "<?php echo dateformat_bootstrap($this->config->item('dateformat')) . ' ' . dateformat_bootstrap($this->config->item('timeformat'));?>",
|
||||
startDate: "<?php echo date($this->config->item('dateformat') . ' ' . $this->config->item('timeformat'), mktime(0, 0, 0, 1, 1, 2010));?>",
|
||||
<?php
|
||||
$t = $this->config->item('timeformat');
|
||||
$m = $t[strlen($t)-1];
|
||||
if( strpos($this->config->item('timeformat'), 'a') !== false || strpos($this->config->item('timeformat'), 'A') !== false )
|
||||
{
|
||||
?>
|
||||
showMeridian: true,
|
||||
<?php
|
||||
}
|
||||
else
|
||||
{
|
||||
?>
|
||||
showMeridian: false,
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
minuteStep: 1,
|
||||
autoclose: true,
|
||||
todayBtn: true,
|
||||
todayHighlight: true,
|
||||
bootcssVer: 3,
|
||||
language: '<?php echo current_language_code(); ?>'
|
||||
});
|
||||
|
||||
var submit_form = function()
|
||||
{
|
||||
$(this).ajaxSubmit(
|
||||
{
|
||||
success: function(response)
|
||||
{
|
||||
dialog_support.hide();
|
||||
table_support.handle_submit('<?php echo site_url('expenses'); ?>', response);
|
||||
},
|
||||
dataType: 'json'
|
||||
});
|
||||
};
|
||||
|
||||
$('#expenses_edit_form').validate($.extend(
|
||||
{
|
||||
submitHandler: function(form)
|
||||
{
|
||||
submit_form.call(form);
|
||||
},
|
||||
rules:
|
||||
{
|
||||
category: 'required',
|
||||
date:
|
||||
{
|
||||
required: true
|
||||
},
|
||||
amount:
|
||||
{
|
||||
required: true,
|
||||
number: true
|
||||
}
|
||||
},
|
||||
messages:
|
||||
{
|
||||
category: '<?php echo $this->lang->line('expenses_category_required'); ?>',
|
||||
date:
|
||||
{
|
||||
required: '<?php echo $this->lang->line('expenses_date_required'); ?>'
|
||||
|
||||
},
|
||||
amount:
|
||||
{
|
||||
required: '<?php echo $this->lang->line('expenses_amount_required'); ?>',
|
||||
number: '<?php echo $this->lang->line('expenses_amount_number'); ?>'
|
||||
}
|
||||
}
|
||||
}, form_support.error));
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,72 @@
|
||||
<?php $this->load->view("partial/header"); ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function()
|
||||
{
|
||||
// when any filter is clicked and the dropdown window is closed
|
||||
$('#filters').on('hidden.bs.select', function(e) {
|
||||
table_support.refresh();
|
||||
});
|
||||
|
||||
// load the preset datarange picker
|
||||
<?php $this->load->view('partial/daterangepicker'); ?>
|
||||
|
||||
$("#daterangepicker").on('apply.daterangepicker', function(ev, picker) {
|
||||
table_support.refresh();
|
||||
});
|
||||
|
||||
<?php $this->load->view('partial/bootstrap_tables_locale'); ?>
|
||||
|
||||
table_support.init({
|
||||
resource: '<?php echo site_url($controller_name);?>',
|
||||
headers: <?php echo $table_headers; ?>,
|
||||
pageSize: <?php echo $this->config->item('lines_per_page'); ?>,
|
||||
uniqueId: 'expense_id',
|
||||
onLoadSuccess: function(response) {
|
||||
if($("#table tbody tr").length > 1) {
|
||||
$("#payment_summary").html(response.payment_summary);
|
||||
$("#table tbody tr:last td:first").html("");
|
||||
}
|
||||
},
|
||||
queryParams: function() {
|
||||
return $.extend(arguments[0], {
|
||||
start_date: start_date,
|
||||
end_date: end_date,
|
||||
filters: $("#filters").val() || [""]
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<?php $this->load->view('partial/print_receipt', array('print_after_sale'=>false, 'selected_printer'=>'takings_printer')); ?>
|
||||
|
||||
<div id="title_bar" class="print_hide btn-toolbar">
|
||||
<button onclick="javascript:printdoc()" class='btn btn-info btn-sm pull-right'>
|
||||
<span class="glyphicon glyphicon-print"> </span><?php echo $this->lang->line('common_print'); ?>
|
||||
</button>
|
||||
<button class='btn btn-info btn-sm pull-right modal-dlg' data-btn-submit='<?php echo $this->lang->line('common_submit') ?>' data-href='<?php echo site_url($controller_name."/view"); ?>'
|
||||
title='<?php echo $this->lang->line($controller_name.'_new'); ?>'>
|
||||
<span class="glyphicon glyphicon-tags"> </span><?php echo $this->lang->line($controller_name . '_new'); ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left form-inline" role="toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm print_hide">
|
||||
<span class="glyphicon glyphicon-trash"> </span><?php echo $this->lang->line("common_delete");?>
|
||||
</button>
|
||||
|
||||
<?php echo form_input(array('name'=>'daterangepicker', 'class'=>'form-control input-sm', 'id'=>'daterangepicker')); ?>
|
||||
<?php echo form_multiselect('filters[]', $filters, '', array('id'=>'filters', 'data-none-selected-text'=>$this->lang->line('common_none_selected_text'), 'class'=>'selectpicker show-menu-arrow', 'data-selected-text-format'=>'count > 1', 'data-style'=>'btn-default btn-sm', 'data-width'=>'fit')); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="table_holder">
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<div id="payment_summary">
|
||||
</div>
|
||||
|
||||
<?php $this->load->view("partial/footer"); ?>
|
||||
@@ -0,0 +1,67 @@
|
||||
<div id="required_fields_message"><?php echo $this->lang->line('common_fields_required_message'); ?></div>
|
||||
|
||||
<ul id="error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<?php echo form_open('expenses_categories/save/'.$category_info->expense_category_id, array('id'=>'expense_category_edit_form', 'class'=>'form-horizontal')); ?>
|
||||
<fieldset id="expenses_categories">
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('expenses_categories_name'), 'category_name', array('class'=>'required control-label col-xs-3')); ?>
|
||||
<div class='col-xs-8'>
|
||||
<?php echo form_input(array(
|
||||
'name'=>'category_name',
|
||||
'id'=>'category_name',
|
||||
'class'=>'form-control input-sm',
|
||||
'value'=>$category_info->category_name)
|
||||
);?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('expenses_categories_description'), 'category_description', array('class'=>'control-label col-xs-3')); ?>
|
||||
<div class='col-xs-8'>
|
||||
<?php echo form_textarea(array(
|
||||
'name'=>'category_description',
|
||||
'id'=>'category_description',
|
||||
'class'=>'form-control input-sm',
|
||||
'value'=>$category_info->category_description)
|
||||
);?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</fieldset>
|
||||
<?php echo form_close(); ?>
|
||||
|
||||
<script type='text/javascript'>
|
||||
//validation and submit handling
|
||||
$(document).ready(function()
|
||||
{
|
||||
var submit_form = function()
|
||||
{
|
||||
$(this).ajaxSubmit(
|
||||
{
|
||||
success: function(response)
|
||||
{
|
||||
dialog_support.hide();
|
||||
table_support.handle_submit('<?php echo site_url('expenses_categories'); ?>', response);
|
||||
},
|
||||
dataType: 'json'
|
||||
});
|
||||
};
|
||||
|
||||
$('#expense_category_edit_form').validate($.extend(
|
||||
{
|
||||
submitHandler: function(form)
|
||||
{
|
||||
submit_form.call(form);
|
||||
},
|
||||
rules:
|
||||
{
|
||||
category_name: 'required'
|
||||
},
|
||||
messages:
|
||||
{
|
||||
category_name: '<?php echo $this->lang->line('category_name_required'); ?>'
|
||||
}
|
||||
}, form_support.error));
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php $this->load->view("partial/header"); ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function()
|
||||
{
|
||||
<?php $this->load->view('partial/bootstrap_tables_locale'); ?>
|
||||
|
||||
table_support.init({
|
||||
resource: '<?php echo site_url($controller_name);?>',
|
||||
headers: <?php echo $table_headers; ?>,
|
||||
pageSize: <?php echo $this->config->item('lines_per_page'); ?>,
|
||||
uniqueId: 'expense_category_id',
|
||||
|
||||
});
|
||||
|
||||
// when any filter is clicked and the dropdown window is closed
|
||||
$('#filters').on('hidden.bs.select', function(e)
|
||||
{
|
||||
table_support.refresh();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<div id="title_bar" class="btn-toolbar">
|
||||
<button class='btn btn-info btn-sm pull-right modal-dlg' data-btn-submit='<?php echo $this->lang->line('common_submit') ?>' data-href='<?php echo site_url($controller_name."/view"); ?>'
|
||||
title='<?php echo $this->lang->line($controller_name.'_new'); ?>'>
|
||||
<span class="glyphicon glyphicon-list"> </span><?php echo $this->lang->line($controller_name . '_new'); ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div id="toolbar">
|
||||
<div class="pull-left form-inline" role="toolbar">
|
||||
<button id="delete" class="btn btn-default btn-sm print_hide">
|
||||
<span class="glyphicon glyphicon-trash"> </span><?php echo $this->lang->line("common_delete");?>
|
||||
</button>
|
||||
|
||||
<!--<?php echo form_multiselect('filters[]', $filters, '', array('id'=>'filters', 'class'=>'selectpicker show-menu-arrow', 'data-selected-text-format'=>'count > 1', 'data-style'=>'btn-default btn-sm', 'data-width'=>'fit')); ?>-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="table_holder">
|
||||
<table id="table"></table>
|
||||
</div>
|
||||
|
||||
<?php $this->load->view("partial/footer"); ?>
|
||||
@@ -114,8 +114,8 @@
|
||||
{
|
||||
?>
|
||||
$('#daterangepicker').css("width","305");
|
||||
var start_date = "<?php echo date('Y-m-d H:i:s',mktime(0,0,0,date("m"),date("d"),date("Y")))?>";
|
||||
var end_date = "<?php echo date('Y-m-d H:i:s',mktime(23,59,59,date("m"),date("d"),date("Y")))?>";
|
||||
var start_date = "<?php echo date('Y-m-d H:i:s', mktime(0,0,0,date("m"),date("d"),date("Y")))?>";
|
||||
var end_date = "<?php echo date('Y-m-d H:i:s', mktime(23,59,59,date("m"),date("d"),date("Y")))?>";
|
||||
$('#daterangepicker').daterangepicker({
|
||||
"ranges": {
|
||||
"<?php echo $this->lang->line("datepicker_today"); ?>": [
|
||||
|
||||
@@ -25,9 +25,7 @@ $(document).ready(function()
|
||||
});
|
||||
location.href = "mailto:" + recipients.join(",");
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<div id="title_bar" class="btn-toolbar">
|
||||
@@ -43,8 +41,8 @@ $(document).ready(function()
|
||||
}
|
||||
?>
|
||||
<button class='btn btn-info btn-sm pull-right modal-dlg' data-btn-submit='<?php echo $this->lang->line('common_submit') ?>' data-href='<?php echo site_url($controller_name."/view"); ?>'
|
||||
title='<?php echo $this->lang->line($controller_name. '_new'); ?>'>
|
||||
<span class="glyphicon glyphicon-user"> </span><?php echo $this->lang->line($controller_name. '_new'); ?>
|
||||
title='<?php echo $this->lang->line($controller_name . '_new'); ?>'>
|
||||
<span class="glyphicon glyphicon-user"> </span><?php echo $this->lang->line($controller_name . '_new'); ?>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('receivings_date'), 'date', array('class'=>'control-label col-xs-3')); ?>
|
||||
<div class='col-xs-8'>
|
||||
<?php echo form_input(array('name'=>'date','value'=>date($this->config->item('dateformat') . ' ' . $this->config->item('timeformat'), strtotime($receiving_info['receiving_time'])), 'id'=>'datetime', 'class'=>'form-control input-sm', 'readonly'=>'true'));?>
|
||||
<?php echo form_input(array('name'=>'date','value'=>date($this->config->item('dateformat') . ' ' . $this->config->item('timeformat'), strtotime($receiving_info['receiving_time'])), 'id'=>'datetime', 'class'=>'form-control input-sm'));?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -22,31 +22,38 @@ if(isset($error))
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php
|
||||
if($mode == 'sale')
|
||||
{
|
||||
?>
|
||||
<?php echo form_label($this->lang->line('reports_sale_type'), 'reports_sale_type_label', array('class'=>'required control-label col-xs-2')); ?>
|
||||
<div id='report_sale_type' class="col-xs-3">
|
||||
<?php echo form_dropdown('sale_type', $sale_type_options, 'complete', array('id'=>'input_type', 'class'=>'form-control')); ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
elseif($mode == 'receiving')
|
||||
{
|
||||
?>
|
||||
<?php echo form_label($this->lang->line('reports_receiving_type'), 'reports_receiving_type_label', array('class'=>'required control-label col-xs-2')); ?>
|
||||
<div id='report_receiving_type' class="col-xs-3">
|
||||
<?php echo form_dropdown('receiving_type', array('all' => $this->lang->line('reports_all'),
|
||||
'receiving' => $this->lang->line('reports_receivings'),
|
||||
'returns' => $this->lang->line('reports_returns'),
|
||||
'requisitions' => $this->lang->line('reports_requisitions')), 'all', array('id'=>'input_type', 'class'=>'form-control')); ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
if(!empty($mode))
|
||||
{
|
||||
?>
|
||||
<div class="form-group form-group-sm">
|
||||
<?php
|
||||
if($mode == 'sale')
|
||||
{
|
||||
?>
|
||||
<?php echo form_label($this->lang->line('reports_sale_type'), 'reports_sale_type_label', array('class'=>'required control-label col-xs-2')); ?>
|
||||
<div id='report_sale_type' class="col-xs-3">
|
||||
<?php echo form_dropdown('sale_type', $sale_type_options, 'complete', array('id'=>'input_type', 'class'=>'form-control')); ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
elseif($mode == 'receiving')
|
||||
{
|
||||
?>
|
||||
<?php echo form_label($this->lang->line('reports_receiving_type'), 'reports_receiving_type_label', array('class'=>'required control-label col-xs-2')); ?>
|
||||
<div id='report_receiving_type' class="col-xs-3">
|
||||
<?php echo form_dropdown('receiving_type', array('all' => $this->lang->line('reports_all'),
|
||||
'receiving' => $this->lang->line('reports_receivings'),
|
||||
'returns' => $this->lang->line('reports_returns'),
|
||||
'requisitions' => $this->lang->line('reports_requisitions')), 'all', array('id'=>'input_type', 'class'=>'form-control')); ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
<?php
|
||||
if (!empty($stock_locations) && count($stock_locations) > 1)
|
||||
@@ -84,4 +91,4 @@ $(document).ready(function()
|
||||
window.location = [window.location, start_date, end_date, $("#input_type").val() || 0, $("#location_id").val()].join("/");
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
@@ -12,7 +12,7 @@
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('sales_date'), 'date', array('class'=>'control-label col-xs-3')); ?>
|
||||
<div class='col-xs-8'>
|
||||
<?php echo form_input(array('name'=>'date','value'=>date($this->config->item('dateformat') . ' ' . $this->config->item('timeformat'), strtotime($sale_info['sale_time'])), 'id'=>'datetime', 'class'=>'form-control input-sm', 'readonly'=>'true'));?>
|
||||
<?php echo form_input(array('name'=>'date','value'=>date($this->config->item('dateformat') . ' ' . $this->config->item('timeformat'), strtotime($sale_info['sale_time'])), 'id'=>'datetime', 'class'=>'form-control input-sm'));?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -91,7 +91,6 @@
|
||||
</div>
|
||||
</fieldset>
|
||||
<?php echo form_close(); ?>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
$(document).ready(function()
|
||||
@@ -112,7 +111,7 @@ $(document).ready(function()
|
||||
<?php $this->load->view('partial/datepicker_locale'); ?>
|
||||
|
||||
$('#datetime').datetimepicker({
|
||||
format: "<?php echo dateformat_bootstrap($this->config->item("dateformat")) . ' ' . dateformat_bootstrap($this->config->item("timeformat"));?>",
|
||||
format: "<?php echo dateformat_bootstrap($this->config->item('dateformat')) . ' ' . dateformat_bootstrap($this->config->item('timeformat'));?>",
|
||||
startDate: "<?php echo date($this->config->item('dateformat') . ' ' . $this->config->item('timeformat'), mktime(0, 0, 0, 1, 1, 2010));?>",
|
||||
<?php
|
||||
$t = $this->config->item('timeformat');
|
||||
@@ -135,7 +134,7 @@ $(document).ready(function()
|
||||
todayBtn: true,
|
||||
todayHighlight: true,
|
||||
bootcssVer: 3,
|
||||
language: "<?php echo current_language_code(); ?>"
|
||||
language: '<?php echo current_language_code(); ?>'
|
||||
});
|
||||
|
||||
var fill_value = function(event, ui) {
|
||||
@@ -180,7 +179,7 @@ $(document).ready(function()
|
||||
|
||||
$('#sales_edit_form').validate($.extend(
|
||||
{
|
||||
submitHandler : function(form)
|
||||
submitHandler: function(form)
|
||||
{
|
||||
submit_form.call(form);
|
||||
},
|
||||
@@ -208,6 +207,5 @@ $(document).ready(function()
|
||||
invoice_number: '<?php echo $this->lang->line("sales_invoice_number_duplicate"); ?>'
|
||||
}
|
||||
}, form_support.error));
|
||||
|
||||
});
|
||||
</script>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
Reference in new issue
Block a user