public IHttpActionResult CancelOrderOnline(string order_no) { if (string.IsNullOrWhiteSpace(order_no)) { throw new ArgumentException("message", nameof(order_no)); } ReturnObject <OrderSession> ret = new ReturnObject <OrderSession>(); try { var omSrv = new OrderService(omDB); var posConn = omSrv.GetConnectionPOSOrder(order_no); if (posConn != null) { posDB = new POSAirPortClassesDataContext(posConn); ret.Data = omSrv.CancelOrderOnline(posDB, order_no); ret.totalCount = ret.Data != null ? 1 : 0; ret.isCompleted = true; } else { throw new ArgumentException("message", "connection error"); } } catch (Exception e) { ret.SetMessage(e); ret.Tracking = new ReturnTracking(); } return(Ok(ret)); }
public OrderSession HoleOrderOnline(POSAirPortClassesDataContext _posDB, string order_no) { var order = GetOrderOnline(order_no); if (order == null) { throw new ObjectNotFoundException(order_no + " : data not found."); } var pos_key_order = new OrderKey(order); var pos_data = _posDB.df_header_onls.FirstOrDefault(x => x.doc_no == pos_key_order.DocNO && x.OnlineNo == order_no); if (pos_data == null) { throw new ObjectNotFoundException(order_no + " : data not found."); } int status = (int)StatusOrderPOS.HoldOrder; pos_data.LastStatus = status.ToString("0000"); pos_data.update_datetime = DateTime.Now; pos_data.user_update = "online"; _posDB.SubmitChanges(); UdpateOrderSession(order_no, pos_data.LastStatus); return(UpdateStatusOrderOnline(order_no, "hold")); }
private double RunningNumber(POSAirPortClassesDataContext _posDB, runno_machine last_number, string type) { double number = 1; if (last_number == null) { throw new ObjectNotFoundException("error machine no. for running document number missing in POS Database"); } else { if (type == "taxabb") { number = last_number.taxabb + 1; if (number > 99999) { number = 1; } } else { number = last_number.reciept + 1; if (number > 99999) { number = 1; } } } return(number); }
public IHttpActionResult SaveOrderOnline(OrderHeader order) { // validate data ///// ReturnObject <OrderSession> ret = new ReturnObject <OrderSession>(); try { var omSrv = new OrderService(omDB); var posConn = omSrv.GetConnectionPOSAirport(order.Flight.AirportCode); if (posConn != null) { posDB = new POSAirPortClassesDataContext(posConn); ret.Data = omSrv.SaveOrderOnline(posDB, order); ret.totalCount = ret.Data != null ? 1 : 0; ret.isCompleted = true; } else { throw new ArgumentException("message", "connection error"); } } catch (Exception e) { ret.SetMessage(e); ret.Tracking = new ReturnTracking(); } return(Ok(ret)); }
public IHttpActionResult CheckAllowSaleOnline(string airport_code, string flight_code, string flight_date, string passport) { ReturnObject <SaleAmountByPassport> ret = new ReturnObject <SaleAmountByPassport>(); try { if (string.IsNullOrEmpty(airport_code)) { throw new ArgumentException("message", nameof(airport_code)); } if (string.IsNullOrEmpty(flight_code)) { throw new ArgumentException("message", nameof(flight_code)); } if (string.IsNullOrEmpty(passport)) { throw new ArgumentException("message", nameof(passport)); } DateTime flight_datetime = Convert.ToDateTime(flight_date); if (string.IsNullOrEmpty(flight_date)) { throw new ArgumentException("message", nameof(flight_date)); } else { CultureInfo provider = CultureInfo.InvariantCulture; flight_datetime = DateTime.ParseExact(flight_date, "yyyy-MM-dd", provider); } var omSrv = new OrderService(omDB); var posConn = omSrv.GetConnectionPOSAirport(airport_code); if (posConn != null) { posDB = new POSAirPortClassesDataContext(posConn); ret.Data = omSrv.ValidateAllowSaleOnline(posDB, passport, flight_datetime, flight_code); //ret.Data = new SaleAmountByPassport(); ret.Data.SaleAmt = ret.Data.SaleAmt; ret.Data.Alcohol = ret.Data.Alcohol; ret.Data.Tobacco = ret.Data.Tobacco; ret.totalCount = ret.Data != null ? 1 : 0; ret.isCompleted = true; } else { throw new ArgumentException("message", "connection error"); } } catch (Exception e) { ret.SetMessage(e); ret.Tracking = new ReturnTracking(); } return(Ok(ret)); }
public SaleAmountByPassport ValidateAllowSaleOnline(POSAirPortClassesDataContext _posDB, char terminal, string passort, DateTime date, int time) { var saleObj = _posDB.get_sale_passport_vol2(time, passort, date, terminal).FirstOrDefault(); if (saleObj == null) { throw new System.ArgumentException("data not found.", nameof(saleObj)); } return(new SaleAmountByPassport(saleObj)); }
public SaleAmountByPassport ValidateAllowSaleOnline(POSAirPortClassesDataContext _posDB, string passort, DateTime flight_date, string flight_code) { var saleObj = _posDB.get_lt_sale_by_passport_onl(passort, flight_code, flight_date).FirstOrDefault(); if (saleObj == null) { throw new System.ArgumentException("data not found.", nameof(saleObj)); } return(new SaleAmountByPassport(saleObj)); }
public List <SaleQueue> SaleQueue(POSAirPortClassesDataContext _posDB, char terminal) { string[] status = new string[] { "002", "003" }; var saleList = new List <SaleQueue>(); var saleObj = _posDB.df_trans_onls.Where(y => y.cancel_status != true && y.df_header_onl.TerminalCode == terminal.ToString() && status.Contains(y.df_header_onl.LastStatus)).GroupBy(p => p.item_code, (key, g) => new { SKU = key, ListData = g.ToList() }).ToList(); foreach (var sale in saleObj) { var newSale = new SaleQueue(sale.SKU, sale.ListData); saleList.Add(newSale); } return(saleList); }
public IHttpActionResult SaleQueueOnline(string airport_code, char terminal) { ReturnObject <List <SaleQueue> > ret = new ReturnObject <List <SaleQueue> >(); try { if (string.IsNullOrWhiteSpace(airport_code)) { throw new ArgumentException("message", nameof(airport_code)); } if (char.IsWhiteSpace(terminal)) { throw new ArgumentException("message", nameof(terminal)); } var omSrv = new OrderService(orderDB); var posConn = omSrv.GetConnectionPOSAirport(airport_code); if (posConn != null) { var posDB = new POSAirPortClassesDataContext(posConn); ret.Data = omSrv.SaleQueue(posDB, terminal); ret.totalCount = ret.Data.Count(); ret.isCompleted = true; } else { throw new ArgumentException("message", "connection error"); } } catch (Exception e) { ret.SetMessage(e); ret.Tracking = new ReturnTracking(); } return(Ok(ret.Data)); }
private OrderSession SaveSessionOrder(POSAirPortClassesDataContext _posDB, OrderHeader order, df_header_onl new_order) { // order_session db save var new_session_order = new order_session(); new_session_order.session_guid = Guid.NewGuid(); new_session_order.sale_agent_code = order.NewOrder.AgentCode; new_session_order.sale_order_no = order.NewOrder.OrderNo; new_session_order.sale_order_status = "Create"; new_session_order.sale_invoice_no = order.NewOrder.InvoiceNo; new_session_order.sale_platform = "online"; var obj_key = new OrderKey(); obj_key.Date = new_order.data_date.Date.ToString(); obj_key.DocNO = new_order.doc_no.ToString(); obj_key.MacNo = new_order.machine_no.Trim(); new_session_order.pos_order_key = JsonConvert.SerializeObject(obj_key); new_session_order.pos_order_no = new_order.machine_no.Trim() + "-" + new_order.doc_no; new_session_order.pos_order_status = new_order.LastStatus; new_session_order.pos_invice_no = new_order.machine_no.Trim() + "-" + new_order.runno; new_session_order.create_date = DateTime.Now; new_session_order.modified_date = DateTime.Now; _omDB.order_sessions.InsertOnSubmit(new_session_order); _omDB.SubmitChanges(); // order_tran db save var new_tren_order = new order_transaction(); new_tren_order.create_date = DateTime.Now; new_tren_order.session_id = new_session_order.id; new_tren_order.datail = "Create Sale Order Online [" + new_session_order.sale_order_no + "] <---> POS Order [" + new_session_order.pos_order_no + "]"; _omDB.order_transactions.InsertOnSubmit(new_tren_order); _omDB.SubmitChanges(); SaveLogInterface(_posDB, order, new_session_order); return(new OrderSession(new_session_order)); }
private void SaveLogInterface(POSAirPortClassesDataContext _posDB, OrderHeader order, order_session new_session_order) { // order_header db save var new_order_header = new order_header(); new_order_header.session_id = new_session_order.id; new_order_header.order_type = order.Flight.Terminal; new_order_header.member_id = order.NewOrder.MemberID; new_order_header.full_name = order.Billing.FirstName + " " + order.Billing.LastName; new_order_header.passport_no = order.Billing.PassportNo; new_order_header.country = order.Billing.CountryCode; new_order_header.airport_code = order.Flight.AirportCode; new_order_header.terminal_code = order.Flight.Terminal; new_order_header.airline_code = order.Flight.AirlineCode; new_order_header.flight_code = order.Flight.FlightCode; new_order_header.flight_no = order.Flight.FlightCode; //new_order_header.flight_ new_order_header.reference_1 = ""; new_order_header.reference_2 = ""; new_order_header.reference_3 = ""; new_order_header.remark = ""; new_order_header.create_date = DateTime.Now; _omDB.order_headers.InsertOnSubmit(new_order_header); _omDB.SubmitChanges(); // db save new order_detail and order_discount foreach (var item in order.Items.Select((value, index) => new { Value = value, Index = index })) { order_detail new_item = new order_detail(); new_item.header_id = new_order_header.id; new_item.line_no = item.Index + 1; new_item.sub_order_type = "I"; new_item.article_code = item.Value.MaterialCode; new_item.quantity = item.Value.Quantity; new_item.selling_price = item.Value.SellingPrice; new_item.total_amt = item.Value.Amount; new_item.dis_rate = item.Value.DiscountRate; new_item.dis_amt = item.Value.Discount; new_item.dis_pro_code = item.Value.PromoCode; new_item.sp_dis_amt = item.Value.SPDiscount; new_item.sp_dis_rate = item.Value.SPDiscountRate; new_item.sp_dis_pro_code = item.Value.SPPromoCode; new_item.net_amt = item.Value.TotalNet; new_item.reference_1 = ""; new_item.reference_2 = ""; new_item.reference_3 = ""; _omDB.order_details.InsertOnSubmit(new_item); _omDB.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; } } order_payment new_payment = new order_payment(); new_payment.header_id = new_order_header.id; new_payment.payment_type = payment.Value.Code; new_payment.paymemt_agent = ""; new_payment.paymemt_session_id = ""; new_payment.paymemt_ref_no = ""; new_payment.payment_code = payment.Value.Code; new_payment.paymemt_amt = payment.Value.Amount; new_payment.paymemt_datetime = DateTime.Now; _omDB.order_payments.InsertOnSubmit(new_payment); _omDB.SubmitChanges(); } }
public OrderService(OrderDataClassesDataContext omDB, POSAirPortClassesDataContext posDB) { _omDB = omDB; _posDB = posDB; }
public OrderService(POSAirPortClassesDataContext posDB) { _posDB = posDB; }
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); }
public async Task <IHttpActionResult> VoidOrderOnlineAsync(string order_no) { if (string.IsNullOrWhiteSpace(order_no)) { throw new ArgumentException("message", nameof(order_no)); } ReturnObject <OrderSession> ret = new ReturnObject <OrderSession>(); try { var omSrv = new OrderService(omDB); var posConn = omSrv.GetConnectionPOSOrder(order_no); if (posConn != null) { posDB = new POSAirPortClassesDataContext(posConn); ret.Data = omSrv.VoidOrderOnline(posDB, order_no); if (ret.Data != null) { // send update to endpoint CANCELED var client = new RestClient("http://10.3.26.32:5000"); var request = new RestRequest(String.Format("dev/api/Orders/{0}/Status", order_no), Method.POST); request.AddHeader("AccessToken", "A64803F0A7CEDAC8407538D341BDBE23"); request.AddHeader("Content-Type", "application/json"); request.AddJsonBody(new { statuscode = "refund" }); var restResponse = await client.ExecutePostTaskAsync(request); if (restResponse.ErrorException != null) { throw restResponse.ErrorException.InnerException; } else { if (restResponse.StatusCode != HttpStatusCode.OK) { ret.Data = omSrv.UpdateStatusOrderOnline(order_no, restResponse.StatusCode.ToString()); ret.totalCount = 0; ret.isCompleted = false; } else { ret.Data = omSrv.UpdateStatusOrderOnline(order_no, "refund"); ret.totalCount = 1; ret.isCompleted = true; } } } else { throw new ArgumentException("message", "connection error"); } } else { throw new ArgumentException("message", "connection error"); } } catch (Exception e) { ret.SetMessage(e); ret.Tracking = new ReturnTracking(); } return(Ok(ret)); }