public async Task Should_Success_Update_Data()
        {
            var            facade   = new GarmentInvoiceFacade(_dbContext(GetCurrentMethod()), ServiceProvider);
            var            facadeDO = new GarmentDeliveryOrderFacade(ServiceProvider, _dbContext(GetCurrentMethod()));
            GarmentInvoice data     = await dataUtil(facade, GetCurrentMethod()).GetNewDataViewModel(USERNAME);

            GarmentInvoiceItem item = await dataUtil(facade, GetCurrentMethod()).GetNewDataItem(USERNAME);

            var ResponseUpdate = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate, 0);

            List <GarmentInvoiceItem> Newitems = new List <GarmentInvoiceItem>(data.Items);

            Newitems.Add(item);
            data.Items = Newitems;

            var ResponseUpdate1 = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate1, 0);

            //Newitems.Remove(newItem);
            //data.Items = Newitems;
            //var ResponseUpdate2 = await facade.Update((int)data.Id, data, USERNAME);
            //Assert.NotEqual(ResponseUpdate2, 0);
        }
        public async void Should_Success_Update_Data()
        {
            var            facade   = new GarmentInvoiceFacade(_dbContext(GetCurrentMethod()), ServiceProvider);
            var            facadeDO = new GarmentDeliveryOrderFacade(ServiceProvider, _dbContext(GetCurrentMethod()));
            GarmentInvoice data     = await dataUtil(facade, GetCurrentMethod()).GetNewDataViewModel(USERNAME);

            var ResponseUpdate = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate, 0);
            var newItem = new GarmentInvoiceItem
            {
                DeliveryOrderId = It.IsAny <int>(),
                DODate          = DateTimeOffset.Now,
                DeliveryOrderNo = "donos",
                ArrivalDate     = DateTimeOffset.Now,
                TotalAmount     = 2000,
                PaymentType     = "type",
                PaymentMethod   = "method",
                Details         = new List <GarmentInvoiceDetail>
                {
                    new GarmentInvoiceDetail
                    {
                        EPOId            = It.IsAny <int>(),
                        EPONo            = "epono",
                        IPOId            = It.IsAny <int>(),
                        PRItemId         = It.IsAny <int>(),
                        PRNo             = "prno",
                        RONo             = "12343",
                        ProductId        = It.IsAny <int>(),
                        ProductCode      = "code",
                        ProductName      = "name",
                        UomId            = It.IsAny <int>(),
                        UomUnit          = "ROLL",
                        DOQuantity       = 40,
                        PricePerDealUnit = 5000,
                        PaymentDueDays   = 2,
                        POSerialNumber   = "PM132434"
                    }
                }
            };
            List <GarmentInvoiceItem> Newitems = new List <GarmentInvoiceItem>(data.Items);

            Newitems.Add(newItem);
            data.Items = Newitems;

            var ResponseUpdate1 = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate, 0);
        }
        public async Task Should_Success_Update_Data2()
        {
            var            dbContext = _dbContext(GetCurrentMethod());
            var            facade    = new GarmentInvoiceFacade(dbContext, ServiceProvider);
            var            facadeDO  = new GarmentDeliveryOrderFacade(ServiceProvider, dbContext);
            GarmentInvoice data      = await dataUtil(facade, GetCurrentMethod()).GetNewDataViewModel(USERNAME);

            GarmentInvoiceItem item = await dataUtil(facade, GetCurrentMethod()).GetNewDataItem(USERNAME);

            var ResponseUpdate = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate, 0);

            List <GarmentInvoiceItem> Newitems = new List <GarmentInvoiceItem>(data.Items);

            Newitems.Add(item);
            data.Items = Newitems;

            var ResponseUpdate1 = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate, 0);

            dbContext.Entry(data).State = EntityState.Detached;
            foreach (var items in data.Items)
            {
                dbContext.Entry(items).State = EntityState.Detached;
                foreach (var detail in items.Details)
                {
                    dbContext.Entry(detail).State = EntityState.Detached;
                }
            }

            var newData = dbContext.GarmentInvoices.AsNoTracking()
                          .Include(m => m.Items)
                          .ThenInclude(i => i.Details)
                          .FirstOrDefault(m => m.Id == data.Id);

            newData.Items = newData.Items.Take(1).ToList();

            var ResponseUpdate2 = await facade.Update((int)newData.Id, newData, USERNAME);

            Assert.NotEqual(ResponseUpdate2, 0);
        }
        public async Task Should_Error_Update_Data()
        {
            var            facade = new GarmentInvoiceFacade(_dbContext(GetCurrentMethod()), ServiceProvider);
            GarmentInvoice data   = await dataUtil(facade, GetCurrentMethod()).GetNewData(USERNAME);

            List <GarmentInvoiceItem> item = new List <GarmentInvoiceItem>(data.Items);

            data.Items.Add(new GarmentInvoiceItem
            {
                DeliveryOrderId = It.IsAny <int>(),
                DODate          = DateTimeOffset.Now,
                DeliveryOrderNo = "donos",
                ArrivalDate     = DateTimeOffset.Now,
                TotalAmount     = 2000,
                Details         = null
            });

            var ResponseUpdate = await facade.Update((int)data.Id, data, USERNAME);

            Assert.NotEqual(ResponseUpdate, 0);
            var newItem = new GarmentInvoiceItem
            {
                DeliveryOrderId = It.IsAny <int>(),
                DODate          = DateTimeOffset.Now,
                DeliveryOrderNo = "dono",
                ArrivalDate     = DateTimeOffset.Now,
                TotalAmount     = 2000,
                Details         = null
            };
            List <GarmentInvoiceItem> Newitems = new List <GarmentInvoiceItem>(data.Items);

            Newitems.Add(newItem);
            data.Items = Newitems;

            Exception errorNullItems = await Assert.ThrowsAsync <Exception>(async() => await facade.Update((int)data.Id, data, USERNAME));

            Assert.NotNull(errorNullItems.Message);
        }
        public async Task <int> Update(int id, GarmentInvoice model, string user, int clientTimeZoneOffset = 7)
        {
            int Updated = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    if (model.Items != null)
                    {
                        double         total     = 0;
                        HashSet <long> detailIds = GetGarmentInvoiceId(id);
                        foreach (var itemId in detailIds)
                        {
                            GarmentInvoiceItem data = model.Items.FirstOrDefault(prop => prop.Id.Equals(itemId));
                            if (data == null)
                            {
                                GarmentInvoiceItem dataItem = dbContext.GarmentInvoiceItems.FirstOrDefault(prop => prop.Id.Equals(itemId));
                                EntityExtension.FlagForDelete(dataItem, user, USER_AGENT);
                                var Details = dbContext.GarmentInvoiceDetails.Where(prop => prop.InvoiceItemId.Equals(itemId)).ToList();
                                GarmentDeliveryOrder deliveryOrder = dbContext.GarmentDeliveryOrders.FirstOrDefault(s => s.Id.Equals(dataItem.DeliveryOrderId));
                                deliveryOrder.IsInvoice = false;
                                foreach (GarmentInvoiceDetail detail in Details)
                                {
                                    EntityExtension.FlagForDelete(detail, user, USER_AGENT);
                                }
                            }
                            else
                            {
                                EntityExtension.FlagForUpdate(data, user, USER_AGENT);
                            }

                            foreach (GarmentInvoiceItem item in model.Items)
                            {
                                total += item.TotalAmount;
                                if (item.Id <= 0)
                                {
                                    GarmentDeliveryOrder garmentDeliveryOrder = dbSetDeliveryOrder.FirstOrDefault(s => s.Id == item.DeliveryOrderId);
                                    if (garmentDeliveryOrder != null)
                                    {
                                        garmentDeliveryOrder.IsInvoice = true;
                                    }
                                    EntityExtension.FlagForCreate(item, user, USER_AGENT);
                                }
                                else
                                {
                                    EntityExtension.FlagForUpdate(item, user, USER_AGENT);
                                }

                                foreach (GarmentInvoiceDetail detail in item.Details)
                                {
                                    if (item.Id <= 0)
                                    {
                                        EntityExtension.FlagForCreate(detail, user, USER_AGENT);
                                    }
                                    else
                                    {
                                        EntityExtension.FlagForUpdate(detail, user, USER_AGENT);
                                    }
                                }
                            }
                        }
                    }
                    EntityExtension.FlagForUpdate(model, user, USER_AGENT);
                    this.dbSet.Update(model);

                    Updated = await dbContext.SaveChangesAsync();

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

            return(Updated);
        }
