Esempio n. 1
0
        //public List<SalesDocDetailReturnItem> ReadSalesReturnItem(int id)
        //{
        //    var b = DbSetSales.Where(m => m.SalesDocDetailId == id);
        //    return b.ToList();
        //}

        public async Task <int> Create(SalesDocReturn model, SalesDocReturnViewModel viewModel)
        {
            int Created = 0;

            using (var transaction = this.DbContext.Database.BeginTransaction())
            {
                try
                {
                    string   code  = GenerateCode("sales");
                    SalesDoc sales = new SalesDoc();
                    sales.Remark = viewModel.remark;
                    if (viewModel.salesDetail.bankCard != null)
                    {
                        sales.BankCardCode = viewModel.salesDetail.bankCard.code;
                        sales.BankCardId   = viewModel.salesDetail.bankCard._id;
                        sales.BankCardName = viewModel.salesDetail.bankCard.name;
                    }
                    if (viewModel.salesDetail.bank != null)
                    {
                        sales.BankCode = viewModel.salesDetail.bank.code;
                        sales.BankId   = viewModel.salesDetail.bank._id;
                        sales.BankName = viewModel.salesDetail.bank.name;
                    }
                    sales.CardAmount = viewModel.salesDetail.cardAmount;
                    sales.CardName   = viewModel.salesDetail.cardName;
                    sales.CardNumber = viewModel.salesDetail.cardNumber;
                    if (viewModel.salesDetail.cardType != null)
                    {
                        sales.CardTypeCode = viewModel.salesDetail.cardType.code;
                        sales.CardTypeId   = viewModel.salesDetail.cardType._id;
                        sales.CardTypeName = viewModel.salesDetail.cardType.name;
                    }
                    if (viewModel.salesDetail.voucher != null)
                    {
                        sales.VoucherValue = viewModel.salesDetail.voucher.value;
                    }
                    sales.CashAmount       = viewModel.salesDetail.cashAmount;
                    sales.Date             = viewModel.date;
                    sales.Discount         = 0;
                    sales.Card             = viewModel.salesDetail.card;
                    sales.PaymentType      = viewModel.salesDetail.paymentType;
                    sales.isVoid           = false;
                    sales.Shift            = viewModel.shift;
                    sales.StoreCode        = viewModel.store.Code;
                    sales.StoreId          = viewModel.store.Id;
                    sales.StoreName        = viewModel.store.Name;
                    sales.StoreStorageCode = viewModel.store.Storage.code;
                    sales.StoreStorageId   = viewModel.store.Storage._id;
                    sales.StoreStorageName = viewModel.store.Storage.name;
                    sales.SubTotal         = viewModel.subTotal;
                    sales.TotalProduct     = viewModel.totalProduct;
                    sales.GrandTotal       = viewModel.total;
                    sales.Discount         = viewModel.totalDiscount;



                    List <SalesDocDetail> docDetails = new List <SalesDocDetail>();
                    foreach (var i in viewModel.items)
                    {
                        docDetails.Add(new SalesDocDetail
                        {
                            Discount1                   = i.discount1,
                            Discount2                   = i.discount2,
                            DiscountNominal             = i.discountNominal,
                            isReturn                    = true,
                            ItemArticleRealizationOrder = i.item.item.ArticleRealizationOrder,
                            ItemCode                    = i.item.item.code,
                            ItemDomesticCOGS            = i.item.item.DomesticCOGS,
                            ItemDomesticRetail          = i.item.item.DomesticRetail,
                            ItemDomesticSale            = i.item.item.DomesticSale,
                            ItemDomesticWholeSale       = i.item.item.DomesticWholeSale,
                            ItemId          = i.item.item._id,
                            ItemName        = i.item.item.name,
                            ItemSize        = i.item.item.Size,
                            ItemUom         = i.item.item.Uom,
                            Margin          = i.margin,
                            Price           = i.price,
                            Quantity        = i.quantity,
                            Size            = i.item.item.Size,
                            SpesialDiscount = i.specialDiscount,
                            Total           = i.total
                        });
                        foreach (var retur in i.returnItems)
                        {
                            docDetails.Add(new SalesDocDetail
                            {
                                Discount1                   = retur.discount1,
                                Discount2                   = retur.discount2,
                                DiscountNominal             = retur.discountNominal,
                                isReturn                    = false,
                                ItemArticleRealizationOrder = retur.item.ArticleRealizationOrder,
                                ItemCode                    = retur.item.code,
                                ItemDomesticCOGS            = retur.item.DomesticCOGS,
                                ItemDomesticRetail          = retur.item.DomesticRetail,
                                ItemDomesticSale            = retur.item.DomesticSale,
                                ItemDomesticWholeSale       = retur.item.DomesticWholeSale,
                                ItemId          = retur.item._id,
                                ItemName        = retur.item.name,
                                ItemSize        = retur.item.Size,
                                ItemUom         = retur.item.Uom,
                                Margin          = retur.margin,
                                Price           = retur.price,
                                Quantity        = retur.quantity,
                                Size            = retur.item.Size,
                                SpesialDiscount = retur.specialDiscount,
                                Total           = retur.total
                            });
                        }
                    }
                    //foreach(var i in sales.Details)
                    //{
                    //    if(viewModel.items.Where(x=>x.item.code == i.ItemCode).Count() > 0)
                    //    {
                    //        if(viewModel.items.Single().returnItems.Count() > 0)
                    //        {
                    //            i.isReturn = true;
                    //        }
                    //    }
                    //}
                    sales.Details  = docDetails;
                    sales.isReturn = true;
                    sales.Code     = code;
                    sales.FlagForCreate(IdentityService.Username, UserAgent);
                    sales.FlagForUpdate(IdentityService.Username, UserAgent);

                    sales.isVoid = false;

                    var salesreturn = await AddSales(sales);

                    model.SalesDocReturnCode     = salesreturn.Code;
                    model.SalesDocReturnId       = salesreturn.Id;
                    model.SalesDocReturnIsReturn = sales.isReturn;
                    model.Code = sales.Code;
                    model.FlagForCreate(IdentityService.Username, UserAgent);
                    model.FlagForUpdate(IdentityService.Username, UserAgent);
                    foreach (var item in model.Details)
                    {
                        item.FlagForCreate(IdentityService.Username, UserAgent);
                        item.FlagForUpdate(IdentityService.Username, UserAgent);
                    }

                    DbSet.Add(model);
                    Created = await DbContext.SaveChangesAsync();

                    List <SalesDocDetailReturnItem> docDetail = new List <SalesDocDetailReturnItem>();
                    foreach (var i in viewModel.items)
                    {
                        var t = sales.Details.Where(x => x.ItemCode == i.item.item.code && x.ItemArticleRealizationOrder == i.item.item.ArticleRealizationOrder).Single();
                        foreach (var d in i.returnItems)
                        {
                            docDetail.Add(new SalesDocDetailReturnItem {
                                Discount1                   = d.discount1,
                                Discount2                   = d.discount2,
                                DiscountNominal             = d.discountNominal,
                                isReturn                    = true,
                                ItemArticleRealizationOrder = d.item.ArticleRealizationOrder,
                                ItemCode                    = d.item.code,
                                ItemDomesticCOGS            = d.item.DomesticCOGS,
                                ItemDomesticRetail          = d.item.DomesticRetail,
                                ItemDomesticSale            = d.item.DomesticSale,
                                ItemDomesticWholeSale       = d.item.DomesticWholeSale,
                                ItemId           = d.item._id,
                                ItemName         = d.item.name,
                                ItemSize         = d.item.Size,
                                ItemUom          = d.item.Uom,
                                Margin           = d.margin,
                                Price            = d.price,
                                Quantity         = d.quantity,
                                Size             = d.item.Size,
                                SpesialDiscount  = d.specialDiscount,
                                Total            = d.total,
                                SalesDocDetailId = t.Id,
                            });
                        }
                    }

                    Created += await AddReturnItems(docDetail);

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }
            return(model.Id);
        }