mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-04-04 15:13:40 -04:00
customer reward points first phase work
This commit is contained in:
@@ -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', 'Sale_suspended', 'Supplier', 'Inventory', 'Receiving', 'Giftcard', 'Item_kit', 'Item_kit_items', 'Stock_location', 'Item_quantity','Dinner_table');
|
||||
$autoload['model'] = array('Appconfig', 'Person', 'Customer', 'Employee', 'Module', 'Item', 'Item_taxes', 'Sale', 'Sale_suspended', 'Supplier', 'Inventory', 'Receiving', 'Giftcard', 'Item_kit', 'Item_kit_items', 'Stock_location', 'Item_quantity','Dinner_table','Customer_rewards','Rewards');
|
||||
|
||||
@@ -358,7 +358,7 @@ $config['cache_query_string'] = FALSE;
|
||||
| https://codeigniter.com/user_guide/libraries/encryption.html
|
||||
|
|
||||
*/
|
||||
$config['encryption_key'] = '';
|
||||
$config['encryption_key'] = 'ec58a27d5854523044e3283b673a97c1deb59fe1e6f2ca7f77ed5e0f4c5aa02a';
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
@@ -194,6 +194,7 @@ class Config extends Secure_Controller
|
||||
{
|
||||
$data['stock_locations'] = $this->Stock_location->get_all()->result_array();
|
||||
$data['dinner_tables'] = $this->Dinner_table->get_all()->result_array();
|
||||
$data['customer_rewards'] = $this->Customer_rewards->get_all()->result_array();
|
||||
$data['support_barcode'] = $this->barcode_lib->get_list_barcodes();
|
||||
$data['logo_exists'] = $this->config->item('company_logo') != '';
|
||||
$data['line_sequence_options'] = $this->sale_lib->get_line_sequence_options();
|
||||
@@ -385,6 +386,15 @@ class Config extends Secure_Controller
|
||||
|
||||
$this->load->view('partial/dinner_tables', array('dinner_tables' => $dinner_tables));
|
||||
}
|
||||
|
||||
public function customer_rewards()
|
||||
{
|
||||
$customer_rewards = $this->Customer_rewards->get_all()->result_array();
|
||||
|
||||
$customer_rewards = $this->xss_clean($customer_rewards);
|
||||
|
||||
$this->load->view('partial/customer_rewards', array('customer_rewards' => $customer_rewards));
|
||||
}
|
||||
|
||||
private function _clear_session_state()
|
||||
{
|
||||
@@ -471,6 +481,56 @@ class Config extends Secure_Controller
|
||||
echo json_encode(array('success' => $success, 'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')));
|
||||
}
|
||||
|
||||
public function save_rewards()
|
||||
{
|
||||
$this->db->trans_start();
|
||||
|
||||
$this->Appconfig->save('customer_reward_enable',$this->input->post('customer_reward_enable'));
|
||||
|
||||
$deleted_packages = $this->Customer_rewards->get_all()->result_array();
|
||||
$not_to_delete = array();
|
||||
$array_save = array();
|
||||
foreach($this->input->post() as $key => $value)
|
||||
{
|
||||
if (strstr($key, 'reward_points') && $key != 'customer_reward_enable')
|
||||
{
|
||||
$customer_reward_id = preg_replace("/.*?_(\d+)$/", "$1", $key);
|
||||
$not_to_delete[] = $customer_reward_id;
|
||||
$array_save[$customer_reward_id]['points_percent'] = $value;
|
||||
}
|
||||
if (strstr($key, 'customer_reward') && $key != 'customer_reward_enable')
|
||||
{
|
||||
$customer_reward_id = preg_replace("/.*?_(\d+)$/", "$1", $key);
|
||||
$not_to_delete[] = $customer_reward_id;
|
||||
$array_save[$customer_reward_id]['package_name'] = $value;
|
||||
}
|
||||
}
|
||||
if(!empty($array_save))
|
||||
foreach ($array_save as $key => $value) {
|
||||
// save or update
|
||||
$table_data = array('package_name' => $value['package_name'],'points_percent' => $value['points_percent']);
|
||||
if ($this->Customer_rewards->save($table_data, $key))
|
||||
{
|
||||
$this->_clear_session_state();
|
||||
}
|
||||
}
|
||||
|
||||
// all locations not available in post will be deleted now
|
||||
foreach ($deleted_packages as $customer_reward)
|
||||
{
|
||||
if(!in_array($customer_reward['customer_reward_id'],$not_to_delete))
|
||||
{
|
||||
$this->Customer_rewards->delete($customer_reward['customer_reward_id']);
|
||||
}
|
||||
}
|
||||
|
||||
$this->db->trans_complete();
|
||||
|
||||
$success = $this->db->trans_status();
|
||||
|
||||
echo json_encode(array('success' => $success, 'message' => $this->lang->line('config_saved_' . ($success ? '' : 'un') . 'successfully')));
|
||||
}
|
||||
|
||||
public function save_barcode()
|
||||
{
|
||||
$batch_save_data = array(
|
||||
|
||||
@@ -71,6 +71,13 @@ class Customers extends Persons
|
||||
$data['person_info'] = $info;
|
||||
|
||||
$data['total'] = $this->xss_clean($this->Customer->get_totals($customer_id)->total);
|
||||
$packages = array('' => $this->lang->line('items_none'));
|
||||
foreach($this->Customer_rewards->get_all()->result_array() as $row)
|
||||
{
|
||||
$packages[$this->xss_clean($row['package_id'])] = $this->xss_clean($row['package_name']);
|
||||
}
|
||||
$data['packages'] = $packages;
|
||||
$data['selected_package'] = $info->package_id;
|
||||
|
||||
$this->load->view("customers/form", $data);
|
||||
}
|
||||
@@ -98,6 +105,7 @@ class Customers extends Persons
|
||||
'account_number' => $this->input->post('account_number') == '' ? NULL : $this->input->post('account_number'),
|
||||
'company_name' => $this->input->post('company_name') == '' ? NULL : $this->input->post('company_name'),
|
||||
'discount_percent' => $this->input->post('discount_percent') == '' ? 0.00 : $this->input->post('discount_percent'),
|
||||
'package_id' => $this->input->post('package_id') == '' ? NULL : $this->input->post('package_id'),
|
||||
'taxable' => $this->input->post('taxable') != NULL
|
||||
);
|
||||
|
||||
|
||||
@@ -229,6 +229,38 @@ class Sales extends Secure_Controller
|
||||
$this->sale_lib->add_payment($payment_type, $amount_tendered);
|
||||
}
|
||||
}
|
||||
else if ($payment_type == $this->lang->line('sales_rewards'))
|
||||
{
|
||||
$customer_id = $this->sale_lib->get_customer();
|
||||
$package_id = $this->Customer->get_info($customer_id)->package_id;
|
||||
if(isset($package_id) && $package_id!=NULL){
|
||||
$package_name = $this->Customer_rewards->get_name($package_id);
|
||||
$points = $this->Customer->get_info($customer_id)->points;
|
||||
$points = ($points==NULL ? 0 : $points);
|
||||
|
||||
$payments = $this->sale_lib->get_payments();
|
||||
$payment_type = $payment_type;
|
||||
$current_payments_with_rewards = isset($payments[$payment_type]) ? $payments[$payment_type]['payment_amount'] : 0;
|
||||
$cur_rewards_value = $points;
|
||||
|
||||
if(($cur_rewards_value - $current_payments_with_rewards) <= 0)
|
||||
{
|
||||
$data['error'] = $this->lang->line('rewards_remaining_balance', to_currency($cur_rewards_value));
|
||||
}
|
||||
else
|
||||
{
|
||||
$new_reward_value = $points - $this->sale_lib->get_amount_due();
|
||||
$new_reward_value = $new_reward_value >= 0 ? $new_reward_value : 0;
|
||||
$this->sale_lib->set_rewards_remainder($new_reward_value);
|
||||
$new_reward_value = str_replace('$', '\$', to_currency($new_reward_value));
|
||||
$data['warning'] = $this->lang->line('rewards_remaining_balance', $new_reward_value);
|
||||
$amount_tendered = min($this->sale_lib->get_amount_due(), $points);
|
||||
|
||||
$this->sale_lib->add_payment($payment_type, $amount_tendered);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
$amount_tendered = $this->input->post('amount_tendered');
|
||||
@@ -375,6 +407,8 @@ class Sales extends Secure_Controller
|
||||
public function remove_customer()
|
||||
{
|
||||
$this->sale_lib->clear_giftcard_remainder();
|
||||
$this->sale_lib->clear_rewards_remainder();
|
||||
$this->sale_lib->delete_payment($this->lang->line('sales_rewards'));
|
||||
$this->sale_lib->clear_invoice_number();
|
||||
$this->sale_lib->remove_customer();
|
||||
|
||||
@@ -415,6 +449,7 @@ class Sales extends Secure_Controller
|
||||
));
|
||||
$data['invoice_number_enabled'] = $this->sale_lib->is_invoice_mode();
|
||||
$data['cur_giftcard_value'] = $this->sale_lib->get_giftcard_remainder();
|
||||
$data['cur_rewards_value'] = $this->sale_lib->get_rewards_remainder();
|
||||
$data['print_after_sale'] = $this->sale_lib->is_print_after_sale();
|
||||
$data['email_receipt'] = $this->sale_lib->get_email_receipt();
|
||||
$customer_id = $this->sale_lib->get_customer();
|
||||
@@ -739,6 +774,14 @@ class Sales extends Secure_Controller
|
||||
}
|
||||
$data['customer_account_number'] = $customer_info->account_number;
|
||||
$data['customer_discount_percent'] = $customer_info->discount_percent;
|
||||
$package_id = $this->Customer->get_info($customer_id)->package_id;
|
||||
if($package_id!=NULL){
|
||||
$package_name = $this->Customer_rewards->get_name($package_id);
|
||||
$points = $this->Customer->get_info($customer_id)->points;
|
||||
$data['customer_rewards']['package_id'] = $package_id;
|
||||
$data['customer_rewards']['points'] = ($points==NULL ? 0 : $points);
|
||||
$data['customer_rewards']['package_name'] = $package_name;
|
||||
}
|
||||
if ($totals)
|
||||
{
|
||||
$cust_totals = $this->Customer->get_totals($customer_id);
|
||||
@@ -835,7 +878,10 @@ class Sales extends Secure_Controller
|
||||
$data['payments_total'] = $this->sale_lib->get_payments_total();
|
||||
$data['amount_due'] = $this->sale_lib->get_amount_due();
|
||||
$data['payments'] = $this->sale_lib->get_payments();
|
||||
$data['payment_options'] = $this->Sale->get_payment_options();
|
||||
if($customer_info)
|
||||
$data['payment_options'] = $this->Sale->get_payment_options(TRUE,TRUE);
|
||||
else
|
||||
$data['payment_options'] = $this->Sale->get_payment_options();
|
||||
$quote_number = $this->sale_lib->get_quote_number();
|
||||
if ($quote_number != NULL)
|
||||
{
|
||||
|
||||
@@ -195,3 +195,10 @@ $lang["config_number_locale_required"] = "Number Locale is a required field";
|
||||
$lang["config_number_locale_invalid"] = "The entered locale is invalid. Check the link in the tooltip to find a sensible value";
|
||||
$lang["config_number_locale_tooltip"] = "Find a suitable locale through this link";
|
||||
$lang["config_theme"] = "Theme";
|
||||
$lang["config_reward"] = "Reward";
|
||||
$lang["config_reward_configuration"] = "Reward Configuration";
|
||||
$lang["config_customer_reward"] = "Reward";
|
||||
$lang["config_customer_reward_enable"] = "Enable Customer Rewards";
|
||||
$lang["config_customer_reward_duplicate"] = "Please use an unique reward name";
|
||||
$lang["config_customer_reward_invalid_chars"] = "The reward name can not contain '_'";
|
||||
$lang["config_customer_reward_required"] = "Reward is a required field";
|
||||
|
||||
@@ -22,3 +22,5 @@ $lang["customers_excel_import_failed"] = "Excel import failed";
|
||||
$lang["customers_excel_import_nodata_wrongformat"] = "Your uploaded file has no data or wrong format";
|
||||
$lang["customers_excel_import_success"] = "Import of Customers successful";
|
||||
$lang["customers_excel_import_partially_failed"] = "Most Customers imported. But some were not, here is the list";
|
||||
$lang["rewards_package"] = "Rewards Package";
|
||||
$lang["customers_available_points"] = "Available Points";
|
||||
|
||||
@@ -132,3 +132,8 @@ $lang["sales_unsuspend_and_delete"] = "";
|
||||
$lang["sales_update"] = "Update";
|
||||
$lang["sales_date_range"] = "Date Range";
|
||||
$lang["sales_none_selected"] = "You have not selected any sales to delete";
|
||||
$lang["rewards_package"] = "Rewards";
|
||||
$lang["customers_available_points"] = "Available Points";
|
||||
$lang["sales_rewards"] = "Reward Points";
|
||||
$lang["sales_rewards_balance"] = "Reward Points Balance";
|
||||
$lang["rewards_remaining_balance"] = "Reward Points remaining value is %1!";
|
||||
@@ -446,6 +446,21 @@ class Sale_lib
|
||||
$this->CI->session->unset_userdata('sales_giftcard_remainder');
|
||||
}
|
||||
|
||||
public function set_rewards_remainder($value)
|
||||
{
|
||||
$this->CI->session->set_userdata('sales_rewards_remainder', $value);
|
||||
}
|
||||
|
||||
public function get_rewards_remainder()
|
||||
{
|
||||
return $this->CI->session->userdata('sales_rewards_remainder');
|
||||
}
|
||||
|
||||
public function clear_rewards_remainder()
|
||||
{
|
||||
$this->CI->session->unset_userdata('sales_rewards_remainder');
|
||||
}
|
||||
|
||||
public function add_item(&$item_id, $quantity = 1, $item_location, $discount = 0, $price = NULL, $description = NULL, $serialnumber = NULL, $include_deleted = FALSE, $print_option = '0', $stock_type = '0')
|
||||
{
|
||||
$item_info = $this->CI->Item->get_info_by_id_or_number($item_id);
|
||||
|
||||
@@ -145,6 +145,16 @@ class Customer extends Person
|
||||
return $success;
|
||||
}
|
||||
|
||||
/*
|
||||
Updates reward points value
|
||||
*/
|
||||
public function update_reward_points_value($customer_id, $value)
|
||||
{
|
||||
$this->db->where('person_id', $customer_id);
|
||||
$this->db->update('customers', array('points' => $value));
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Deletes one customer
|
||||
*/
|
||||
|
||||
84
application/models/Customer_rewards.php
Normal file
84
application/models/Customer_rewards.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
class Customer_rewards extends CI_Model
|
||||
{
|
||||
public function exists($package_id)
|
||||
{
|
||||
$this->db->from('customers_packages');
|
||||
$this->db->where('package_id', $package_id);
|
||||
|
||||
return ($this->db->get()->num_rows() >= 1);
|
||||
}
|
||||
|
||||
|
||||
public function save(&$table_data, $package_id)
|
||||
{
|
||||
$name = $$table_data['package_name'];
|
||||
$points_percent = $$table_data['points_percent'];
|
||||
|
||||
if(!$this->exists($package_id))
|
||||
{
|
||||
$this->db->trans_start();
|
||||
|
||||
$location_data = array('package_name'=>$name, 'deleted'=>0, 'points_percent'=>$points_percent);
|
||||
$this->db->insert('customers_packages', $table_data);
|
||||
$package_id = $this->db->insert_id();
|
||||
|
||||
$this->db->trans_complete();
|
||||
|
||||
return $this->db->trans_status();
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->where('package_id', $package_id);
|
||||
|
||||
return $this->db->update('customers_packages', $table_data);
|
||||
}
|
||||
}
|
||||
|
||||
public function get_name($package_id)
|
||||
{
|
||||
$this->db->from('customers_packages');
|
||||
$this->db->where('package_id',$package_id);
|
||||
|
||||
return $this->db->get()->row()->package_name;
|
||||
}
|
||||
|
||||
public function get_points_percent($package_id)
|
||||
{
|
||||
$this->db->from('customers_packages');
|
||||
$this->db->where('package_id',$package_id);
|
||||
|
||||
return $this->db->get()->row()->points_percent;
|
||||
}
|
||||
|
||||
public function get_all()
|
||||
{
|
||||
$this->db->from('customers_packages');
|
||||
|
||||
return $this->db->get();
|
||||
}
|
||||
|
||||
public function get_undeleted_all()
|
||||
{
|
||||
$this->db->from('customers_packages');
|
||||
$this->db->where('deleted', 0);
|
||||
|
||||
return $this->db->get();
|
||||
}
|
||||
|
||||
/*
|
||||
Deletes one table
|
||||
*/
|
||||
public function delete($package_id)
|
||||
{
|
||||
$this->db->trans_start();
|
||||
|
||||
$this->db->where('package_id', $package_id);
|
||||
$this->db->update('customers_packages', array('deleted' => 1));
|
||||
|
||||
$this->db->trans_complete();
|
||||
|
||||
return $this->db->trans_status();
|
||||
}
|
||||
}
|
||||
?>
|
||||
27
application/models/Rewards.php
Normal file
27
application/models/Rewards.php
Normal file
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
class Rewards extends CI_Model
|
||||
{
|
||||
/*
|
||||
Inserts or updates a rewards
|
||||
*/
|
||||
public function save(&$rewards_data, $id = -1)
|
||||
{
|
||||
if($id == -1 || !$this->exists($id))
|
||||
{
|
||||
if($this->db->insert('sales_reward_points', $rewards_data))
|
||||
{
|
||||
$rewards_data['id'] = $this->db->insert_id();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
$this->db->where('id', $id);
|
||||
|
||||
return $this->db->update('sales_reward_points', $rewards_data);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
@@ -507,7 +507,8 @@ class Sale extends CI_Model
|
||||
|
||||
$this->db->insert('sales', $sales_data);
|
||||
$sale_id = $this->db->insert_id();
|
||||
|
||||
$total_amount = 0;
|
||||
$total_amount_used = 0;
|
||||
foreach($payments as $payment_id=>$payment)
|
||||
{
|
||||
if( substr( $payment['payment_type'], 0, strlen( $this->lang->line('sales_giftcard') ) ) == $this->lang->line('sales_giftcard') )
|
||||
@@ -518,14 +519,37 @@ class Sale extends CI_Model
|
||||
$this->Giftcard->update_giftcard_value( $splitpayment[1], $cur_giftcard_value - $payment['payment_amount'] );
|
||||
}
|
||||
|
||||
if( substr( $payment['payment_type'], 0, strlen( $this->lang->line('sales_rewards') ) ) == $this->lang->line('sales_rewards') )
|
||||
{
|
||||
|
||||
$cur_rewards_value = $this->Customer->get_info($customer_id)->points;
|
||||
$this->Customer->update_reward_points_value($customer_id, $cur_rewards_value - $payment['payment_amount'] );
|
||||
$total_amount_used = floatval($total_amount_used) + floatval($payment['payment_amount']);
|
||||
}
|
||||
|
||||
$sales_payments_data = array(
|
||||
'sale_id' => $sale_id,
|
||||
'payment_type' => $payment['payment_type'],
|
||||
'payment_amount' => $payment['payment_amount']
|
||||
);
|
||||
$this->db->insert('sales_payments', $sales_payments_data);
|
||||
$total_amount = floatval($total_amount) + floatval($payment['payment_amount']);
|
||||
}
|
||||
|
||||
if(isset($customer_id) && $customer_id!= NULL){
|
||||
$package_id = $this->Customer->get_info($customer_id)->package_id;
|
||||
if(isset($package_id) && $package_id!=NULL){
|
||||
$points_percent = $this->Customer_rewards->get_points_percent($package_id);
|
||||
$points = $this->Customer->get_info($customer_id)->points;
|
||||
$points = ($points==NULL ? 0 : $points);
|
||||
$points_percent = ($points_percent==NULL ? 0 : $points_percent);
|
||||
$total_amount_earned = ($total_amount*$points_percent/100);
|
||||
$points = $points + $total_amount_earned;
|
||||
$this->Customer->update_reward_points_value($customer_id, $points);
|
||||
$rewards_data = array('sale_id'=>$sale_id, 'earned'=>$total_amount_earned, 'used'=>$total_amount_used);
|
||||
$this->Rewards->save($rewards_data);
|
||||
}
|
||||
}
|
||||
foreach($items as $line=>$item)
|
||||
{
|
||||
$cur_item_info = $this->Item->get_info($item['item_id']);
|
||||
@@ -730,7 +754,7 @@ class Sale extends CI_Model
|
||||
return $this->db->get();
|
||||
}
|
||||
|
||||
public function get_payment_options($giftcard = TRUE)
|
||||
public function get_payment_options($giftcard = TRUE, $reward_points = FALSE)
|
||||
{
|
||||
$payments = array();
|
||||
|
||||
@@ -760,6 +784,11 @@ class Sale extends CI_Model
|
||||
$payments[$this->lang->line('sales_giftcard')] = $this->lang->line('sales_giftcard');
|
||||
}
|
||||
|
||||
if($reward_points)
|
||||
{
|
||||
$payments[$this->lang->line('sales_rewards')] = $this->lang->line('sales_rewards');
|
||||
}
|
||||
|
||||
return $payments;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#table_tab" title="<?php echo $this->lang->line('config_table_configuration'); ?>"><?php echo $this->lang->line('config_table'); ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#reward_tab" title="<?php echo $this->lang->line('config_reward_configuration'); ?>"><?php echo $this->lang->line('config_reward'); ?></a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a data-toggle="tab" href="#receipt_tab" title="<?php echo $this->lang->line('config_receipt_configuration'); ?>"><?php echo $this->lang->line('config_receipt'); ?></a>
|
||||
</li>
|
||||
@@ -55,6 +58,9 @@
|
||||
<div class="tab-pane" id="table_tab">
|
||||
<?php $this->load->view("configs/table_config"); ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="reward_tab">
|
||||
<?php $this->load->view("configs/reward_config"); ?>
|
||||
</div>
|
||||
<div class="tab-pane" id="receipt_tab">
|
||||
<?php $this->load->view("configs/receipt_config"); ?>
|
||||
</div>
|
||||
|
||||
161
application/views/configs/reward_config.php
Normal file
161
application/views/configs/reward_config.php
Normal file
@@ -0,0 +1,161 @@
|
||||
<?php echo form_open('config/save_rewards/', array('id' => 'reward_config_form', 'class' => 'form-horizontal')); ?>
|
||||
<div id="config_wrapper">
|
||||
<fieldset id="config_info">
|
||||
<div id="required_fields_message"><?php echo $this->lang->line('common_fields_required_message'); ?></div>
|
||||
<ul id="table_error_message_box" class="error_message_box"></ul>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('config_customer_reward_enable'), 'customer_reward_enable', array('class' => 'control-label col-xs-2')); ?>
|
||||
<div class='col-xs-1'>
|
||||
<?php echo form_checkbox(array(
|
||||
'name' => 'customer_reward_enable',
|
||||
'value' => 'customer_reward_enable',
|
||||
'id' => 'customer_reward_enable',
|
||||
'checked' => $this->config->item('customer_reward_enable')));?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="customer_rewards">
|
||||
<?php $this->load->view('partial/customer_rewards', array('customer_rewards' => $customer_rewards)); ?>
|
||||
</div>
|
||||
|
||||
<?php echo form_submit(array(
|
||||
'name' => 'submit',
|
||||
'id' => 'submit',
|
||||
'value'=>$this->lang->line('common_submit'),
|
||||
'class' => 'btn btn-primary btn-sm pull-right')); ?>
|
||||
</fieldset>
|
||||
</div>
|
||||
<?php echo form_close(); ?>
|
||||
|
||||
<script type="text/javascript">
|
||||
//validation and submit handling
|
||||
$(document).ready(function()
|
||||
{
|
||||
|
||||
var enable_disable_customer_reward_enable = (function() {
|
||||
var customer_reward_enable = $("#customer_reward_enable").is(":checked");
|
||||
$("input[name*='customer_reward']:not(input[name=customer_reward_enable])").prop("disabled", !customer_reward_enable);
|
||||
$("input[name*='reward_points_']:not(input[name=customer_reward_enable])").prop("disabled", !customer_reward_enable);
|
||||
if(customer_reward_enable)
|
||||
{
|
||||
$(".add_customer_reward, .remove_customer_reward").show();
|
||||
}
|
||||
else
|
||||
{
|
||||
$(".add_customer_reward, .remove_customer_reward").hide();
|
||||
}
|
||||
return arguments.callee;
|
||||
})();
|
||||
|
||||
$("#customer_reward_enable").change(enable_disable_customer_reward_enable);
|
||||
|
||||
var table_count = <?php echo sizeof($customer_rewards); ?>;
|
||||
|
||||
var hide_show_remove = function() {
|
||||
if ($("input[name*='customer_rewards']:enabled").length > 1)
|
||||
{
|
||||
$(".remove_customer_rewards").show();
|
||||
}
|
||||
else
|
||||
{
|
||||
$(".remove_customer_rewards").hide();
|
||||
}
|
||||
};
|
||||
|
||||
var add_customer_reward = function() {
|
||||
var id = $(this).parent().find('input').attr('id');
|
||||
id = id.replace(/.*?_(\d+)$/g, "$1");
|
||||
var previous_id = 'customer_reward_' + id;
|
||||
var previous_id_next = 'reward_points_' + id;
|
||||
var block = $(this).parent().clone(true);
|
||||
console.log(block);
|
||||
var new_block = block.insertAfter($(this).parent());
|
||||
var new_block_id = 'customer_reward_' + ++id;
|
||||
var new_block_id_next = 'reward_points_' + id;
|
||||
$(new_block).find('label').html("<?php echo $this->lang->line('config_customer_reward'); ?> " + ++table_count).attr('for', new_block_id).attr('class', 'control-label col-xs-2');
|
||||
$(new_block).find("input[id='"+previous_id+"']").attr('id', new_block_id).removeAttr('disabled').attr('name', new_block_id).attr('class', 'form-control input-sm').val('');
|
||||
$(new_block).find("input[id='"+previous_id_next+"']").attr('id', new_block_id_next).removeAttr('disabled').attr('name', new_block_id_next).attr('class', 'form-control input-sm').val('');
|
||||
hide_show_remove();
|
||||
};
|
||||
|
||||
var remove_customer_reward = function() {
|
||||
$(this).parent().remove();
|
||||
hide_show_remove();
|
||||
};
|
||||
|
||||
var init_add_remove_tables = function() {
|
||||
$('.add_customer_reward').click(add_customer_reward);
|
||||
$('.remove_customer_reward').click(remove_customer_reward);
|
||||
hide_show_remove();
|
||||
// set back disabled state
|
||||
enable_disable_customer_reward_enable();
|
||||
};
|
||||
init_add_remove_tables();
|
||||
|
||||
var duplicate_found = false;
|
||||
// run validator once for all fields
|
||||
$.validator.addMethod('customer_reward' , function(value, element) {
|
||||
var value_count = 0;
|
||||
$("input[name*='customer_reward']:not(input[name=customer_reward_enable])").each(function() {
|
||||
value_count = $(this).val() == value ? value_count + 1 : value_count;
|
||||
});
|
||||
return value_count < 2;
|
||||
}, "<?php echo $this->lang->line('config_customer_reward_duplicate'); ?>");
|
||||
|
||||
$.validator.addMethod('valid_chars', function(value, element) {
|
||||
return value.indexOf('_') === -1;
|
||||
}, "<?php echo $this->lang->line('config_customer_reward_invalid_chars'); ?>");
|
||||
|
||||
$('#reward_config_form').validate($.extend(form_support.handler, {
|
||||
submitHandler: function(form) {
|
||||
$(form).ajaxSubmit({
|
||||
beforeSerialize: function(arr, $form, options) {
|
||||
$("input[name*='customer_reward']:not(input[name=customer_reward_enable])").prop("disabled", false);
|
||||
return true;
|
||||
},
|
||||
success: function(response) {
|
||||
$.notify({ message: response.message }, { type: response.success ? 'success' : 'danger'});
|
||||
$("#customer_rewards").load('<?php echo site_url("config/customer_rewards"); ?>', init_add_remove_tables);
|
||||
},
|
||||
dataType: 'json'
|
||||
});
|
||||
},
|
||||
|
||||
errorLabelContainer: "#table_error_message_box",
|
||||
|
||||
rules:
|
||||
{
|
||||
<?php
|
||||
$i = 0;
|
||||
|
||||
foreach($customer_rewards as $customer_reward=>$table)
|
||||
{
|
||||
?>
|
||||
<?php echo 'customer_reward_' . ++$i ?>:
|
||||
{
|
||||
required: true,
|
||||
customer_reward: true,
|
||||
valid_chars: true
|
||||
},
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
},
|
||||
|
||||
messages:
|
||||
{
|
||||
<?php
|
||||
$i = 0;
|
||||
|
||||
foreach($customer_rewards as $customer_reward=>$table)
|
||||
{
|
||||
?>
|
||||
<?php echo 'customer_reward_' . ++$i ?>: "<?php echo $this->lang->line('config_customer_reward_required'); ?>",
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
}
|
||||
}));
|
||||
});
|
||||
</script>
|
||||
@@ -65,6 +65,26 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('rewards_package'), 'rewards', array('class'=>'control-label col-xs-3')); ?>
|
||||
<div class='col-xs-8'>
|
||||
<?php echo form_dropdown('package_id', $packages, $selected_package, array('class'=>'form-control')); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('customers_available_points'), 'available_points', array('class' => 'control-label col-xs-3')); ?>
|
||||
<div class='col-xs-4'>
|
||||
<?php echo form_input(array(
|
||||
'name'=>'available_points',
|
||||
'id'=>'available_points',
|
||||
'class'=>'form-control input-sm',
|
||||
'value'=>$person_info->points,
|
||||
'disabled'=>'')
|
||||
);?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-sm">
|
||||
<?php echo form_label($this->lang->line('customers_taxable'), 'taxable', array('class' => 'control-label col-xs-3')); ?>
|
||||
<div class='col-xs-1'>
|
||||
|
||||
41
application/views/partial/customer_rewards.php
Normal file
41
application/views/partial/customer_rewards.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
$i = 0;
|
||||
|
||||
foreach($customer_rewards as $customer_rewards=>$table)
|
||||
{
|
||||
$customer_reward_id = $table['package_id'];
|
||||
$customer_reward_name = $table['package_name'];
|
||||
$customer_points_percent = $table['points_percent'];
|
||||
++$i;
|
||||
?>
|
||||
<div class="form-group form-group-sm" style="<?php echo $table['deleted'] ? 'display:none;' : 'display:block;' ?>">
|
||||
<?php echo form_label($this->lang->line('config_customer_reward') . ' ' . $i, 'customer_reward_' . $i, array('class'=>'required control-label col-xs-2')); ?>
|
||||
<div class='col-xs-2'>
|
||||
<?php $form_data = array(
|
||||
'name'=>'customer_reward_' . $customer_reward_id,
|
||||
'id'=>'customer_reward_' . $customer_reward_id,
|
||||
'class'=>'customer_reward valid_chars form-control input-sm required',
|
||||
'value'=>$customer_reward_name
|
||||
);
|
||||
$table['deleted'] && $form_data['disabled'] = 'disabled';
|
||||
echo form_input($form_data);
|
||||
?>
|
||||
</div>
|
||||
<div class='col-xs-2'>
|
||||
<?php $form_data = array(
|
||||
'name'=>'reward_points_' . $customer_reward_id,
|
||||
'id'=>'reward_points_' . $customer_reward_id,
|
||||
'class'=>'customer_reward valid_chars form-control input-sm required',
|
||||
'value'=>$customer_points_percent
|
||||
);
|
||||
$table['deleted'] && $form_data['disabled'] = 'disabled';
|
||||
echo form_input($form_data);
|
||||
?>
|
||||
</div>
|
||||
<span class="add_customer_reward glyphicon glyphicon-plus" style="padding-top: 0.5em;"></span>
|
||||
<span> </span>
|
||||
<span class="remove_customer_reward glyphicon glyphicon-minus" style="padding-top: 0.5em;"></span>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
@@ -290,6 +290,21 @@ if (isset($success))
|
||||
<th style='width: 55%;'><?php echo $this->lang->line("sales_customer_discount"); ?></th>
|
||||
<th style="width: 45%; text-align: right;"><?php echo $customer_discount_percent . ' %'; ?></th>
|
||||
</tr>
|
||||
<?php
|
||||
if(!empty($customer_rewards) && isset($customer_rewards))
|
||||
{
|
||||
?>
|
||||
<tr>
|
||||
<th style='width: 55%;'><?php echo $this->lang->line("rewards_package"); ?></th>
|
||||
<th style="width: 45%; text-align: right;"><?php echo $customer_rewards['package_name']; ?></th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th style='width: 55%;'><?php echo $this->lang->line("customers_available_points"); ?></th>
|
||||
<th style="width: 45%; text-align: right;"><?php echo $customer_rewards['points']; ?></th>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<tr>
|
||||
<th style='width: 55%;'><?php echo $this->lang->line("sales_customer_total"); ?></th>
|
||||
<th style="width: 45%; text-align: right;"><?php echo to_currency($customer_total); ?></th>
|
||||
|
||||
3
database/ospos_customers_alter.sql
Normal file
3
database/ospos_customers_alter.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE ospos_customers
|
||||
ADD COLUMN `package_id` int(11) DEFAULT NULL AFTER `discount_percent`,
|
||||
ADD COLUMN `points` int(11) DEFAULT NULL AFTER `package_id`;
|
||||
18
database/ospos_customers_packages.sql
Normal file
18
database/ospos_customers_packages.sql
Normal file
@@ -0,0 +1,18 @@
|
||||
--
|
||||
-- Table structure for table `ospos_customer_packages`
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `ospos_customers_packages` (
|
||||
`package_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`package_name` varchar(255) DEFAULT NULL,
|
||||
`points_percent` float NOT NULL DEFAULT '0',
|
||||
`deleted` int(1) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`package_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
|
||||
|
||||
INSERT INTO `ospos_customers_packages` (`package_id`, `package_name`, `points_percent`, `deleted`) VALUES
|
||||
(1, 'Default', 0, 0),
|
||||
(2, 'Bronze', 10, 0),
|
||||
(3, 'Silver', 20, 0),
|
||||
(4, 'Gold', 30, 0),
|
||||
(5, 'Premium', 50, 0);
|
||||
12
database/ospos_customers_points.sql
Normal file
12
database/ospos_customers_points.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
--
|
||||
-- Table structure for table `ospos_customer_points`
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `ospos_customers_points` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`person_id` int(11) NOT NULL,
|
||||
`package_id` int(11) NOT NULL,
|
||||
`sale_id` int(11) NOT NULL,
|
||||
`points_earned` int(11) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
|
||||
12
database/ospos_sales_reward_points.sql
Normal file
12
database/ospos_sales_reward_points.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
--
|
||||
-- Table structure for table `ospos_sales_reward_points`
|
||||
--
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `ospos_sales_reward_points` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`sale_id` int(11) NOT NULL,
|
||||
`earned` float NOT NULL,
|
||||
`used` float NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
|
||||
|
||||
Reference in New Issue
Block a user