Example #6
0
        public async Task <int> Update(int id, GarmentInvoice model, string user, int clientTimeZoneOffset = 7)
        {
            int Updated = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    if (model.Items != null)
                    {
                        double         total     = 0;
                        HashSet <long> detailIds = GetGarmentInvoiceId(id);
                        foreach (var itemId in detailIds)
                        {
                            GarmentInvoiceItem data = model.Items.FirstOrDefault(prop => prop.Id.Equals(itemId));
                            if (data == null)
                            {
                                GarmentInvoiceItem dataItem = dbContext.GarmentInvoiceItems.FirstOrDefault(prop => prop.Id.Equals(itemId));
                                EntityExtension.FlagForDelete(dataItem, user, USER_AGENT);
                                var Details = dbContext.GarmentInvoiceDetails.Where(prop => prop.InvoiceItemId.Equals(itemId)).ToList();
                                GarmentDeliveryOrder deliveryOrder = dbContext.GarmentDeliveryOrders.FirstOrDefault(s => s.Id.Equals(dataItem.DeliveryOrderId));
                                deliveryOrder.IsInvoice = false;
                                foreach (GarmentInvoiceDetail detail in Details)
                                {
                                    EntityExtension.FlagForDelete(detail, user, USER_AGENT);
                                }

                                await _garmentDebtBalanceService.EmptyInvoice((int)dataItem.DeliveryOrderId);
                            }
                            else
                            {
                                EntityExtension.FlagForUpdate(data, user, USER_AGENT);
                            }

                            foreach (GarmentInvoiceItem item in model.Items)
                            {
                                total += item.TotalAmount;
                                if (item.Id <= 0)
                                {
                                    GarmentDeliveryOrder garmentDeliveryOrder = dbSetDeliveryOrder.FirstOrDefault(s => s.Id == item.DeliveryOrderId);
                                    if (garmentDeliveryOrder != null)
                                    {
                                        garmentDeliveryOrder.IsInvoice = true;
                                    }
                                    EntityExtension.FlagForCreate(item, user, USER_AGENT);

                                    var deliveryOrder = dbSetDeliveryOrder.FirstOrDefault(s => s.Id == item.DeliveryOrderId);
                                    if (deliveryOrder != null)
                                    {
                                        var amount                  = 0.0;
                                        var currencyAmount          = 0.0;
                                        var vatAmount               = 0.0;
                                        var currencyVATAmount       = 0.0;
                                        var incomeTaxAmount         = 0.0;
                                        var currencyIncomeTaxAmount = 0.0;

                                        if (model.CurrencyCode == "IDR")
                                        {
                                            amount = item.TotalAmount;
                                            if (model.IsPayVat)
                                            {
                                                vatAmount = item.TotalAmount * 0.1;
                                            }

                                            if (model.IsPayTax)
                                            {
                                                incomeTaxAmount = item.TotalAmount * model.IncomeTaxRate / 100;
                                            }
                                        }
                                        else
                                        {
                                            amount         = item.TotalAmount * deliveryOrder.DOCurrencyRate.GetValueOrDefault();
                                            currencyAmount = item.TotalAmount;
                                            if (model.IsPayVat)
                                            {
                                                vatAmount         = amount * 0.1;
                                                currencyVATAmount = item.TotalAmount * 0.1;
                                            }

                                            if (model.IsPayTax)
                                            {
                                                incomeTaxAmount         = amount * model.IncomeTaxRate / 100;
                                                currencyIncomeTaxAmount = item.TotalAmount * model.IncomeTaxRate / 100;
                                            }
                                        }

                                        await _garmentDebtBalanceService.UpdateFromInvoice((int)deliveryOrder.Id, new InvoiceFormDto((int)model.Id, model.InvoiceDate, model.InvoiceNo, amount, currencyAmount, vatAmount, incomeTaxAmount, model.IsPayVat, model.IsPayTax, currencyVATAmount, currencyIncomeTaxAmount, model.VatNo));
                                    }
                                }
                                else
                                {
                                    EntityExtension.FlagForUpdate(item, user, USER_AGENT);
                                }

                                foreach (GarmentInvoiceDetail detail in item.Details)
                                {
                                    if (item.Id <= 0)
                                    {
                                        EntityExtension.FlagForCreate(detail, user, USER_AGENT);
                                    }
                                    else
                                    {
                                        EntityExtension.FlagForUpdate(detail, user, USER_AGENT);
                                    }
                                }
                            }
                        }
                    }
                    EntityExtension.FlagForUpdate(model, user, USER_AGENT);
                    this.dbSet.Update(model);

                    Updated = await dbContext.SaveChangesAsync();

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

            return(Updated);
        }
        public ReportIndexDto(GarmentDeliveryOrder garmentDeliveryOrders, GarmentBeacukaiItem deliveryOrderCustoms, GarmentDeliveryOrderItem deliveryOrderItems, GarmentInvoiceItem deliveryOrderInvoiceItems, GarmentInvoice deliveryOrderInvoices, GarmentExternalPurchaseOrder deliveryOrderExternalPurchaseOrders, GarmentInternNoteDetail deliveryOrderInternalNoteDetails, GarmentInternNoteItem deliveryOrderInternalNoteItems, GarmentInternNote deliveryOrderInternalNotes)
        {
            if (deliveryOrderCustoms != null)
            {
                CustomsArrivalDate = deliveryOrderCustoms.ArrivalDate;
            }

            if (deliveryOrderExternalPurchaseOrders != null)
            {
                SupplierId             = deliveryOrderExternalPurchaseOrders.SupplierId;
                SupplierName           = deliveryOrderExternalPurchaseOrders.SupplierName;
                IsImportSupplier       = deliveryOrderExternalPurchaseOrders.SupplierImport;
                AccountingCategoryName = deliveryOrderExternalPurchaseOrders.Category;
                PurchasingCategoryName = deliveryOrderExternalPurchaseOrders.Category;
            }

            var dppAmount = 0.0;

            if (deliveryOrderInternalNoteDetails != null)
            {
                ProductName          = deliveryOrderInternalNoteDetails.ProductName;
                InternalNoteQuantity = deliveryOrderInternalNoteDetails.Quantity;
                dppAmount            = deliveryOrderInternalNoteDetails.PriceTotal;
                Total = dppAmount;
            }

            if (garmentDeliveryOrders != null)
            {
                GarmentDeliveryOrderId = (int)garmentDeliveryOrders.Id;
                GarmentDeliveryOrderNo = garmentDeliveryOrders.DONo;
                BillNo      = garmentDeliveryOrders.BillNo;
                PaymentBill = garmentDeliveryOrders.PaymentBill;
            }

            if (deliveryOrderInvoices != null)
            {
                InvoiceId = (int)deliveryOrderInvoices.Id;
                InvoiceNo = deliveryOrderInvoices.InvoiceNo;
                VATNo     = deliveryOrderInvoices.VatNo;

                var vatAmount = 0.0;
                if (deliveryOrderInvoices.UseVat && deliveryOrderInvoices.IsPayVat)
                {
                    vatAmount = dppAmount * 0.1;
                    Total    += vatAmount;
                }

                var incomeTaxAmount = 0.0;
                if (deliveryOrderInvoices.UseIncomeTax && deliveryOrderInvoices.IsPayTax)
                {
                    incomeTaxAmount = dppAmount * deliveryOrderInvoices.IncomeTaxRate / 100;
                    Total          += incomeTaxAmount;
                }

                VATAmount       = vatAmount;
                IncomeTaxAmount = incomeTaxAmount;
            }
        }