예제 #1
0
        public ActionResult SaveBillNo([FromBody] SaveOrderDTO dTO)
        {
            string errMsg = "Error!";
            int    ret    = 0;

            if (dTO == null)
            {
                errMsg = "Kindly send Invoice Data!";
                return(Json(new { Count = ret, Msg = errMsg }));
            }

            return(Json(new { Count = ret, Msg = errMsg }));
        }
예제 #2
0
        public ActionResult SaveOrder([FromBody] SaveOrderDTO dTO) /*string name, [FromBody] String address, [FromBody] SaleItemList[] saleItems)*/
        {
            string result = "Error! Order Is Not Complete!";

            if (dTO.Name != null && dTO.Address != null && dTO.SaleItems != null)
            {
                InvoiceSaveReturn x = new RegularSaleManager().OnInsert(aprajitaContext, dTO, User.Identity.Name, dTO.StoreId);
                if (x.NoOfRecord <= 0)
                {
                    result = "Error while saving bill, Kindly try again!";
                }
                else
                {
                    result = "Invoice is Generated! Kindly print if required";
                    return(Json(new { x.FileName, result }));
                }
            }
            return(Json(new { FileName = new String("Error"), result }));
        }
예제 #3
0
        public async Task <ActionResult> AddOrderAsync(AddOrder values)
        {
            // Check Customer existence
            var customer = await _unitOfWork.Customers.GetByAsync(values.CustomerId);

            if (customer == null) // Nếu không tồn tại khách hàng này trong db
            {
                // Add Customer
                var saveCustomerDTO = new SaveCustomerDTO
                {
                    Id       = values.CustomerId,
                    FullName = values.FullName,
                    Phone    = values.Phone,
                };

                // Mapping: SaveCustomer
                customer = _mapper.Map <SaveCustomerDTO, Customer>(saveCustomerDTO);
                await _unitOfWork.Customers.AddAsync(customer);
            }
            else
            {
                customer.FullName = values.FullName;
                customer.Phone    = values.Phone;
            }

            // Lấy DepartureDate Id
            var departureDateIdAsync = await _unitOfWork.Dates.FindAsync(d =>
                                                                         d.DepartureDate == Convert.ToDateTime(values.DepartureDateName));

            var departureDateId = departureDateIdAsync
                                  .Select(d => d.Id).SingleOrDefault();

            // Add Order
            SaveOrderDTO saveOrderDTO = new SaveOrderDTO
            {
                Id              = await this.autoOrderIdAsync(),
                TicketCount     = values.TicketCount,
                TotalPrice      = values.TotalPrice,
                CreateAt        = DateTime.Now, // Lấy thời điểm đặt vé
                Status          = 0,
                CustomerId      = values.CustomerId,
                DepartureDateId = departureDateId,
                ReturnDateId    = null,
                UserId          = null
            };

            // Lấy ReturnDate Id
            if (values.ReturnDateName != "")
            {
                var returnDateIdAsync = await _unitOfWork.Dates.FindAsync(d =>
                                                                          d.DepartureDate == Convert.ToDateTime(values.ReturnDateName));

                saveOrderDTO.ReturnDateId = returnDateIdAsync
                                            .Select(d => d.Id).SingleOrDefault();
            }

            // Mapping: SaveOrder
            var order = _mapper.Map <SaveOrderDTO, Order>(saveOrderDTO);
            await _unitOfWork.Orders.AddAsync(order);

            IList <Ticket> tickets = new List <Ticket>(); // Dòng này để kiểm tra dữ liệu tạm thời (xóa sau)

            // Add Tickets
            for (int i = 0; i < values.FlightIds.Count; i++)
            {
                for (int j = 0; j < values.Passengers.Count; j++)
                {
                    // Luggage Price
                    var luggageAsync = await _unitOfWork.Luggages.FindAsync(l =>
                                                                            l.Id == values.Passengers.ElementAt(j).LuggageIds.ElementAt(i));

                    decimal luggagePrice = Convert.ToDecimal(luggageAsync.SingleOrDefault().Price);

                    // Ticket Price
                    var ticketAsync = await _unitOfWork.FlightTicketCategories.FindAsync(ft =>
                                                                                         ft.TicketCategoryId == values.Passengers.ElementAt(j).TicketCategoryId &&
                                                                                         ft.FlightId == values.FlightIds.ElementAt(i));

                    decimal ticketPrice = Convert.ToDecimal(ticketAsync.SingleOrDefault().Price);

                    // Lấy ngày bay, i = 0 là của chiều đi, i = 1 là của chiều về
                    int dateId = 0;
                    if (i == 0)
                    {
                        dateId = order.DepartureDateId;
                    }
                    else
                    {
                        dateId = (int)order.ReturnDateId;
                    }

                    var saveTicketDTO = new SaveTicketDTO
                    {
                        Id               = await this.autoTicketIdAsync(),
                        PassengerName    = values.Passengers.ElementAt(j).PassengerName,
                        PassengerGender  = values.Passengers.ElementAt(j).PassengerGender,
                        LuggageId        = values.Passengers.ElementAt(j).LuggageIds.ElementAt(i),
                        FlightId         = values.FlightIds.ElementAt(i),
                        OrderId          = order.Id,
                        DateId           = dateId,
                        TicketCategoryId = values.Passengers.ElementAt(j).TicketCategoryId,
                        Price            = ticketPrice + luggagePrice
                    };

                    // Mapping: SaveTicket
                    var ticket = _mapper.Map <SaveTicketDTO, Ticket>(saveTicketDTO);

                    tickets.Add(ticket); // Xóa sau
                    await _unitOfWork.Tickets.AddAsync(ticket);

                    await _unitOfWork.CompleteAsync();
                }
            }

            return(Ok(new { success = true, message = "Thêm thành công.", data = tickets }));
        }
