diff --git a/application/config/autoload.php b/application/config/autoload.php index 68414ead9..1dd9072e6 100644 --- a/application/config/autoload.php +++ b/application/config/autoload.php @@ -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'); diff --git a/application/config/config.php b/application/config/config.php index c8c1d6bb6..7a89b41a2 100644 --- a/application/config/config.php +++ b/application/config/config.php @@ -358,7 +358,7 @@ $config['cache_query_string'] = FALSE; | https://codeigniter.com/user_guide/libraries/encryption.html | */ -$config['encryption_key'] = ''; +$config['encryption_key'] = 'ec58a27d5854523044e3283b673a97c1deb59fe1e6f2ca7f77ed5e0f4c5aa02a'; /* |-------------------------------------------------------------------------- diff --git a/application/controllers/Config.php b/application/controllers/Config.php index 7c4b0e4e2..103115b1b 100644 --- a/application/controllers/Config.php +++ b/application/controllers/Config.php @@ -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( diff --git a/application/controllers/Customers.php b/application/controllers/Customers.php index 19296dd0a..8117831af 100644 --- a/application/controllers/Customers.php +++ b/application/controllers/Customers.php @@ -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 ); diff --git a/application/controllers/Sales.php b/application/controllers/Sales.php index 3746de6e5..bf3dddf5b 100644 --- a/application/controllers/Sales.php +++ b/application/controllers/Sales.php @@ -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) { diff --git a/application/language/en/config_lang.php b/application/language/en/config_lang.php index 7e29a05da..a08d34625 100644 --- a/application/language/en/config_lang.php +++ b/application/language/en/config_lang.php @@ -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"; diff --git a/application/language/en/customers_lang.php b/application/language/en/customers_lang.php index 24dc8c640..2ad0d75f3 100644 --- a/application/language/en/customers_lang.php +++ b/application/language/en/customers_lang.php @@ -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"; diff --git a/application/language/en/sales_lang.php b/application/language/en/sales_lang.php index e22361e0d..8506a919f 100644 --- a/application/language/en/sales_lang.php +++ b/application/language/en/sales_lang.php @@ -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!"; \ No newline at end of file diff --git a/application/libraries/Sale_lib.php b/application/libraries/Sale_lib.php index 4c223641e..61ef62993 100644 --- a/application/libraries/Sale_lib.php +++ b/application/libraries/Sale_lib.php @@ -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); diff --git a/application/models/Customer.php b/application/models/Customer.php index 2a9a86df3..4e35a4b83 100644 --- a/application/models/Customer.php +++ b/application/models/Customer.php @@ -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 */ diff --git a/application/models/Customer_rewards.php b/application/models/Customer_rewards.php new file mode 100644 index 000000000..df2da2d04 --- /dev/null +++ b/application/models/Customer_rewards.php @@ -0,0 +1,84 @@ +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(); + } +} +?> \ No newline at end of file diff --git a/application/models/Rewards.php b/application/models/Rewards.php new file mode 100644 index 000000000..6574fe98b --- /dev/null +++ b/application/models/Rewards.php @@ -0,0 +1,27 @@ +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); + } + +} +?> diff --git a/application/models/Sale.php b/application/models/Sale.php index fe9729486..978426d67 100644 --- a/application/models/Sale.php +++ b/application/models/Sale.php @@ -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; } diff --git a/application/views/configs/manage.php b/application/views/configs/manage.php index 890dd89e3..bd8b28038 100644 --- a/application/views/configs/manage.php +++ b/application/views/configs/manage.php @@ -19,6 +19,9 @@
  • lang->line('config_table'); ?>
  • +
  • + lang->line('config_reward'); ?> +
  • lang->line('config_receipt'); ?>
  • @@ -55,6 +58,9 @@
    load->view("configs/table_config"); ?>
    +
    + load->view("configs/reward_config"); ?> +
    load->view("configs/receipt_config"); ?>
    diff --git a/application/views/configs/reward_config.php b/application/views/configs/reward_config.php new file mode 100644 index 000000000..2c0e0fd72 --- /dev/null +++ b/application/views/configs/reward_config.php @@ -0,0 +1,161 @@ + 'reward_config_form', 'class' => 'form-horizontal')); ?> +
    +
    +
    lang->line('common_fields_required_message'); ?>
    + + +
    + lang->line('config_customer_reward_enable'), 'customer_reward_enable', array('class' => 'control-label col-xs-2')); ?> +
    + 'customer_reward_enable', + 'value' => 'customer_reward_enable', + 'id' => 'customer_reward_enable', + 'checked' => $this->config->item('customer_reward_enable')));?> +
    +
    + +
    + load->view('partial/customer_rewards', array('customer_rewards' => $customer_rewards)); ?> +
    + + 'submit', + 'id' => 'submit', + 'value'=>$this->lang->line('common_submit'), + 'class' => 'btn btn-primary btn-sm pull-right')); ?> +
    +
    + + + diff --git a/application/views/customers/form.php b/application/views/customers/form.php index c5375039c..af1590821 100644 --- a/application/views/customers/form.php +++ b/application/views/customers/form.php @@ -65,6 +65,26 @@ +
    + lang->line('rewards_package'), 'rewards', array('class'=>'control-label col-xs-3')); ?> +
    + 'form-control')); ?> +
    +
    + +
    + lang->line('customers_available_points'), 'available_points', array('class' => 'control-label col-xs-3')); ?> +
    + 'available_points', + 'id'=>'available_points', + 'class'=>'form-control input-sm', + 'value'=>$person_info->points, + 'disabled'=>'') + );?> +
    +
    +
    lang->line('customers_taxable'), 'taxable', array('class' => 'control-label col-xs-3')); ?>
    diff --git a/application/views/partial/customer_rewards.php b/application/views/partial/customer_rewards.php new file mode 100644 index 000000000..6a668cd89 --- /dev/null +++ b/application/views/partial/customer_rewards.php @@ -0,0 +1,41 @@ +$table) +{ + $customer_reward_id = $table['package_id']; + $customer_reward_name = $table['package_name']; + $customer_points_percent = $table['points_percent']; + ++$i; +?> +
    + lang->line('config_customer_reward') . ' ' . $i, 'customer_reward_' . $i, array('class'=>'required control-label col-xs-2')); ?> +
    + '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); + ?> +
    +
    + '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); + ?> +
    + +    + +
    + diff --git a/application/views/sales/register.php b/application/views/sales/register.php index 8dac8bd25..f4b1a1d07 100644 --- a/application/views/sales/register.php +++ b/application/views/sales/register.php @@ -290,6 +290,21 @@ if (isset($success)) lang->line("sales_customer_discount"); ?> + + + lang->line("rewards_package"); ?> + + + + lang->line("customers_available_points"); ?> + + + lang->line("sales_customer_total"); ?> diff --git a/database/ospos_customers_alter.sql b/database/ospos_customers_alter.sql new file mode 100644 index 000000000..bbf6d85b7 --- /dev/null +++ b/database/ospos_customers_alter.sql @@ -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`; \ No newline at end of file diff --git a/database/ospos_customers_packages.sql b/database/ospos_customers_packages.sql new file mode 100644 index 000000000..75d624c84 --- /dev/null +++ b/database/ospos_customers_packages.sql @@ -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); \ No newline at end of file diff --git a/database/ospos_customers_points.sql b/database/ospos_customers_points.sql new file mode 100644 index 000000000..416347b17 --- /dev/null +++ b/database/ospos_customers_points.sql @@ -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 ; diff --git a/database/ospos_sales_reward_points.sql b/database/ospos_sales_reward_points.sql new file mode 100644 index 000000000..3a5638d93 --- /dev/null +++ b/database/ospos_sales_reward_points.sql @@ -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 ; +