public List <OrderSession> GetOrderOnlineList(string airport_code, int?skip, int?take) { var saleList = new List <OrderSession>(); if (skip.HasValue && take.HasValue) { var saleObj = _omDB.order_sessions.Where(x => x.order_headers.FirstOrDefault(y => y.airport_code == airport_code) != null).Skip(skip.Value).Take(take.Value).ToList(); foreach (var item in saleObj) { var obj = new OrderSession(item); saleList.Add(obj); } } else { var saleObj = _omDB.order_sessions.Where(x => x.order_headers.FirstOrDefault(y => y.airport_code == airport_code) != null).ToList(); foreach (var item in saleObj) { var obj = new OrderSession(item); saleList.Add(obj); } } return(saleList); }
private async Task <OrderSessionPaySummaryModel> GetPaymentSummary(OrderSession orderSession, OrderSessionPaySummaryRequestModel model) { //Calculate base price var price = CalculatePrice(orderSession); var fullPrice = price; //Note: calculation order matters here, we redeem loyalty points 1st, because if the vouchers are percentage based, overall this results in potentially higher net gain for the restaurant int redeemedPoints = 0; //Loyalty points if (model.LoyaltyCardNumber != null) { var loyaltyCard = await DbContext.LoyaltyCards.Where(lc => lc.CardNumber == model.LoyaltyCardNumber).SingleOrDefaultAsync(); if (loyaltyCard == null) { loyaltyCard = await LoyaltyCardService.AddLoyaltyCard(model.LoyaltyCardNumber ?? 1); await DbContext.SaveChangesAsync(); } //Redeem points if (model.ShouldRedeemPoints) { redeemedPoints = Math.Min(loyaltyCard.Points, price); loyaltyCard.Points -= redeemedPoints; price -= redeemedPoints; } //Add new points for the purchase loyaltyCard.Points += (int)Math.Round(fullPrice * OrderConfig.LoyaltyPointsMultiplier); } int discountedPrice = price; //Vouchers if (!string.IsNullOrEmpty(model.VoucherCode) && price > OrderConfig.MinPrice) { discountedPrice = await CalculateVoucherDiscountedPrice(model.VoucherCode, price); } int discountAmount = price - discountedPrice; price = discountedPrice; price = Math.Max(price, OrderConfig.MinPrice); return(new OrderSessionPaySummaryModel() { FullPrice = fullPrice, FinalPrice = price, LoyaltyCardNumber = model.LoyaltyCardNumber, UsedLoyaltyPoints = redeemedPoints, VoucherCode = model.VoucherCode, VoucherTotalDiscountAmount = discountAmount }); }
private int CalculatePrice(OrderSession orderSession) { int sum = 0; orderSession.Orders.ForEach(order => { sum += order.CalculatePrice(); }); return(sum); }
public async Task <AddResult> AddOrder(OrderAddModel model) { if (model.TableId == null && model.CustomerId == null) { throw new RestaurantBadRequestException("Asztal/kiszállítási adatok nélküli rendelés nem vehető fel!"); } var waiter = await DbContext.Users.FindAsync(model.WaiterId); if (waiter == null) { throw new RestaurantNotFoundException("A megadott pincér nem létezik!"); } await StatusService.CheckRightsForOrderAddDelete(); OrderSession orderSession = null; if (model.TableId != null) { orderSession = await DbContext.OrderSessions.Where(os => os.TableId == model.TableId && os.Status == OrderSessionStatus.Active).SingleOrDefaultAsync(); } if (orderSession == null) { orderSession = await OrderSessionService.CreateNewSession(model); } var order = DbContext.Orders.Add(new Order() { WaiterUserId = model.WaiterId, Status = OrderStatus.Ordering, OrderSessionId = orderSession.Id, OpenedAt = DateTime.Now }); await DbContext.SaveChangesAsync(); return(new AddResult(order.Entity.Id)); }
public StepContext(OrderSession session) { _session = session; }
public OrderSession SaveOrderOnline(POSAirPortClassesDataContext _posDB, OrderHeader order) { if (string.IsNullOrWhiteSpace(order.Billing.PassportNo)) { throw new ArgumentException("message", nameof(order.Billing.PassportNo)); } var connObj = _omDB.config_connections.FirstOrDefault(x => x.cn_code == order.Flight.AirportCode); if (connObj == null) { throw new ArgumentException("message", nameof(order.Flight.AirportCode)); } var last_number = _posDB.runno_machines.FirstOrDefault(x => x.machine_no.Trim() == connObj.ref_machine_no.Trim()); if (last_number == null) { throw new ArgumentException("message", nameof(last_number)); } var order_header = _posDB.df_header_onls.FirstOrDefault(x => x.OnlineNo == order.NewOrder.OrderNo); if (order_header != null) { throw new ArgumentException("order is duplicate.", nameof(order_header.OnlineNo)); } var order_result = new OrderSession(); //var option = new TransactionOptions(); //option.IsolationLevel = IsolationLevel.ReadCommitted; //option.Timeout = TimeSpan.FromMinutes(2); //using (TransactionScope tran = new TransactionScope(TransactionScopeOption.Required, option)) //{ try { new char(); // pos airport save char sale_status = Char.Parse("R"); if (order.Flight.Terminal == "D") { sale_status = Char.Parse("D"); } var docno = RunningNumber(_posDB, last_number, "taxabb"); var runno = RunningNumber(_posDB, last_number, "revdoc"); last_number.taxabb = docno; last_number.reciept = runno; _posDB.SubmitChanges(); CultureInfo ci = CultureInfo.InvariantCulture; // new df_header_onl df_header_onl new_order = new df_header_onl { branch_no = connObj.cn_branch_no, data_date = DateTime.Now.Date, area_code = connObj.ref_area_no, loc_code = connObj.ref_loc_no, machine_no = connObj.ref_machine_no, doc_no = docno.ToString("00000"), shift_no = 1, cust_type = "", flight_code = order.Flight.FlightCode, flight_date = order.Flight.Date, flight_time = order.Flight.Time.Time24, country_code = order.Billing.CountryCode, cust_name = order.Billing.FirstName + " " + order.Billing.LastName, passport_no = order.Billing.PassportNo, member_id = order.NewOrder.MemberID, shopping_card = "", cashier_code = "online", sale_code = "online", update_date_sale = null, add_datetime = DateTime.Now, update_datetime = DateTime.Now, user_add = "online", user_update = "online", //time_stamp = "", void_status = false, cancel_to_doc = "", cancel_to_date = null, cancel_to_mac = "", runno = runno.ToString("00000"), data_time = DateTime.Now.ToString("HH:mm", ci), trans_date = DateTime.Now.Date, //rec_no = 0, tour_barcode = "", tour_code = "", machine_tax = connObj.ref_machine_tax, rcv_data_date = null, rcv_loc_code = "", rcv_machine_no = "", rcv_doc_no = "", rcv_datetime = null, sale_status = sale_status, DiscAuthUser = "", CardTypeCode = "", EmBossID = "", CardTypeID = "", PersonalID = "", Gender = new char(), //BirthDate = "", //PassportExpire = "", //rcv_status = "", LVHeaderKey = 0, DeliveryType = new char(), DeliveryAuth = "", //ReferDate = DateTime.Now.Date, //ReferMac = "online", //ReferDoc = order.NewOrder.OrderNo, //RCCode = "", AlipaySession = 0, WeChatSession = 0, Promoter = "", DFA = "", OnlineNo = order.NewOrder.OrderNo, TerminalCode = order.Flight.Terminal, LastStatus = "002".ToString() }; _posDB.df_header_onls.InsertOnSubmit(new_order); _posDB.SubmitChanges(); // new df_tran_onl and new pdiscount_onl var item_code_list = order.Items.Select(x => x.MaterialCode).ToList(); var master_article = _posDB.vArticleMCs.Where(x => item_code_list.Contains(x.ArticleCode)).ToList(); var line_disc_no = 0; foreach (var item in order.Items.Select((value, index) => new { Value = value, Index = index })) { var item_code = master_article.FirstOrDefault(x => x.ArticleCode == item.Value.MaterialCode); df_trans_onl new_item = new df_trans_onl() { branch_no = new_order.branch_no.Trim(), data_date = DateTime.Now.Date, area_code = new_order.area_code.Trim(), loc_code = new_order.loc_code, machine_no = new_order.machine_no.Trim(), doc_no = docno.ToString("00000"), line_no = item.Index + 1, item_code = item_code.GTIN, bar_code = "", mat_code = item.Value.MaterialCode, quantity = item.Value.Quantity, selling_price = item.Value.SellingPrice, curr_code = "", amount = item.Value.Amount, discount = item.Value.Discount, net = item.Value.Net, vat = 0, vat_code = "2", vat_rate = 0, disc_code = "", disc_rate = item.Value.DiscountRate, promo_code = item.Value.PromoCode, staff_code = new_order.sale_code, staff_comm_rate = 0, cancel_status = false, add_datetime = DateTime.Now, update_datetime = DateTime.Now, user_add = new_order.sale_code, user_update = new_order.sale_code, //time_stamp = "", line_cancel = false, discount2 = item.Value.SPDiscount, disc_rate2 = item.Value.SPDiscountRate, net2 = item.Value.TotalNet, vat2 = 0 }; _posDB.df_trans_onls.InsertOnSubmit(new_item); _posDB.SubmitChanges(); if (item.Value.Discount > 0) { line_disc_no = line_disc_no + 1; df_pdiscount_onl new_pdiscount = new df_pdiscount_onl() { branch_no = new_order.branch_no.Trim(), data_date = DateTime.Now.Date, machine_no = new_order.machine_no.Trim(), doc_no = docno.ToString("00000"), plu_line_no = new_item.line_no, disc_line_no = line_disc_no, disc_rate = (decimal)new_item.disc_rate, disc_per = (decimal)new_item.disc_rate > 0 ? (decimal)new_item.discount : 0, disc_amount = (decimal)new_item.disc_rate <= 0 ? (decimal)new_item.discount : 0, promo_code = item.Value.PromoCode, bybill_flag = false, bybill_runno = 1, disc_type = 1, del_flag = null, cancel_status = false, add_datetime = DateTime.Now, update_datetime = DateTime.Now, user_add = new_item.user_add, user_update = new_item.user_update, //time_stamp = "", QRCode = new Guid("00000000-0000-0000-0000-000000000000"), method_code = "", subsidize = 0 }; _posDB.df_pdiscount_onls.InsertOnSubmit(new_pdiscount); _posDB.SubmitChanges(); } if (item.Value.SPDiscount > 0) { line_disc_no = line_disc_no + 1; df_pdiscount_onl new_pdiscount = new df_pdiscount_onl() { branch_no = new_order.branch_no, data_date = DateTime.Now.Date, machine_no = new_order.machine_no, doc_no = docno.ToString("00000"), plu_line_no = new_item.line_no, disc_line_no = line_disc_no, disc_rate = (decimal)item.Value.SPDiscountRate, disc_per = (decimal)item.Value.SPDiscountRate > 0 ? (decimal)item.Value.SPDiscount : 0, disc_amount = (decimal)item.Value.SPDiscount <= 0 ? (decimal)item.Value.SPDiscount : 0, promo_code = item.Value.SPPromoCode, bybill_flag = true, bybill_runno = 2, disc_type = 2, del_flag = null, add_datetime = DateTime.Now, update_datetime = DateTime.Now, user_add = new_item.user_add, user_update = new_item.user_update, //time_stamp = "", //QRCode = "", //method_code = "", //subsidize = "" }; _posDB.df_pdiscount_onls.InsertOnSubmit(new_pdiscount); _posDB.SubmitChanges(); } } // new df_payment_onl var master_paymath = _posDB.df_paymeths.ToList(); foreach (var payment in order.Payments.Select((value, index) => new { Value = value, Index = index })) { decimal amt_curr = 0; var paymath = master_paymath.FirstOrDefault(x => x.method_code.Trim() == payment.Value.Code.Trim()); if (paymath != null) { if (paymath.check_voucher || paymath.is_cashcard) { amt_curr = 0; } else { amt_curr = payment.Value.Amount * 1; } } df_payment_onl new_payment = new df_payment_onl() { branch_no = new_order.branch_no.Trim(), data_date = DateTime.Now.Date, machine_no = new_order.machine_no.Trim(), doc_no = docno.ToString("00000"), line_no = payment.Index + 1, method_code = payment.Value.Code.Trim(), payment_date = DateTime.Now, amount = payment.Value.Amount, amount_round = 0, amount_curr = amt_curr, curr_code = "THB", curr_rate = 1, cashier_code = new_order.cashier_code.Trim(), posid = new_order.machine_no.Trim(), cred_card_no = "", cred_card_name = "", expiry_date = null, approve_code = "", del_flag = null, add_datetime = DateTime.Now, update_datetime = DateTime.Now, user_add = new_order.user_add, user_update = new_order.user_update, //time_stamp = "", amount2 = payment.Value.Amount, amount_curr2 = amt_curr, BankOfEDC = "", AliBarcode = "", AliMerchantID = "", AliTransID = "", AlipayCancel = false }; _posDB.df_payment_onls.InsertOnSubmit(new_payment); _posDB.SubmitChanges(); } // order_session db save order_result = SaveSessionOrder(_posDB, order, new_order); //tran.Complete(); } catch (Exception ex) { //tran.Dispose(); throw ex; } //} return(order_result); }