예제 #4
0
        public ActionResult SaveEditedInvoice([FromBody] SaveOrderDTO dTO)
        {
            string result = "Error! Order Is Not Complete!";

            return(Json(new { FileName = new String("Error"), result }));
        }
예제 #5
0
        public InvoiceSaveReturn OnInsert(eStoreDbContext db, SaveOrderDTO sales, string userName, int StoreId = 1)
        {
            Customer cust = db.Customers.Where(c => c.MobileNo == sales.MobileNo).FirstOrDefault();

            if (cust == null)
            {
                string[] names = sales.Name.Split(" ");
                string   FName = names[0];
                string   LName = "";
                for (int i = 1; i < names.Length; i++)
                {
                    LName += names[i] + " ";
                }

                cust = new Customer
                {
                    City        = sales.Address,
                    Age         = 30,
                    FirstName   = FName,
                    Gender      = Gender.Male,
                    LastName    = LName,
                    MobileNo    = sales.MobileNo,
                    NoOfBills   = 0,
                    TotalAmount = 0,
                    CreatedDate = DateTime.Now.Date
                };
                db.Customers.Add(cust);
            }
            string InvNo = GenerateInvoiceNo(db, StoreId, true);
            List <RegularSaleItem> itemList  = new List <RegularSaleItem>();
            List <Stock>           stockList = new List <Stock>();

            foreach (var item in sales.SaleItems)
            {
                RegularSaleItem sItem = new RegularSaleItem
                {
                    BarCode       = item.BarCode,
                    MRP           = item.Price,
                    Qty           = item.Quantity,
                    Discount      = 0,
                    SalesmanId    = item.Salesman,
                    Units         = item.Units,
                    InvoiceNo     = InvNo,
                    BasicAmount   = item.Amount,
                    TaxAmount     = 0,
                    ProductItemId = -1,
                    BillAmount    = 0,
                    SaleTaxTypeId = 1, //TODO: default tax id needed
                };
                ProductItem pItem = db.ProductItems.Where(c => c.Barcode == item.BarCode).FirstOrDefault();
                Stock       stock = db.Stocks.Where(c => c.ProductItemId == pItem.ProductItemId && c.StoreId == StoreId).FirstOrDefault();

                sItem.ProductItemId = pItem.ProductItemId;
                decimal amt = (decimal)item.Quantity * item.Price;
                sItem.BasicAmount = (amt * 100) / (100 + pItem.TaxRate);
                sItem.TaxAmount   = (sItem.BasicAmount * pItem.TaxRate) / 100;
                sItem.BillAmount  = sItem.BasicAmount + sItem.TaxAmount;
                //SaleTax Id
                var taxid = db.SaleTaxTypes.Where(c => c.CompositeRate == pItem.TaxRate).Select(c => c.SaleTaxTypeId).FirstOrDefault();
                if (taxid <= 0)
                {
                    taxid = 1; //TODO: Handle it for creating new saletax id
                }
                sItem.SaleTaxTypeId = taxid;

                itemList.Add(sItem);


                stock.SaleQty  += item.Quantity;
                stock.Quantity -= item.Quantity;
                stockList.Add(stock);
            }
            var           totalBillamt  = itemList.Sum(c => c.BillAmount);
            var           totaltaxamt   = itemList.Sum(c => c.TaxAmount);
            var           totalDiscount = itemList.Sum(c => c.Discount);
            var           totalQty      = itemList.Sum(c => c.Qty);
            var           totalitem     = itemList.Count;
            decimal       roundoffamt   = Math.Round(totalBillamt) - totalBillamt;
            PaymentDetail pd            = new PaymentDetail
            {
                CardAmount   = sales.PaymentInfo.CardAmount,
                CashAmount   = sales.PaymentInfo.CashAmount,
                InvoiceNo    = InvNo,
                IsManualBill = true,
                MixAmount    = 0,
                PayMode      = SalePayMode.Cash
            };

            if (sales.PaymentInfo.CardAmount > 0)
            {
                if (sales.PaymentInfo.CashAmount > 0)
                {
                    pd.PayMode = SalePayMode.Mix;
                }
                else
                {
                    pd.PayMode = SalePayMode.Card;
                }

                CardDetail cd = new CardDetail
                {
                    CardCode  = CardType.Visa,//TODO: default
                    Amount    = sales.PaymentInfo.CardAmount,
                    AuthCode  = (int)Int64.Parse(sales.PaymentInfo.AuthCode),
                    InvoiceNo = InvNo,
                    LastDigit = (int)Int64.Parse(sales.PaymentInfo.CardNo),
                    CardType  = CardMode.DebitCard//TODO: default
                };

                if (sales.PaymentInfo.CardType.Contains("Debit") || sales.PaymentInfo.CardType.Contains("debit") || sales.PaymentInfo.CardType.Contains("DEBIT"))
                {
                    cd.CardType = CardMode.DebitCard;
                }
                else if (sales.PaymentInfo.CardType.Contains("Credit") || sales.PaymentInfo.CardType.Contains("credit") || sales.PaymentInfo.CardType.Contains("CREDIT"))
                {
                    cd.CardType = CardMode.CreditCard;
                }

                if (sales.PaymentInfo.CardType.Contains("visa") || sales.PaymentInfo.CardType.Contains("Visa") || sales.PaymentInfo.CardType.Contains("VISA"))
                {
                    cd.CardCode = CardType.Visa;
                }
                else if (sales.PaymentInfo.CardType.Contains("MasterCard") || sales.PaymentInfo.CardType.Contains("mastercard") || sales.PaymentInfo.CardType.Contains("MASTERCARD"))
                {
                    cd.CardCode = CardType.MasterCard;
                }
                else if (sales.PaymentInfo.CardType.Contains("Rupay") || sales.PaymentInfo.CardType.Contains("rupay") || sales.PaymentInfo.CardType.Contains("RUPAY"))
                {
                    cd.CardCode = CardType.Rupay;
                }
                else if (sales.PaymentInfo.CardType.Contains("MASTRO") || sales.PaymentInfo.CardType.Contains("mastro") || sales.PaymentInfo.CardType.Contains("Mastro"))
                {
                    cd.CardCode = CardType.Rupay;
                }

                pd.CardDetail = cd;
            }
            RegularInvoice Invoice = new RegularInvoice
            {
                Customer            = cust,
                InvoiceNo           = InvNo,
                OnDate              = sales.OnDate,
                IsManualBill        = true,
                StoreId             = StoreId,
                SaleItems           = itemList,
                CustomerId          = cust.CustomerId,
                TotalBillAmount     = totalBillamt + roundoffamt,
                TotalDiscountAmount = totalDiscount,
                TotalItems          = totalitem,
                TotalQty            = totalQty,
                TotalTaxAmount      = totaltaxamt,
                RoundOffAmount      = roundoffamt,
                PaymentDetail       = pd,
                UserId              = userName
            };

            db.RegularInvoices.Add(Invoice);
            db.Stocks.UpdateRange(stockList);
            InvoiceSaveReturn returnData = new InvoiceSaveReturn
            {
                NoOfRecord = db.SaveChanges(),
                FileName   = "NotSaved"
            };

            if (returnData.NoOfRecord > 0)
            {
                ReceiptHeader             header         = PrinterHelper.GetReceiptHeader(db, StoreId);
                ReceiptDetails            details        = PrinterHelper.GetReceiptDetails(Invoice.InvoiceNo, Invoice.OnDate, DateTime.Now.ToShortTimeString(), sales.Name);
                ReceiptItemTotal          itemtotal      = PrinterHelper.GetReceiptItemTotal(Invoice);
                List <ReceiptItemDetails> itemDetailList = PrinterHelper.GetInvoiceDetails(db, itemList);
                returnData.FileName = "/" + InvoicePrinter.PrintManaulInvoice(header, itemtotal, details, itemDetailList, false);
            }
            return(returnData);
        }