예제 #1
0
        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);
        }
예제 #4
0
        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));
        }
예제 #5
0
        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));
        }
예제 #7
0
        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));
        }
예제 #10
0
        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));
        }
예제 #11
0
        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();
            }
        }
예제 #12
0
 public OrderService(OrderDataClassesDataContext omDB, POSAirPortClassesDataContext posDB)
 {
     _omDB = omDB; _posDB = posDB;
 }
예제 #13
0
 public OrderService(POSAirPortClassesDataContext posDB)
 {
     _posDB = posDB;
 }
예제 #14
0
        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);
        }
예제 #15
0
        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));
        }