2011-01-10 19:49:11 +00:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
using System.Text ;
2011-01-30 07:14:05 +00:00
using Tanshu.Accounts.Repository ;
2011-01-10 19:49:11 +00:00
using Tanshu.Accounts.Helpers ;
using Tanshu.Accounts.Contracts ;
using System.Windows.Forms ;
using Tanshu.Common ;
2011-01-30 07:14:05 +00:00
using Tanshu.Accounts.Entities ;
using Tanshu.Accounts.Entities.Auth ;
using Tanshu.Accounts.SqlDAO ;
2011-01-31 20:33:22 +00:00
using System.Collections.ObjectModel ;
2011-01-30 07:14:05 +00:00
2011-01-10 19:49:11 +00:00
namespace Tanshu.Accounts.PointOfSale
{
public class BillController
{
2011-02-18 16:54:48 +00:00
private Voucher billInfo ;
2011-01-30 07:14:05 +00:00
private OrderedDictionary < BillItemKey , BillInventory > bill = new OrderedDictionary < BillItemKey , BillInventory > ( ) ;
2011-02-09 12:03:22 +00:00
int? editVoucherID ;
2011-01-10 19:49:11 +00:00
ISaleForm saleForm ;
2011-01-30 07:14:05 +00:00
private Customer customer = new CustomerBI ( ) . GetCustomer ( 1 ) ;
2011-02-09 12:03:22 +00:00
public BillController ( int? editVoucherID )
{
this . editVoucherID = editVoucherID ;
}
2011-01-10 19:49:11 +00:00
public void InitGui ( ISaleForm saleForm )
{
this . saleForm = saleForm ;
this . saleForm . SetCustomerDisplay ( customer . Name ) ;
this . saleForm . SetUserName ( Session . User . Name ) ;
}
private void InitComponents ( )
{
InitModel ( ) ;
InitView ( ) ;
}
private void InitView ( )
{
throw new NotImplementedException ( ) ;
}
private void InitModel ( )
{
throw new NotImplementedException ( ) ;
}
2011-01-30 07:14:05 +00:00
public void AddProductToGrid ( int productID )
2011-01-10 19:49:11 +00:00
{
2011-02-09 12:03:22 +00:00
new BillHelperFunctions ( saleForm . BindingSource , bill , productID ) . AddProduct ( ) ;
2011-01-30 07:14:05 +00:00
Product product = ProductBI . GetProduct ( productID ) ;
if ( ProductGroupModifierBI . HasCompulsoryModifier ( product . ProductGroup . ProductGroupID ) )
{
var item = CurrentProduct ;
ShowModifiers ( product . ProductGroup . ProductGroupID , item ) ;
}
2011-01-10 19:49:11 +00:00
ShowAmount ( ) ;
2011-01-30 07:14:05 +00:00
}
2011-01-22 12:38:30 +00:00
2011-01-30 07:14:05 +00:00
public void ShowModifiers ( int productGroupID , BillInventory item )
{
2011-02-18 16:54:48 +00:00
if ( item . Printed )
2011-01-31 20:33:22 +00:00
return ;
2011-01-30 07:14:05 +00:00
var list = ProductGroupModifierBI . GetProductGroupModifiers ( productGroupID ) ;
using ( var frm = new ModifierForm ( list , item . Modifiers ) )
{
frm . ShowDialog ( ) ;
item . Modifiers = frm . Selection ;
}
2011-01-31 20:33:22 +00:00
ShowAmount ( ) ;
}
public void ShowDiscount ( )
{
2011-02-09 12:03:22 +00:00
if ( ! Session . IsAllowed ( RoleConstants . DISCOUNT ) )
return ;
2011-02-18 16:54:48 +00:00
var list = new ProductGroupBI ( ) . GetProductGroupTypes ( ) ;
2011-01-31 20:33:22 +00:00
using ( var frm = new DiscountForm ( list ) )
{
if ( frm . ShowDialog ( ) = = DialogResult . OK )
{
2011-02-18 16:54:48 +00:00
HashSet < string > outList ;
2011-01-31 20:33:22 +00:00
decimal discount = frm . Selection ( out outList ) ;
discount = discount / 100 ;
foreach ( var item in bill )
{
2011-02-18 16:54:48 +00:00
if ( item . Key . KotID = = - 1 )
continue ;
2011-01-31 20:33:22 +00:00
var pg = new ProductGroupBI ( ) . GetProductGroupOfProduct ( item . Value . ProductID ) ;
2011-02-18 16:54:48 +00:00
if ( outList . Contains ( pg . GroupType ) )
2011-02-09 12:03:22 +00:00
new BillHelperFunctions ( saleForm . BindingSource , bill , item . Value . ProductID ) . SetDiscount ( item . Value . Name , discount ) ;
2011-01-31 20:33:22 +00:00
}
}
}
ShowAmount ( ) ;
2011-01-10 19:49:11 +00:00
}
2011-01-30 07:14:05 +00:00
2011-01-10 19:49:11 +00:00
public void ShowCustomerList ( bool reset )
{
2011-01-30 07:14:05 +00:00
if ( ( customer . CustomerID = = 1 ) & & ( ! reset ) )
2011-01-10 19:49:11 +00:00
{
using ( SelectCustomer selectCustomer = new SelectCustomer ( new CustomerBI ( ) . GetFilteredCustomers , true ) )
{
selectCustomer . customerEvent + = new CustomerEventHandler ( selectCustomer_customerEvent ) ;
selectCustomer . ShowDialog ( ) ;
if ( selectCustomer . SelectedItem ! = null )
{
customer = selectCustomer . SelectedItem ;
saleForm . SetCustomerDisplay ( customer . Name ) ;
}
else
{
2011-01-30 07:14:05 +00:00
customer = new CustomerBI ( ) . GetCustomer ( 1 ) ;
2011-01-10 19:49:11 +00:00
}
}
}
else
{
2011-01-30 07:14:05 +00:00
customer = new CustomerBI ( ) . GetCustomer ( 1 ) ;
2011-01-10 19:49:11 +00:00
saleForm . SetCustomerDisplay ( customer . Name ) ;
}
}
#region Save
// if (btnWaiter.Tag == null)
2011-01-30 07:14:05 +00:00
//btnWaiter.Tag = WaiterBI.GetWaiters()[0].WaiterID;
2011-01-10 19:49:11 +00:00
2011-01-30 07:14:05 +00:00
public void Save ( bool print , int waiterID , string tableID )
2011-01-10 19:49:11 +00:00
{
2011-02-18 16:54:48 +00:00
2011-02-09 12:03:22 +00:00
if ( print & & ! Session . IsAllowed ( RoleConstants . PRINT_BILL ) )
return ;
if ( ! print & & ! Session . IsAllowed ( RoleConstants . PRINT_KOT ) )
return ;
2011-02-18 16:54:48 +00:00
if ( ( billInfo ! = null ) & & ( VoucherBI . IsBillPrinted ( billInfo . VoucherID ) ) & & ( ! Session . IsAllowed ( RoleConstants . EDIT_PRINTED_BILL ) ) )
2011-02-09 12:03:22 +00:00
return ;
2011-02-18 16:54:48 +00:00
if ( bill . Count = = 1 ) //new kot only
2011-02-09 12:03:22 +00:00
return ;
2011-02-18 16:54:48 +00:00
if ( print )
ShowDiscount ( ) ;
2011-02-09 12:03:22 +00:00
int? saved ;
if ( billInfo = = null )
saved = InsertVoucher ( print , waiterID , tableID ) ;
else
saved = UpdateSale ( print , waiterID , tableID ) ;
2011-02-18 16:54:48 +00:00
if ( editVoucherID . HasValue )
saleForm . CloseWindow ( ) ;
else
2011-01-10 19:49:11 +00:00
{
2011-02-18 16:54:48 +00:00
int kotID = 0 ;
if ( ! print & & saved . HasValue )
kotID = saved . Value ;
if ( print | | kotID ! = 0 )
PrintBill ( billInfo . VoucherID , kotID ) ;
2011-01-10 19:49:11 +00:00
}
2011-02-09 12:03:22 +00:00
ClearBill ( ) ;
2011-01-10 19:49:11 +00:00
}
2011-02-09 12:03:22 +00:00
private int? InsertVoucher ( bool finalBill , int waiterID , string tableID )
2011-01-10 19:49:11 +00:00
{
if ( billInfo ! = null )
{
2011-02-09 12:03:22 +00:00
MessageBox . Show ( "Error in InsertVoucher, there is a previous sale in memory" , "Error" ) ;
2011-01-10 19:49:11 +00:00
return null ;
}
2011-02-18 16:54:48 +00:00
#region Voucher
billInfo = new Voucher
2011-01-10 19:49:11 +00:00
{
2011-01-30 07:14:05 +00:00
Customer = customer ,
2011-02-18 16:54:48 +00:00
Settled = SettleOption . Unsettled ,
2011-01-10 19:49:11 +00:00
//Paid = finalBill,
TableID = tableID ,
2011-01-30 07:14:05 +00:00
Waiter = WaiterBI . GetWaiter ( waiterID ) ,
2011-01-10 19:49:11 +00:00
Printed = finalBill ,
Void = false ,
Date = DateTime . Now ,
Narration = "" ,
2011-01-30 07:14:05 +00:00
User = Session . User
2011-01-10 19:49:11 +00:00
} ;
#endregion
#region Inventories
2011-02-18 16:54:48 +00:00
var kot = GetKotForBill ( ) ;
if ( kot ! = null )
billInfo . Kots . Add ( kot ) ;
2011-01-10 19:49:11 +00:00
#endregion
2011-02-18 16:54:48 +00:00
return VoucherBI . Insert ( billInfo ) ;
2011-01-10 19:49:11 +00:00
}
2011-01-30 07:14:05 +00:00
private int? UpdateSale ( bool finalBill , int waiterID , string tableID )
2011-01-10 19:49:11 +00:00
{
2011-02-18 16:54:48 +00:00
#region Voucher
2011-01-30 07:14:05 +00:00
billInfo . User = Session . User ;
billInfo . Customer = customer ;
if ( ! billInfo . Printed & & finalBill )
billInfo . Date = null ;
billInfo . Printed = billInfo . Printed | | finalBill ;
billInfo . TableID = tableID ;
billInfo . Waiter = WaiterBI . GetWaiter ( waiterID ) ;
2011-02-18 16:54:48 +00:00
var kot = GetKotForBill ( ) ;
if ( kot ! = null )
billInfo . Kots . Add ( kot ) ;
2011-01-10 19:49:11 +00:00
#endregion
#region Inventory
#endregion
2011-02-18 16:54:48 +00:00
return VoucherBI . Update ( billInfo ) ;
2011-01-30 07:14:05 +00:00
}
2011-02-18 16:54:48 +00:00
private Kot GetKotForBill ( )
2011-01-30 07:14:05 +00:00
{
2011-02-18 16:54:48 +00:00
var kot = new Kot ( ) ;
foreach ( var item in bill )
2011-01-30 07:14:05 +00:00
{
2011-02-18 16:54:48 +00:00
if ( item . Key . KotID = = - 1 | | item . Value . Quantity = = 0 )
continue ;
else if ( item . Key . KotID ! = 0 )
2011-01-30 07:14:05 +00:00
{
2011-02-18 16:54:48 +00:00
var oldKot = billInfo . Kots . Where ( x = > x . KotID = = item . Key . KotID ) . Single ( ) ;
var inv = oldKot . Inventories . Where ( x = > x . Product . ProductID = = item . Key . ProductID ) . Single ( ) ;
inv . Rate = item . Value . Price ;
inv . Discount = item . Value . Discount ;
2011-01-30 07:14:05 +00:00
}
else
{
2011-02-18 16:54:48 +00:00
Inventory temp = new Inventory ( ) ;
temp . Product = ProductBI . GetProduct ( item . Key . ProductID ) ;
temp . Quantity = item . Value . Quantity ;
temp . Rate = item . Value . Price ;
temp . Discount = item . Value . Discount ;
temp . ServiceCharge = item . Value . ServiceCharge ;
temp . Tax = item . Value . Tax ;
foreach ( var mod in item . Value . Modifiers )
2011-01-31 20:33:22 +00:00
temp . InventoryModifier . Add ( new InventoryModifier ( ) { Modifier = mod } ) ;
2011-02-18 16:54:48 +00:00
kot . Inventories . Add ( temp ) ;
2011-01-30 07:14:05 +00:00
}
}
2011-02-18 16:54:48 +00:00
if ( kot . Inventories . Count = = 0 )
return null ;
else
return kot ;
2011-01-10 19:49:11 +00:00
}
#endregion
public void VoidBill ( )
{
2011-01-31 20:33:22 +00:00
if ( billInfo = = null )
return ;
if ( ! billInfo . Printed )
return ;
2011-02-09 12:03:22 +00:00
if ( Session . IsAllowed ( RoleConstants . VOID_BILL ) )
2011-01-10 19:49:11 +00:00
{
2011-02-09 12:03:22 +00:00
if ( MessageBox . Show ( "Are you sure you want to void this bill?" , "Void Bill" , MessageBoxButtons . YesNo , MessageBoxIcon . Question , MessageBoxDefaultButton . Button2 ) = = DialogResult . Yes )
2011-01-10 19:49:11 +00:00
{
2011-02-09 12:03:22 +00:00
SelectVoidReason voidReason = new SelectVoidReason ( GetVoidReason , true ) ;
voidReason . ShowDialog ( ) ;
if ( voidReason . SelectedItem ! = null )
2011-01-10 19:49:11 +00:00
{
2011-02-18 16:54:48 +00:00
VoucherBI . VoidBill ( billInfo . VoucherID , voidReason . SelectedItem . Description ) ;
2011-02-09 12:03:22 +00:00
ClearBill ( ) ;
}
else
{
MessageBox . Show ( "Please Select a reason if you want to void the bill" , "Bill NOT Voided" , MessageBoxButtons . OK , MessageBoxIcon . Asterisk ) ;
2011-01-10 19:49:11 +00:00
}
}
}
}
2011-01-30 07:14:05 +00:00
Customer selectCustomer_customerEvent ( object sender , CustomerEventArgs e )
2011-01-10 19:49:11 +00:00
{
using ( CustomersForm form = new CustomersForm ( e . CustomerID , e . Phone ) )
{
form . ShowDialog ( ) ;
return form . Customer ;
}
}
2011-02-18 16:54:48 +00:00
private void PrintBill ( int voucherID , int kotID )
2011-01-10 19:49:11 +00:00
{
2011-02-18 16:54:48 +00:00
if ( kotID = = 0 )
Accounts . Print . Thermal . PrintBill ( voucherID ) ;
2011-01-10 19:49:11 +00:00
else
2011-02-18 16:54:48 +00:00
Accounts . Print . Thermal . PrintKot ( voucherID , kotID ) ;
2011-01-10 19:49:11 +00:00
}
private List < StringType > GetVoidReason ( Dictionary < string , string > filter )
{
List < StringType > list = new List < StringType > ( ) ;
list . Add ( new StringType ( "Discount" ) ) ;
list . Add ( new StringType ( "Printing Fault" ) ) ;
list . Add ( new StringType ( "Item Changed" ) ) ;
list . Add ( new StringType ( "Quantity Reduced" ) ) ;
list . Add ( new StringType ( "Costing Bill for Party" ) ) ;
list . Add ( new StringType ( "Cashier Mistake" ) ) ;
list . Add ( new StringType ( "Management Freesale" ) ) ;
list . Add ( new StringType ( "Other" ) ) ;
return list . Where ( i = > i . Description . ToLower ( ) . Contains ( filter [ "Name" ] . ToLower ( ) . Trim ( ) ) ) . ToList ( ) ;
}
2011-01-30 07:14:05 +00:00
public BillInventory CurrentProduct
2011-01-10 19:49:11 +00:00
{
2011-01-30 07:14:05 +00:00
get
{
2011-02-09 12:03:22 +00:00
if ( saleForm . BindingSource . Position = = - 1 )
return null ;
else
2011-02-18 16:54:48 +00:00
{
var item = bill . ElementAt ( saleForm . BindingSource . Position ) ;
if ( item . Key . KotID = = - 1 )
return null ;
else
return item . Value ;
}
}
}
public BillInventory CurrentKot
{
get
{
if ( saleForm . BindingSource . Position = = - 1 )
return null ;
else
{
var item = bill . ElementAt ( saleForm . BindingSource . Position ) ;
if ( item . Key . KotID ! = - 1 )
return null ;
else if ( item . Key . ProductID = = 0 )
return null ;
else
return item . Value ;
}
2011-01-30 07:14:05 +00:00
}
2011-01-10 19:49:11 +00:00
}
private void ShowAmount ( )
{
2011-01-30 07:14:05 +00:00
//saleForm.BindingSource.CurrencyManager.Position = 1;
2011-01-17 14:55:43 +00:00
decimal taxAmount = bill . Values . Sum ( b = > b . TaxAmount ) ;
decimal discountAmount = bill . Values . Sum ( b = > b . DiscountAmount ) ;
2011-01-10 19:49:11 +00:00
decimal grossAmount = bill . Values . Sum ( b = > b . GrossAmount ) ;
2011-01-17 14:55:43 +00:00
decimal valueAmount = bill . Values . Sum ( b = > b . Value ) ;
decimal serviceChargeAmount = bill . Values . Sum ( b = > b . ServiceChargeAmount ) ;
2011-01-10 19:49:11 +00:00
//bill.Values.ToList();
2011-01-17 14:55:43 +00:00
saleForm . ShowAmount ( discountAmount , grossAmount , serviceChargeAmount , taxAmount , valueAmount , bill . Values . ToList ( ) ) ;
2011-01-10 19:49:11 +00:00
}
2011-02-09 12:03:22 +00:00
public void ProductRemove ( )
2011-01-10 19:49:11 +00:00
{
2011-02-09 12:03:22 +00:00
var item = CurrentProduct ;
if ( ! Allowed ( item ) )
2011-01-30 07:14:05 +00:00
return ;
2011-02-18 16:54:48 +00:00
if ( item . Printed )
return ;
bill . Remove ( new BillItemKey ( item . ProductID , 0 ) ) ;
2011-02-04 19:30:55 +00:00
bill . ReCompact ( ) ;
2011-01-30 07:14:05 +00:00
ShowAmount ( ) ;
2011-01-10 19:49:11 +00:00
}
2011-01-30 07:14:05 +00:00
2011-02-09 12:03:22 +00:00
public void SetQuantity ( decimal quantity , bool prompt )
2011-01-10 19:49:11 +00:00
{
2011-02-09 12:03:22 +00:00
var item = CurrentProduct ;
if ( ! Allowed ( item ) )
2011-01-10 19:49:11 +00:00
return ;
2011-02-09 12:03:22 +00:00
new BillHelperFunctions ( saleForm . BindingSource , bill , CurrentProduct . ProductID ) . SetQuantity ( item , quantity , prompt ) ;
2011-01-10 19:49:11 +00:00
ShowAmount ( ) ;
}
2011-01-30 07:14:05 +00:00
public void ChangeRate ( )
2011-01-10 19:49:11 +00:00
{
2011-02-18 16:54:48 +00:00
var item = CurrentProduct ;
if ( ! Allowed ( item ) )
return ;
2011-02-09 12:03:22 +00:00
new BillHelperFunctions ( saleForm . BindingSource , bill , CurrentProduct . ProductID ) . SetPrice ( CurrentProduct ) ;
ShowAmount ( ) ;
2011-01-10 19:49:11 +00:00
}
2011-02-09 12:03:22 +00:00
private bool Allowed ( BillInventory item , RoleConstants role )
{
if ( item = = null )
return false ;
if ( ! Session . IsAllowed ( role ) )
return false ;
return true ;
}
private bool Allowed ( BillInventory item )
{ return item ! = null ; }
2011-01-10 19:49:11 +00:00
private void InputBox_Validating ( object sender , InputBoxValidatingArgs e )
{
}
2011-01-30 07:14:05 +00:00
private void LoadBill ( int voucherID )
2011-01-10 19:49:11 +00:00
{
ClearBill ( ) ;
2011-02-18 16:54:48 +00:00
bill . Clear ( ) ;
billInfo = null ;
billInfo = VoucherBI . GetSaleVoucher ( voucherID ) ;
2011-01-10 19:49:11 +00:00
2011-01-30 07:14:05 +00:00
this . customer = billInfo . Customer ;
saleForm . ShowInfo ( billInfo . BillID , billInfo . KotID , billInfo . CreationDate , billInfo . Date . Value , billInfo . LastEditDate , customer . Name , billInfo . TableID , billInfo . Waiter . WaiterID , billInfo . Waiter . Name ) ;
2011-01-10 19:49:11 +00:00
2011-02-18 16:54:48 +00:00
foreach ( var kot in billInfo . Kots )
2011-01-10 19:49:11 +00:00
{
2011-02-18 16:54:48 +00:00
BillItemKey kotKey = new BillItemKey ( kot . KotID , - 1 ) ;
var kotItem = new BillInventory
2011-01-10 19:49:11 +00:00
{
2011-02-18 16:54:48 +00:00
ProductID = kot . KotID ,
Discount = 0 ,
Name = string . Format ( "Kot No.: {0} / KotID {1}" , kot . KotID , kot . Code ) ,
Price = 0 ,
Printed = true ,
Quantity = 0 ,
Tax = - 1 ,
ServiceCharge = 0 ,
2011-01-30 07:14:05 +00:00
} ;
2011-02-18 16:54:48 +00:00
bill . Add ( kotKey , kotItem ) ;
foreach ( var inv in kot . Inventories )
{
BillItemKey key = new BillItemKey ( inv . Product . ProductID , kot . KotID ) ;
var item = new BillInventory
{
ProductID = inv . Product . ProductID ,
Discount = inv . Discount ,
Name = inv . Product . Units = = string . Empty ? inv . Product . Name : inv . Product . Name + " (" + inv . Product . Units + ")" ,
Price = inv . Rate ,
Printed = true ,
Quantity = inv . Quantity ,
Tax = inv . Tax ,
ServiceCharge = inv . ServiceCharge ,
} ;
foreach ( var mod in inv . InventoryModifier )
item . Modifiers . Add ( mod . Modifier ) ;
bill . Add ( key , item ) ;
}
2011-01-10 19:49:11 +00:00
}
2011-02-18 16:54:48 +00:00
BillItemKey newKotKey = new BillItemKey ( 0 , - 1 ) ;
var newKotItem = new BillInventory
{
ProductID = 0 ,
Discount = 0 ,
Name = "== New Kot ==" ,
Price = 0 ,
Printed = true ,
Quantity = 0 ,
Tax = - 1 ,
ServiceCharge = 0 ,
} ;
bill . Add ( newKotKey , newKotItem ) ;
2011-01-10 19:49:11 +00:00
ShowAmount ( ) ;
}
2011-01-13 20:21:02 +00:00
public void LoadBillFromTable ( string tableName )
2011-01-10 19:49:11 +00:00
{
2011-01-13 20:21:02 +00:00
if ( ! string . IsNullOrEmpty ( tableName ) )
2011-01-10 19:49:11 +00:00
{
2011-02-18 16:54:48 +00:00
var table = new FoodTableBI ( ) . GetByName ( tableName ) ;
if ( table ! = null & & table . VoucherID ! = 0 )
2011-01-10 19:49:11 +00:00
{
2011-02-18 16:54:48 +00:00
LoadBill ( table . VoucherID ) ;
2011-01-13 20:21:02 +00:00
}
}
else
{
2011-01-31 20:33:22 +00:00
InputBoxResult result = InputBox . Show ( "Table Number" , "0" , InputBox_Validating ) ;
2011-01-13 20:21:02 +00:00
if ( result . OK )
{
string tableID = result . Text . Trim ( ) ;
if ( ( tableID ! = "C" ) & & ( tableID ! = "" ) & & ( ! tableID . Contains ( "." ) ) )
2011-01-10 19:49:11 +00:00
{
2011-02-18 16:54:48 +00:00
var table = new FoodTableBI ( ) . GetByName ( tableName ) ;
if ( table ! = null & & table . VoucherID ! = 0 )
2011-01-13 20:21:02 +00:00
{
2011-02-18 16:54:48 +00:00
LoadBill ( table . VoucherID ) ;
2011-01-13 20:21:02 +00:00
}
2011-01-10 19:49:11 +00:00
}
2011-01-13 20:21:02 +00:00
else
ClearBill ( ) ;
2011-01-10 19:49:11 +00:00
}
}
}
public void CancelBillChanges ( )
{
2011-02-18 16:54:48 +00:00
if ( bill . Count ! = 0 & & bill . Values . Any ( i = > i . Printed = = false ) )
2011-02-09 12:03:22 +00:00
if ( MessageBox . Show ( "Abandon Changes?" , "Abandon Changes" , MessageBoxButtons . YesNo , MessageBoxIcon . Question , MessageBoxDefaultButton . Button2 ) = = DialogResult . No )
2011-01-10 19:49:11 +00:00
return ;
ClearBill ( ) ;
}
public void ClearBill ( )
{
billInfo = null ;
ShowCustomerList ( true ) ;
bill . Clear ( ) ;
2011-02-18 16:54:48 +00:00
BillItemKey newKotKey = new BillItemKey ( 0 , - 1 ) ;
var newKotItem = new BillInventory
{
ProductID = 0 ,
Discount = 0 ,
Name = "== New Kot ==" ,
Price = 0 ,
Printed = true ,
Quantity = 0 ,
Tax = - 1 ,
ServiceCharge = 0 ,
} ;
bill . Add ( newKotKey , newKotItem ) ;
2011-01-10 19:49:11 +00:00
saleForm . ClearBill ( bill ) ;
}
public void FormLoad ( )
{
2011-02-18 16:54:48 +00:00
ClearBill ( ) ;
2011-02-09 12:03:22 +00:00
if ( editVoucherID . HasValue )
2011-01-10 19:49:11 +00:00
{
2011-02-09 12:03:22 +00:00
LoadBill ( editVoucherID . Value ) ;
2011-01-10 19:49:11 +00:00
}
}
2011-01-17 14:55:43 +00:00
internal void SettleBill ( )
{
if ( billInfo = = null )
return ;
2011-01-31 20:33:22 +00:00
if ( ! billInfo . Printed )
return ;
2011-02-09 12:03:22 +00:00
if ( ! Session . IsAllowed ( RoleConstants . SETTLE_BILL ) )
return ;
2011-02-18 16:54:48 +00:00
var option = SettleOption . Unsettled ;
2011-01-17 14:55:43 +00:00
using ( BillSettleForm frm = new BillSettleForm ( ) )
{
frm . ShowDialog ( ) ;
option = frm . optionChosen ;
}
2011-02-18 16:54:48 +00:00
if ( option ! = SettleOption . Unsettled )
2011-01-17 14:55:43 +00:00
{
2011-02-18 16:54:48 +00:00
VoucherBI . SettleVoucher ( Session . User , billInfo . VoucherID , option ) ;
2011-01-30 07:14:05 +00:00
ClearBill ( ) ;
2011-01-17 14:55:43 +00:00
}
}
2011-02-18 16:54:48 +00:00
internal void MoveTable ( )
{
if ( billInfo = = null )
return ;
if ( VoucherBI . IsBillPrinted ( billInfo . VoucherID ) & & ! Session . IsAllowed ( RoleConstants . EDIT_PRINTED_BILL ) )
return ;
var table = GetTableForMove ( true ) ;
if ( table = = null )
return ;
if ( table . VoucherID = = 0 )
LoadBill ( MoveTable ( table ) ) ;
else
LoadBill ( MergeTable ( table ) ) ;
}
private int MoveTable ( FoodTable table )
{
if ( ! Session . IsAllowed ( RoleConstants . MOVE_TABLE ) )
return 0 ;
return new FoodTableBI ( ) . Move ( billInfo . TableID , table ) ;
}
private int MergeTable ( FoodTable table )
{
if ( ! Session . IsAllowed ( RoleConstants . MERGE_TABLE ) )
return 0 ;
var kots = bill . Where ( x = > x . Key . KotID = = - 1 & & x . Key . ProductID ! = 0 ) ;
foreach ( var item in kots )
MergeKot ( item . Value , table ) ;
VoucherBI . Delete ( billInfo . VoucherID ) ;
return table . VoucherID ;
}
private int MergeKot ( BillInventory kot , FoodTable table )
{
if ( ! Session . IsAllowed ( RoleConstants . MERGE_KOT ) )
return 0 ;
return VoucherBI . MoveKot ( kot . ProductID , table ) ;
}
private int MoveKot ( BillInventory kot , FoodTable table )
{
if ( ! Session . IsAllowed ( RoleConstants . MOVE_KOT ) )
return 0 ;
CreateNewVoucherForKotMove ( kot , table ) ;
return MergeKot ( kot , table ) ;
}
private void CreateNewVoucherForKotMove ( BillInventory kot , FoodTable table )
{
var voucher = new Voucher
{
Customer = billInfo . Customer ,
Settled = SettleOption . Unsettled ,
TableID = table . Name ,
Waiter = billInfo . Waiter ,
Printed = false ,
Void = false ,
Date = DateTime . Now ,
Narration = "" ,
User = Session . User
} ;
VoucherBI . Insert ( voucher ) ;
}
private FoodTable GetTableForMove ( bool allowMerge )
{
using ( var frm = new frmMoveTable ( new FoodTableBI ( ) . List ( ) , allowMerge ) )
{
frm . ShowDialog ( ) ;
if ( frm . Selection ! = null )
return frm . Selection ;
}
return null ;
}
internal void MergeKot ( )
{
if ( billInfo = = null )
return ;
if ( VoucherBI . IsBillPrinted ( billInfo . VoucherID ) & & ! Session . IsAllowed ( RoleConstants . EDIT_PRINTED_BILL ) )
return ;
var kot = CurrentKot ;
if ( kot = = null )
return ;
var table = GetTableForMove ( true ) ;
if ( table = = null )
return ;
var count = bill . Keys . Count ( x = > x . KotID = = - 1 & & x . ProductID ! = 0 ) ;
int voucherID = 0 ;
if ( table . VoucherID = = 0 & & count > 1 )
//Move Kot
voucherID = MoveKot ( kot , table ) ;
else if ( table . VoucherID = = 0 & & count = = 1 )
//Move Table
voucherID = MoveTable ( table ) ;
else if ( table . VoucherID ! = 0 & & count > 1 )
//Merge Kot
voucherID = MergeKot ( kot , table ) ;
else if ( table . VoucherID ! = 0 & & count = = 1 )
//Merge Table
voucherID = MergeTable ( table ) ;
if ( voucherID ! = 0 )
LoadBill ( voucherID ) ;
}
2011-01-10 19:49:11 +00:00
}
}