From f95d777dc206d528e2285097498f2831cb3a1272 Mon Sep 17 00:00:00 2001 From: SteveIreland Date: Sat, 20 Jul 2019 15:20:16 -0400 Subject: [PATCH] Improves the behavior of dinner table selection. --- application/controllers/Sales.php | 29 +++++++++++--- application/libraries/Sale_lib.php | 4 +- application/models/Dinner_table.php | 60 ++++++++++++++++++++++++++++- application/models/Sale.php | 56 ++++++++++----------------- 4 files changed, 105 insertions(+), 44 deletions(-) diff --git a/application/controllers/Sales.php b/application/controllers/Sales.php index 7800965ab..f8b2a292a 100644 --- a/application/controllers/Sales.php +++ b/application/controllers/Sales.php @@ -176,11 +176,23 @@ class Sales extends Secure_Controller $this->sale_lib->set_sale_type(SALE_TYPE_RETURN); } + if($this->config->item('dinner_table_enable') == TRUE) + { + $occupied_dinner_table = $this->input->post('dinner_table'); + $released_dinner_table = $this->sale_lib->get_dinner_table(); + $occupied = $this->Dinner_table->is_occupied($released_dinner_table); + + if($occupied && ($occupied_dinner_table != $released_dinner_table)) + { + $this->Dinner_table->swap_tables($released_dinner_table, $occupied_dinner_table); + } + + $this->sale_lib->set_dinner_table($occupied_dinner_table); + } + $stock_location = $this->input->post('stock_location'); if(!$stock_location || $stock_location == $this->sale_lib->get_sale_location()) { - $dinner_table = $this->input->post('dinner_table'); - $this->sale_lib->set_dinner_table($dinner_table); } elseif($this->Stock_location->is_allowed_location($stock_location, 'sales')) @@ -508,6 +520,7 @@ class Sales extends Secure_Controller $sale_type = $this->sale_lib->get_sale_type(); $data = array(); $data['dinner_table'] = $this->sale_lib->get_dinner_table(); + $data['cart'] = $this->sale_lib->get_cart(); $data['include_hsn'] = ($this->config->item('include_hsn') == '1'); @@ -1051,8 +1064,8 @@ class Sales extends Secure_Controller $data['modes'] = $this->sale_lib->get_register_mode_options(); $data['mode'] = $this->sale_lib->get_mode(); - $data['empty_tables'] = $this->sale_lib->get_empty_tables(); $data['selected_table'] = $this->sale_lib->get_dinner_table(); + $data['empty_tables'] = $this->sale_lib->get_empty_tables($data['selected_table']); $data['stock_locations'] = $this->Stock_location->get_allowed_locations('sales'); $data['stock_location'] = $this->sale_lib->get_sale_location(); $data['tax_exclusive_subtotal'] = $this->sale_lib->get_subtotal(TRUE, TRUE); @@ -1332,6 +1345,13 @@ class Sales extends Secure_Controller if($sale_id != -1 && $sale_id != '') { $sale_type = $this->sale_lib->get_sale_type(); + + if($this->config->item('dinner_table_enable') == TRUE) + { + $dinner_table = $this->sale_lib->get_dinner_table(); + $this->Dinner_table->release($dinner_table); + } + if($sale_type == SALE_TYPE_WORK_ORDER) { $this->Sale->update_sale_status($sale_id, CANCELED); @@ -1366,18 +1386,15 @@ class Sales extends Secure_Controller */ public function suspend() { - $mode = $this->sale_lib->get_mode(); $sale_id = $this->sale_lib->get_sale_id(); $dinner_table = $this->sale_lib->get_dinner_table(); $cart = $this->sale_lib->get_cart(); $payments = $this->sale_lib->get_payments(); $employee_id = $this->Employee->get_logged_in_employee_info()->person_id; $customer_id = $this->sale_lib->get_customer(); - $customer_info = $this->Customer->get_info($customer_id); $invoice_number = $this->sale_lib->get_invoice_number(); $work_order_number = $this->sale_lib->get_work_order_number(); $quote_number = $this->sale_lib->get_quote_number(); - $sale_id = $this->sale_lib->get_sale_id(); $sale_type = $this->sale_lib->get_sale_type(); if($sale_type == '') { diff --git a/application/libraries/Sale_lib.php b/application/libraries/Sale_lib.php index 7ed991558..2e5e2758e 100644 --- a/application/libraries/Sale_lib.php +++ b/application/libraries/Sale_lib.php @@ -1284,9 +1284,9 @@ class Sale_lib return $total; } - public function get_empty_tables() + public function get_empty_tables($current_dinner_table_id) { - return $this->CI->Dinner_table->get_empty_tables(); + return $this->CI->Dinner_table->get_empty_tables($current_dinner_table_id); } public function check_for_cash_rounding($total) diff --git a/application/models/Dinner_table.php b/application/models/Dinner_table.php index 6d46f1097..fa55b3573 100644 --- a/application/models/Dinner_table.php +++ b/application/models/Dinner_table.php @@ -31,10 +31,11 @@ class Dinner_table extends CI_Model /** Get empty tables */ - public function get_empty_tables() + public function get_empty_tables($current_dinner_table_id) { $this->db->from('dinner_tables'); $this->db->where('status', 0); + $this->db->or_where('dinner_table_id', $current_dinner_table_id); $this->db->where('deleted', 0); $empty_tables = $this->db->get()->result_array(); @@ -63,6 +64,21 @@ class Dinner_table extends CI_Model } } + public function is_occupied($dinner_table_id) + { + if(empty($dinner_table_id)) + { + return FALSE; + } + else + { + $this->db->from('dinner_tables'); + $this->db->where('dinner_table_id', $dinner_table_id); + + return ($this->db->get()->row()->status == 1); + } + } + public function get_all() { $this->db->from('dinner_tables'); @@ -80,5 +96,47 @@ class Dinner_table extends CI_Model return $this->db->update('dinner_tables', array('deleted' => 1)); } + + /** + * Occupy table + * Ignore the Delivery and Takeaway "tables". They should never be occupied. + */ + public function occupy($dinner_table_id) + { + if($dinner_table_id > 2 ) + { + $this->db->where('dinner_table_id', $dinner_table_id); + return $this->db->update('dinner_tables', array('status' => 1)); + } + else + { + return true; + } + } + + /** + Release table + */ + public function release($dinner_table_id) + { + if($dinner_table_id > 2 ) + { + $this->db->where('dinner_table_id', $dinner_table_id); + return $this->db->update('dinner_tables', array('status' => 0)); + } + else + { + return true; + } + } + + /** + Swap tables + */ + public function swap_tables($release_dinner_table_id, $occupy_dinner_table_id) + { + return $this->release($release_dinner_table_id) && $this->occupy($occupy_dinner_table_id); + } + } ?> diff --git a/application/models/Sale.php b/application/models/Sale.php index 8a0743b43..e0792214f 100644 --- a/application/models/Sale.php +++ b/application/models/Sale.php @@ -609,8 +609,6 @@ class Sale extends CI_Model return -1; } - $table_status = $this->determine_sale_status($sale_status, $dinner_table); - $sales_data = array( 'sale_time' => date('Y-m-d H:i:s'), 'customer_id' => $this->Customer->exists($customer_id) ? $customer_id : NULL, @@ -738,12 +736,17 @@ class Sale extends CI_Model $this->save_sales_items_taxes($sale_id, $sales_taxes[1]); } - $dinner_table_data = array( - 'status' => $table_status - ); - - $this->db->where('dinner_table_id',$dinner_table); - $this->db->update('dinner_tables', $dinner_table_data); + if($this->config->item('dinner_table_enable') == TRUE) + { + if($sale_status == COMPLETED) + { + $this->Dinner_table->release($dinner_table); + } + else + { + $this->Dinner_table->occupy($dinner_table); + } + } $this->db->trans_complete(); @@ -1358,13 +1361,11 @@ class Sale extends CI_Model //Run these queries as a transaction, we want to make sure we do all or nothing $this->db->trans_start(); - $dinner_table = $this->get_dinner_table($sale_id); - $dinner_table_data = array( - 'status' => 0 - ); - - $this->db->where('dinner_table_id', $dinner_table); - $this->db->update('dinner_tables', $dinner_table_data); + if($this->config->item('dinner_table_enable') == TRUE) + { + $dinner_table = $this->get_dinner_table($sale_id); + $this->Dinner_table->release($dinner_table); + } $this->update_sale_status($sale_id, CANCELED); @@ -1381,13 +1382,12 @@ class Sale extends CI_Model { $this->db->trans_start(); - $dinner_table = $this->get_dinner_table($sale_id); - $dinner_table_data = array( - 'status' => 0 - ); - $this->db->where('dinner_table_id', $dinner_table); - $this->db->update('dinner_tables', $dinner_table_data); + if($this->config->item('dinner_table_enable') == TRUE) + { + $dinner_table = $this->get_dinner_table($sale_id); + $this->Dinner_table->release($dinner_table); + } $this->db->delete('sales_payments', array('sale_id' => $sale_id)); $this->db->delete('sales_items_taxes', array('sale_id' => $sale_id)); @@ -1438,19 +1438,5 @@ class Sale extends CI_Model } } - /** - * @param $sale_status - * @param $dinner_table - * @return int - */ - private function determine_sale_status(&$sale_status, $dinner_table) - { - if($sale_status == SUSPENDED && $dinner_table > 2) //not delivery or take away - { - return SUSPENDED; - } - - return COMPLETED; - } } ?>