linked expenses with suppliers

This commit is contained in:
Emilio Silva Schlenker
2018-08-19 19:49:47 -05:00
committed by FrancescoUK
parent 1627a26bf6
commit 18db2e5c82
7 changed files with 167 additions and 7 deletions

View File

@@ -128,7 +128,7 @@ class Expenses extends Secure_Controller
$expense_data = array(
'date' => $date_formatter->format('Y-m-d H:i:s'),
'supplier_name' => $this->input->post('supplier_name'),
'supplier_id' => $this->input->post('supplier_id'),
'supplier_tax_code' => $this->input->post('supplier_tax_code'),
'amount' => parse_decimals($this->input->post('amount')),
'tax_amount' => parse_decimals($this->input->post('tax_amount')),

View File

@@ -43,3 +43,5 @@ $lang["expenses_supplier_name"] = "Supplier";
$lang["expenses_supplier_tax_code"] = "Tax Code";
$lang["expenses_tax_amount"] = "Tax";
$lang["expenses_update"] = "Update Expense";
$lang["expenses_start_typing_supplier_name"] = "Start Typing Supplier's name...";
$lang["expenses_supplier_required"] = "Please select a valid Supplier";

View File

@@ -43,3 +43,5 @@ $lang["expenses_supplier_name"] = "Proveedor";
$lang["expenses_supplier_tax_code"] = "Codigo Imp";
$lang["expenses_tax_amount"] = "Imp";
$lang["expenses_update"] = "Actualizar Gasto";
$lang["expenses_start_typing_supplier_name"] = "Empieza a escribir el nombre del proveedor...";
$lang["expenses_supplier_required"] = "Selecciona un Proveedor válido";

View File

@@ -0,0 +1,97 @@
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Migration_Expenses_Supplier_Id extends CI_Migration
{
public function __construct()
{
parent::__construct();
}
public function up()
{
$this->add_supplier_id();
$this->link_suppliers();
if($this->there_are_unknown_suppliers()) {
$this->save_name_in_description();
$unknown_supplier_id = $this->create_unknown_supplier();
$this->link_unknown_supplier($unknown_supplier_id);
}
$this->create_foreign_key();
$this->delete_supplier_name();
}
public function down()
{
}
private function add_supplier_id()
{
$query = "ALTER TABLE `ospos_expenses` ";
$query .= "ADD COLUMN `supplier_id` int(10) NOT NULL;";
$this->db->query($query);
}
private function link_suppliers()
{
$query = "UPDATE `ospos_expenses` ";
$query .= "INNER JOIN `ospos_suppliers` ";
$query .= "ON `ospos_expenses`.`supplier_name` = `ospos_suppliers`.`company_name` ";
$query .= "SET `ospos_expenses`.`supplier_id` = `ospos_suppliers`.`person_id`;";
$this->db->query($query);
}
private function there_are_unknown_suppliers()
{
$query = "SELECT COUNT(*) AS amount ";
$query .= "FROM `ospos_expenses` ";
$query .= "WHERE `supplier_id` = 0;";
$result = $this->db->query($query);
$amount = $result->row()->amount;
return $amount > 0;
}
private function save_name_in_description()
{
$query = "UPDATE `ospos_expenses` ";
$query .= "SET `description` = CONCAT(`description`, CONCAT('\nSupplier name: ', `supplier_name`)) ";
$query .= "WHERE `supplier_id` = 0;";
$this->db->query($query);
}
private function create_unknown_supplier()
{
$query = "INSERT INTO `ospos_people` (`first_name`, `last_name`, `comments`) ";
$query .= "VALUES ('Unknown', 'Supplier', 'This supplier was added automatically by OSPOS. It is associated with expenses whose supplier is unknown. Before deleting this supplier, correct the expenses associated with it by heading to the Expenses section and selecting the appropriate supplier for each expense. In order to determine the original supplier, you can look at the supplier\'s name in each expense\'s description field.');";
$this->db->query($query);
$id = $this->db->insert_id();
$query = "INSERT INTO `ospos_suppliers` (`person_id`, `company_name`) ";
$query .= "VALUES (" . $id . ", 'Unknown Supplier');";
$this->db->query($query);
return $id;
}
private function link_unknown_supplier($unknown_supplier_id)
{
$query = "UPDATE `ospos_expenses` ";
$query .= "SET `supplier_id` = " . $unknown_supplier_id . " ";
$query .= "WHERE `supplier_id`= 0;";
$this->db->query($query);
}
private function create_foreign_key()
{
$query = "ALTER TABLE `ospos_expenses` ";
$query .= "ADD CONSTRAINT `ospos_expenses_ibfk_3` FOREIGN KEY (`supplier_id`) REFERENCES `ospos_suppliers` (`person_id`);";
$this->db->query($query);
}
private function delete_supplier_name()
{
$query = "ALTER TABLE `ospos_expenses` ";
$query .= "DROP COLUMN `supplier_name`;";
$this->db->query($query);
}
}
?>

View File

@@ -71,7 +71,7 @@ class Expense extends CI_Model
$this->db->select('
expenses.expense_id,
MAX(expenses.date) AS date,
MAX(expenses.supplier_name) AS supplier_name,
MAX(suppliers.company_name) AS supplier_name,
MAX(expenses.supplier_tax_code) AS supplier_tax_code,
MAX(expenses.amount) AS amount,
MAX(expenses.tax_amount) AS tax_amount,
@@ -86,6 +86,7 @@ class Expense extends CI_Model
$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->join('suppliers AS suppliers', 'suppliers.person_id = expenses.supplier_id', 'INNER');
$this->db->group_start();
$this->db->like('employees.first_name', $search);
@@ -162,7 +163,8 @@ class Expense extends CI_Model
$this->db->select('
expenses.expense_id AS expense_id,
expenses.date AS date,
expenses.supplier_name AS supplier_name,
suppliers.company_name AS supplier_name,
expenses.supplier_id AS supplier_id,
expenses.supplier_tax_code AS supplier_tax_code,
expenses.amount AS amount,
expenses.tax_amount AS tax_amount,
@@ -178,6 +180,7 @@ class Expense extends CI_Model
$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->join('suppliers AS suppliers', 'suppliers.person_id = expenses.supplier_id', 'INNER');
$this->db->where('expense_id', $expense_id);
$query = $this->db->get();
@@ -196,6 +199,8 @@ class Expense extends CI_Model
$expenses_obj->$field = '';
}
$expenses_obj->supplier_name = '';
return $expenses_obj;
}
}

View File

@@ -25,15 +25,25 @@
</div>
<div class="form-group form-group-sm">
<?php echo form_label($this->lang->line('expenses_supplier_name'), 'supplier_name', array('class'=>'control-label col-xs-3')); ?>
<?php echo form_label($this->lang->line('expenses_supplier_name'), 'supplier_name', array('class'=>'control-label col-xs-3 required')); ?>
<div class='col-xs-6'>
<?php echo form_input(array(
'name'=>'supplier_name',
'id'=>'supplier_name',
'class'=>'form-control input-sm',
'value'=>$expenses_info->supplier_name)
'value'=>$this->lang->line('expenses_start_typing_supplier_name'))
);
echo form_input(array(
'type'=>'hidden',
'name'=>'supplier_id',
'id'=>'supplier_id')
);?>
</div>
<div class="col-xs-2">
<a id="remove_supplier_button" class="btn btn-danger btn-sm" title="Remove Supplier">
<span class="glyphicon glyphicon-remove"></span>
</a>
</div>
</div>
<div class="form-group form-group-sm">
@@ -160,6 +170,46 @@ $(document).ready(function()
}
}
$('#supplier_name').click(function() {
$(this).attr('value','');
});
$('#supplier_name').autocomplete({
source: '<?php echo site_url("suppliers/suggest"); ?>',
minChars:0,
delay:10,
select: function (event, ui) {
$('#supplier_id').val(ui.item.value);
$(this).val(ui.item.label);
$(this).attr('readonly', 'readonly');
$('#remove_supplier_button').css('display', 'inline-block');
return false;
}
});
$('#supplier_name').blur(function() {
$(this).attr('value',"<?php echo $this->lang->line('expenses_start_typing_supplier_name'); ?>");
});
$('#remove_supplier_button').css('display', 'none');
$('#remove_supplier_button').click(function() {
$('#supplier_id').val('');
$('#supplier_name').removeAttr('readonly');
$('#supplier_name').val('');
$(this).css('display', 'none');
});
<?php
if(!empty($expenses_info->expense_id)) {
?>
$('#supplier_id').val('<?php echo $expenses_info->supplier_id ?>');
$('#supplier_name').val('<?php echo $expenses_info->supplier_name ?>');
$('#supplier_name').attr('readonly', 'readonly');
$('#remove_supplier_button').css('display', 'inline-block');
<?php
}
?>
$('#expenses_edit_form').validate($.extend({
submitHandler: function(form) {
$(form).ajaxSubmit({
@@ -174,6 +224,8 @@ $(document).ready(function()
errorLabelContainer: '#error_message_box',
ignore: '',
rules:
{
category: 'required',
@@ -181,6 +233,7 @@ $(document).ready(function()
{
required: true
},
supplier_id: 'required',
amount:
{
required: true,
@@ -200,6 +253,7 @@ $(document).ready(function()
required: "<?php echo $this->lang->line('expenses_date_required'); ?>"
},
supplier_id: "<?php echo $this->lang->line('expenses_supplier_required'); ?>",
amount:
{
required: "<?php echo $this->lang->line('expenses_amount_required'); ?>",

View File

@@ -3,7 +3,7 @@
position: absolute;
top: 100%;
left: 0;
z-index: 1000;
z-index: 1050;
float: left;
display: none;
min-width: 160px;
@@ -50,4 +50,4 @@
-webkit-border-radius: 0px;
-moz-border-radius: 0px;
background-image: none;
}
}