Example #1
0
        async Task <string> GenerateNo(GarmentUnitDeliveryOrder model, int clientTimeZoneOffset)
        {
            GarmentUnitReceiptNote garmentUnitReceiptNote = (from data in dbContext.GarmentUnitReceiptNotes select data).FirstOrDefault();
            DateTimeOffset         dateTimeOffsetNow      = garmentUnitReceiptNote.ReceiptDate;
            string Month = dateTimeOffsetNow.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("MM");
            string Year  = dateTimeOffsetNow.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("yy");
            string Day   = dateTimeOffsetNow.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("dd");

            string no      = string.Concat("DO", garmentUnitReceiptNote.UnitCode, Year, Month, Day);
            int    Padding = 4;

            var lastNo = await this.dbSet.Where(w => w.UnitDONo.StartsWith(no) && !w.IsDeleted).OrderByDescending(o => o.UnitDONo).FirstOrDefaultAsync();

            if (lastNo == null)
            {
                return(no + "1".PadLeft(Padding, '0'));
            }
            else
            {
                //int lastNoNumber = Int32.Parse(lastNo.INNo.Replace(no, "")) + 1;
                int.TryParse(lastNo.UnitDONo.Replace(no, ""), out int lastno1);
                int lastNoNumber = lastno1 + 1;
                return(no + lastNoNumber.ToString().PadLeft(Padding, '0'));
            }
        }
        public async Task <string> GenerateNo(GarmentUnitDeliveryOrder model)
        {
            DateTimeOffset dateTimeOffset = model.UnitDODate.ToOffset(new TimeSpan(identityService.TimezoneOffset, 0, 0));
            string         Month          = dateTimeOffset.ToString("MM");
            string         Year           = dateTimeOffset.ToString("yy");
            string         Day            = dateTimeOffset.ToString("dd");

            string pre      = model.UnitDOType == "MARKETING" ? "DOM" : "DO";
            string unitCode = model.UnitDOType == "MARKETING" ? model.UnitSenderCode: model.UnitRequestCode;

            string no      = string.Concat(pre, unitCode, Year, Month, Day);
            int    Padding = 3;

            var lastDataByNo = await dbSet.Where(w => w.UnitDONo.StartsWith(no) && !w.IsDeleted).OrderByDescending(o => o.UnitDONo).FirstOrDefaultAsync();

            if (lastDataByNo == null)
            {
                return(no + "1".PadLeft(Padding, '0'));
            }
            else
            {
                int.TryParse(lastDataByNo.UnitDONo.Replace(no, ""), out int lastNoNumber);
                return(string.Concat(no, (lastNoNumber + 1).ToString().PadLeft(Padding, '0')));
            }
        }
Example #3
0
        public async Task <GarmentUnitDeliveryOrder> GetNewData(GarmentUnitReceiptNote unitReceiptNote1 = null)
        {
            DateTimeOffset now      = DateTimeOffset.Now;
            long           nowTicks = now.Ticks;

            var garmentUnitReceiptNote = unitReceiptNote1 ?? await Task.Run(() => UNDataUtil.GetTestDataWithStorage(nowTicks));

            GarmentUnitDeliveryOrder garmentUnitDeliveryOrder = new GarmentUnitDeliveryOrder
            {
                UnitDOType      = "SAMPLE",
                UnitDODate      = DateTimeOffset.Now,
                UnitSenderId    = garmentUnitReceiptNote.UnitId,
                UnitRequestCode = garmentUnitReceiptNote.UnitCode,
                UnitRequestName = garmentUnitReceiptNote.UnitName,
                UnitRequestId   = garmentUnitReceiptNote.UnitId,
                UnitSenderCode  = garmentUnitReceiptNote.UnitCode,
                UnitSenderName  = garmentUnitReceiptNote.UnitName,
                StorageId       = garmentUnitReceiptNote.StorageId,
                StorageCode     = garmentUnitReceiptNote.StorageCode,
                StorageName     = garmentUnitReceiptNote.StorageName,
                RONo            = garmentUnitReceiptNote.Items.Select(i => i.RONo).FirstOrDefault(),
                Article         = $"Article{nowTicks}",
                Items           = new List <GarmentUnitDeliveryOrderItem>()
            };

            foreach (var item in garmentUnitReceiptNote.Items)
            {
                var garmentDOItems = UNDataUtil.ReadDOItemsByURNItemId((int)item.Id);
                garmentUnitDeliveryOrder.Items.Add(
                    new GarmentUnitDeliveryOrderItem
                {
                    IsSave         = true,
                    DODetailId     = item.DODetailId,
                    EPOItemId      = item.EPOItemId,
                    POItemId       = item.POItemId,
                    PRItemId       = item.PRItemId,
                    FabricType     = "FABRIC",
                    URNId          = garmentUnitReceiptNote.Id,
                    URNItemId      = item.Id,
                    URNNo          = garmentUnitReceiptNote.URNNo,
                    POSerialNumber = item.POSerialNumber,
                    RONo           = item.RONo,
                    ProductId      = item.ProductId,
                    ProductCode    = item.ProductCode,
                    ProductName    = item.ProductName,
                    Quantity       = (double)(item.SmallQuantity - item.OrderQuantity),
                    UomId          = item.UomId,
                    UomUnit        = item.UomUnit,
                    ReturUomId     = item.UomId,
                    ReturUomUnit   = item.UomUnit,
                    DOItemsId      = (int)garmentDOItems.Id,
                    DOCurrencyRate = 1
                });
            }

            return(garmentUnitDeliveryOrder);
        }
        public async Task <int> Create(GarmentUnitDeliveryOrder garmentUnitDeliveryOrder)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    garmentUnitDeliveryOrder.Items = garmentUnitDeliveryOrder.Items.Where(x => x.IsSave).ToList();

                    EntityExtension.FlagForCreate(garmentUnitDeliveryOrder, identityService.Username, USER_AGENT);

                    garmentUnitDeliveryOrder.UnitDONo = await GenerateNo(garmentUnitDeliveryOrder);

                    foreach (var garmentUnitDeliveryOrderItem in garmentUnitDeliveryOrder.Items)
                    {
                        EntityExtension.FlagForCreate(garmentUnitDeliveryOrderItem, identityService.Username, USER_AGENT);

                        GarmentUnitReceiptNote garmentUnitReceiptNote = dbContext.GarmentUnitReceiptNotes.Single(s => s.Id == garmentUnitDeliveryOrderItem.URNId);

                        garmentUnitDeliveryOrderItem.DOCurrencyRate = garmentUnitReceiptNote.DOCurrencyRate;
                        if (garmentUnitDeliveryOrderItem.DOCurrencyRate == 0)
                        {
                            throw new Exception("garmentUnitDeliveryOrderItem.DOCurrencyRate tidak boleh 0");
                        }
                        garmentUnitReceiptNote.IsUnitDO = true;

                        GarmentUnitReceiptNoteItem garmentUnitReceiptNoteItem = dbContext.GarmentUnitReceiptNoteItems.Single(s => s.Id == garmentUnitDeliveryOrderItem.URNItemId);
                        garmentUnitDeliveryOrderItem.DOCurrencyRate = garmentUnitReceiptNoteItem.DOCurrencyRate;

                        EntityExtension.FlagForUpdate(garmentUnitReceiptNoteItem, identityService.Username, USER_AGENT);
                        garmentUnitReceiptNoteItem.OrderQuantity = garmentUnitReceiptNoteItem.OrderQuantity + (decimal)garmentUnitDeliveryOrderItem.Quantity;

                        // GarmentDOItems
                        GarmentDOItems garmentDOItems = dbSetGarmentDOItems.FirstOrDefault(w => w.Id == garmentUnitDeliveryOrderItem.DOItemsId);
                        if (garmentDOItems != null)
                        {
                            EntityExtension.FlagForUpdate(garmentDOItems, identityService.Username, USER_AGENT);
                            garmentDOItems.RemainingQuantity = garmentDOItems.RemainingQuantity - (decimal)garmentUnitDeliveryOrderItem.Quantity;
                        }
                    }

                    dbSet.Add(garmentUnitDeliveryOrder);

                    Created = await dbContext.SaveChangesAsync();

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

            return(Created);
        }
Example #5
0
        public IActionResult Get(int id)
        {
            try
            {
                var indexAcceptPdf = Request.Headers["Accept"].ToList().IndexOf("application/pdf");

                var viewModel = facade.ReadById(id);
                if (viewModel == null)
                {
                    throw new Exception("Invalid Id");
                }
                else
                {
                    foreach (var item in viewModel.Items)
                    {
                        GarmentUnitDeliveryOrder garmentUnitDeliveryOrder = facadeUnitDO.ReadById((int)viewModel.UnitDOId);
                        if (garmentUnitDeliveryOrder != null)
                        {
                            GarmentUnitDeliveryOrderViewModel garmentUnitDeliveryOrderViewModel = mapper.Map <GarmentUnitDeliveryOrderViewModel>(garmentUnitDeliveryOrder);
                            var garmentUnitDOItem = garmentUnitDeliveryOrder.Items.FirstOrDefault(i => i.Id == item.UnitDOItemId);
                            if (garmentUnitDOItem != null)
                            {
                                item.DesignColor = garmentUnitDOItem.DesignColor;
                                item.RONo        = garmentUnitDOItem.RONo;
                            }
                        }
                    }
                }

                if (indexAcceptPdf < 0)
                {
                    Dictionary <string, object> Result =
                        new ResultFormatter(ApiVersion, General.OK_STATUS_CODE, General.OK_MESSAGE)
                        .Ok(viewModel);
                    return(Ok(Result));
                }
                else
                {
                    int clientTimeZoneOffset = int.Parse(Request.Headers["x-timezone-offset"].First());

                    var stream = GarmentUnitExpenditureNotePDFTemplate.GeneratePdfTemplate(serviceProvider, viewModel);

                    return(new FileStreamResult(stream, "application/pdf")
                    {
                        FileDownloadName = $"{viewModel.UENNo}.pdf"
                    });
                }
            }
            catch (Exception e)
            {
                Dictionary <string, object> Result =
                    new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message)
                    .Fail();
                return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result));
            }
        }
        public Dictionary <string, object> GetResultFormatterOk(GarmentUnitDeliveryOrder garmentUnitDeliveryOrder = null)
        {
            var data = GetNewData(garmentUnitDeliveryOrder);

            Dictionary <string, object> result =
                new ResultFormatter("1.0", General.OK_STATUS_CODE, General.OK_MESSAGE)
                .Ok(data);

            return(result);
        }
        private void Test_Get_PDF_By_Id()
        {
            var mockFacade = new Mock <IGarmentUnitExpenditureNoteFacade>();

            mockFacade.Setup(x => x.ReadById(It.IsAny <int>()))
            .Returns(ViewModel);

            var mockMapper = new Mock <IMapper>();

            mockMapper.Setup(x => x.Map <GarmentUnitExpenditureNoteViewModel>(It.IsAny <GarmentUnitExpenditureNote>()))
            .Returns(ViewModel);

            var serviceProvider = GetServiceProvider();

            var garmentUnitDeliveryOrder = new GarmentUnitDeliveryOrder
            {
                Id       = It.IsAny <int>(),
                UnitDONo = "unitdono",
                Article  = "Article12345",
                RONo     = "RONo12345",
                Items    = new List <GarmentUnitDeliveryOrderItem>
                {
                    new GarmentUnitDeliveryOrderItem
                    {
                        Id   = It.IsAny <int>(),
                        RONo = "RONO",
                    }
                }
            };

            var mockGarmentUnitDeliveryOrderFacade = new Mock <IGarmentUnitDeliveryOrderFacade>();

            mockGarmentUnitDeliveryOrderFacade.Setup(x => x.ReadById(It.IsAny <int>()))
            .Returns(garmentUnitDeliveryOrder);

            mockMapper.Setup(x => x.Map <GarmentUnitDeliveryOrderViewModel>(It.IsAny <GarmentUnitDeliveryOrder>()))
            .Returns(new GarmentUnitDeliveryOrderViewModel {
                Id    = It.IsAny <int>(),
                Items = new List <GarmentUnitDeliveryOrderItemViewModel>
                {
                    new GarmentUnitDeliveryOrderItemViewModel
                    {
                        Id = It.IsAny <int>()
                    }
                }
            });

            GarmentUnitExpenditureNoteController controller = GetController(mockFacade, mockGarmentUnitDeliveryOrderFacade, null, mockMapper);

            controller.ControllerContext.HttpContext.Request.Headers["Accept"] = "application/pdf";

            var response = controller.Get(It.IsAny <int>());

            Assert.NotNull(response.GetType().GetProperty("FileStream"));
        }
        public async Task <GarmentUnitDeliveryOrder> GetNewData()
        {
            DateTimeOffset now      = DateTimeOffset.Now;
            long           nowTicks = now.Ticks;

            var garmentUnitReceiptNote = await Task.Run(() => UNDataUtil.GetTestDataWithStorage(nowTicks));

            GarmentUnitDeliveryOrder garmentUnitDeliveryOrder = new GarmentUnitDeliveryOrder
            {
                UnitDOType     = "RETUR",
                UnitDODate     = DateTimeOffset.Now,
                UnitSenderId   = garmentUnitReceiptNote.UnitId,
                UnitSenderCode = garmentUnitReceiptNote.UnitCode,
                UnitSenderName = garmentUnitReceiptNote.UnitName,
                StorageId      = garmentUnitReceiptNote.StorageId,
                StorageCode    = garmentUnitReceiptNote.StorageCode,
                StorageName    = garmentUnitReceiptNote.StorageName,
                DONo           = garmentUnitReceiptNote.DONo,
                Items          = new List <GarmentUnitDeliveryOrderItem>()
            };

            foreach (var item in garmentUnitReceiptNote.Items)
            {
                garmentUnitDeliveryOrder.Items.Add(
                    new GarmentUnitDeliveryOrderItem
                {
                    IsSave            = true,
                    DODetailId        = item.DODetailId,
                    EPOItemId         = item.EPOItemId,
                    POItemId          = item.POItemId,
                    PRItemId          = item.PRItemId,
                    URNId             = garmentUnitReceiptNote.Id,
                    URNItemId         = item.Id,
                    URNNo             = garmentUnitReceiptNote.URNNo,
                    POSerialNumber    = item.POSerialNumber,
                    RONo              = item.RONo,
                    ProductId         = item.ProductId,
                    ProductCode       = item.ProductCode,
                    ProductName       = item.ProductName,
                    Quantity          = (double)(item.SmallQuantity - item.OrderQuantity),
                    UomId             = item.UomId,
                    UomUnit           = item.UomUnit,
                    ReturQuantity     = 20,
                    ReturUomId        = item.UomId,
                    ReturUomUnit      = item.UomUnit,
                    DefaultDOQuantity = 20
                });
            }

            return(garmentUnitDeliveryOrder);
        }
        public async Task <int> Create(GarmentUnitDeliveryOrder garmentUnitDeliveryOrder)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    garmentUnitDeliveryOrder.Items = garmentUnitDeliveryOrder.Items.Where(x => x.IsSave).ToList();

                    EntityExtension.FlagForCreate(garmentUnitDeliveryOrder, identityService.Username, USER_AGENT);

                    garmentUnitDeliveryOrder.UnitDONo = await GenerateNo(garmentUnitDeliveryOrder);

                    foreach (var garmentUnitDeliveryOrderItem in garmentUnitDeliveryOrder.Items)
                    {
                        EntityExtension.FlagForCreate(garmentUnitDeliveryOrderItem, identityService.Username, USER_AGENT);

                        GarmentDeliveryOrderDetail doDetail = dbContext.GarmentDeliveryOrderDetails.Single(s => s.Id.Equals(garmentUnitDeliveryOrderItem.DODetailId));

                        doDetail.ReturQuantity = doDetail.ReturQuantity + garmentUnitDeliveryOrderItem.ReturQuantity;

                        GarmentUnitReceiptNoteItem garmentUnitReceiptNoteItem = dbContext.GarmentUnitReceiptNoteItems.Single(s => s.Id == garmentUnitDeliveryOrderItem.URNItemId);
                        EntityExtension.FlagForUpdate(garmentUnitReceiptNoteItem, identityService.Username, USER_AGENT);
                        garmentUnitReceiptNoteItem.OrderQuantity = garmentUnitReceiptNoteItem.OrderQuantity + (decimal)garmentUnitDeliveryOrderItem.Quantity;

                        GarmentDOItems garmentDOItems = dbContext.GarmentDOItems.SingleOrDefault(x => x.URNItemId == garmentUnitDeliveryOrderItem.URNItemId);
                        if (garmentDOItems != null)
                        {
                            garmentDOItems.RemainingQuantity -= (decimal)garmentUnitDeliveryOrderItem.Quantity;
                        }
                    }

                    dbSet.Add(garmentUnitDeliveryOrder);

                    Created = await dbContext.SaveChangesAsync();

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

            return(Created);
        }
Example #10
0
        public GarmentUnitDeliveryOrder GetNewData()
        {
            var GarmentUnitReceiptNote = Task.Run(() => UNDataUtil.GetTestData()).Result;
            GarmentUnitDeliveryOrder garmentUnitDeliveryOrder = new GarmentUnitDeliveryOrder
            {
                UnitDONo        = "NK1234L",
                UnitDOType      = "Jumlah",
                UnitDODate      = DateTimeOffset.Now,
                UnitSenderId    = 1,
                UnitRequestCode = "unitno",
                UnitRequestName = "unitname",
                UnitRequestId   = 1,
                UnitSenderCode  = "sendercode",
                UnitSenderName  = "sendername",
                StorageId       = 1,
                StorageCode     = "storagecode",
                StorageName     = "storagename",
                RONo            = "RONO",
                Article         = "Article",
                Items           = new List <GarmentUnitDeliveryOrderItem>()
            };

            foreach (var item in GarmentUnitReceiptNote.Items)
            {
                garmentUnitDeliveryOrder.Items.Add(
                    new GarmentUnitDeliveryOrderItem
                {
                    DODetailId     = item.DODetailId,
                    EPOItemId      = item.EPOItemId,
                    POItemId       = item.POItemId,
                    PRItemId       = item.PRItemId,
                    FabricType     = "fabric",
                    URNId          = GarmentUnitReceiptNote.Id,
                    URNItemId      = item.Id,
                    URNNo          = GarmentUnitReceiptNote.URNNo,
                    POSerialNumber = item.POSerialNumber,
                    RONo           = item.RONo,
                    ProductId      = item.ProductId,
                    ProductCode    = item.ProductCode,
                    ProductName    = item.ProductName,
                    Quantity       = 8,
                    UomId          = Convert.ToInt32(item.UomId),
                    UomUnit        = item.UomUnit,
                });
            }

            return(garmentUnitDeliveryOrder);
        }
        public GarmentDeliveryReturnViewModel GetNewData(GarmentUnitDeliveryOrder garmentUnitDeliveryOrder = null)
        {
            long nowTicks = DateTimeOffset.Now.Ticks;

            var data = new GarmentDeliveryReturnViewModel
            {
                UnitDOId = garmentUnitDeliveryOrder != null? garmentUnitDeliveryOrder.Id : 0,
                DRNo     = $"DRNO{nowTicks}",
                RONo     = $"RONO{nowTicks}",
                Items    = new List <GarmentDeliveryReturnItemViewModel>
                {
                    new GarmentDeliveryReturnItemViewModel
                    {
                        Quantity = 1,
                        IsSave   = true,
                    }
                }
            };

            return(data);
        }
Example #12
0
        public async Task <int> Create(GarmentUnitDeliveryOrder m, string user, int clientTimeZoneOffset = 7)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    EntityExtension.FlagForCreate(m, user, USER_AGENT);

                    m.UnitDONo = await GenerateNo(m, clientTimeZoneOffset);

                    foreach (var item in m.Items)
                    {
                        GarmentUnitReceiptNoteItem garmentUnitReceiptNote = this.dbContext.GarmentUnitReceiptNoteItems.FirstOrDefault(s => s.Id == item.URNItemId);
                        if (garmentUnitReceiptNote != null)
                        {
                            garmentUnitReceiptNote.OrderQuantity = garmentUnitReceiptNote.OrderQuantity + (decimal)item.Quantity;
                        }
                        EntityExtension.FlagForCreate(item, user, USER_AGENT);
                    }

                    this.dbSet.Add(m);

                    Created = await dbContext.SaveChangesAsync();

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

            return(Created);
        }
        public string GetResultFormatterOkString(GarmentUnitDeliveryOrder data = null)
        {
            var result = GetResultFormatterOk(data);

            return(JsonConvert.SerializeObject(result));
        }
Example #14
0
 public Task <int> Update(int id, GarmentUnitDeliveryOrder m, string user, int clientTimeZoneOffset = 7)
 {
     throw new NotImplementedException();
 }
Example #15
0
        public async Task <int> Update(int id, GarmentUnitDeliveryOrder garmentUnitDeliveryOrder)
        {
            int Updated = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    garmentUnitDeliveryOrder.Items = garmentUnitDeliveryOrder.Items.Where(x => x.IsSave).ToList();

                    var oldGarmentUnitDeliveryOrder = dbSet
                                                      .Include(d => d.Items)
                                                      //.AsNoTracking()
                                                      .Single(m => m.Id == id);

                    EntityExtension.FlagForUpdate(oldGarmentUnitDeliveryOrder, identityService.Username, USER_AGENT);

                    foreach (var garmentUnitDeliveryOrderItem in garmentUnitDeliveryOrder.Items)
                    {
                        if (garmentUnitDeliveryOrderItem.Id != 0)
                        {
                            var oldGarmentUnitDeliveryOrderItem = oldGarmentUnitDeliveryOrder.Items.FirstOrDefault(i => i.Id == garmentUnitDeliveryOrderItem.Id);

                            EntityExtension.FlagForUpdate(oldGarmentUnitDeliveryOrderItem, identityService.Username, USER_AGENT);

                            GarmentUnitReceiptNoteItem garmentUnitReceiptNoteItem = dbContext.GarmentUnitReceiptNoteItems.Single(s => s.Id == oldGarmentUnitDeliveryOrderItem.URNItemId);
                            EntityExtension.FlagForUpdate(garmentUnitReceiptNoteItem, identityService.Username, USER_AGENT);
                            garmentUnitReceiptNoteItem.OrderQuantity = garmentUnitReceiptNoteItem.OrderQuantity - (decimal)oldGarmentUnitDeliveryOrderItem.Quantity + (decimal)garmentUnitDeliveryOrderItem.Quantity;

                            oldGarmentUnitDeliveryOrderItem.Quantity          = garmentUnitDeliveryOrderItem.Quantity;
                            oldGarmentUnitDeliveryOrderItem.DefaultDOQuantity = garmentUnitDeliveryOrderItem.Quantity; // Jumlah DO awal mengikuti Jumlah yang diubah (reset)
                            oldGarmentUnitDeliveryOrderItem.FabricType        = garmentUnitDeliveryOrderItem.FabricType;
                        }
                        else
                        {
                            EntityExtension.FlagForCreate(garmentUnitDeliveryOrderItem, identityService.Username, USER_AGENT);
                            oldGarmentUnitDeliveryOrder.Items.Add(garmentUnitDeliveryOrderItem);

                            GarmentUnitReceiptNoteItem garmentUnitReceiptNoteItem = dbContext.GarmentUnitReceiptNoteItems.Single(s => s.Id == garmentUnitDeliveryOrderItem.URNItemId);
                            EntityExtension.FlagForUpdate(garmentUnitReceiptNoteItem, identityService.Username, USER_AGENT);
                            garmentUnitReceiptNoteItem.OrderQuantity = garmentUnitReceiptNoteItem.OrderQuantity + (decimal)garmentUnitDeliveryOrderItem.Quantity;
                        }
                    }

                    foreach (var oldGarmentUnitDeliveryOrderItem in oldGarmentUnitDeliveryOrder.Items)
                    {
                        var newGarmentUnitDeliveryOrderItem = garmentUnitDeliveryOrder.Items.FirstOrDefault(i => i.Id == oldGarmentUnitDeliveryOrderItem.Id);
                        if (newGarmentUnitDeliveryOrderItem == null)
                        {
                            EntityExtension.FlagForDelete(oldGarmentUnitDeliveryOrderItem, identityService.Username, USER_AGENT);

                            GarmentUnitReceiptNote garmentUnitReceiptNote = dbContext.GarmentUnitReceiptNotes.Single(s => s.Id == oldGarmentUnitDeliveryOrderItem.URNId);
                            oldGarmentUnitDeliveryOrderItem.DOCurrencyRate = garmentUnitReceiptNote.DOCurrencyRate;

                            GarmentUnitReceiptNoteItem garmentUnitReceiptNoteItem = dbContext.GarmentUnitReceiptNoteItems.Single(s => s.Id == oldGarmentUnitDeliveryOrderItem.URNItemId);
                            EntityExtension.FlagForUpdate(garmentUnitReceiptNoteItem, identityService.Username, USER_AGENT);
                            garmentUnitReceiptNoteItem.OrderQuantity = garmentUnitReceiptNoteItem.OrderQuantity - (decimal)oldGarmentUnitDeliveryOrderItem.Quantity;
                        }
                    }

                    //dbSet.Update(garmentUnitDeliveryOrder);

                    Updated = await dbContext.SaveChangesAsync();

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

            return(Updated);
        }
        public async Task <GarmentUnitExpenditureNote> GetNewDataMonitoringFlow(GarmentUnitDeliveryOrder garmentunitdeliveryorder = null)
        {
            long nowTicks = DateTimeOffset.Now.Ticks;

            var garmentUnitDeliveryOrder = garmentunitdeliveryorder ?? await Task.Run(() => garmentUnitDeliveryOrderDataUtil.GetTestDataMultipleItem());

            var garmentUnitExpenditureNote = new GarmentUnitExpenditureNote
            {
                UnitSenderId   = garmentUnitDeliveryOrder.UnitSenderId,
                UnitSenderCode = "SMP1",
                UnitSenderName = garmentUnitDeliveryOrder.UnitSenderName,

                UnitRequestId   = garmentUnitDeliveryOrder.UnitRequestId,
                UnitRequestCode = garmentUnitDeliveryOrder.UnitRequestCode,
                UnitRequestName = garmentUnitDeliveryOrder.UnitRequestName,

                UnitDOId = garmentUnitDeliveryOrder.Id,
                UnitDONo = garmentUnitDeliveryOrder.UnitDONo,

                StorageId   = garmentUnitDeliveryOrder.StorageId,
                StorageCode = garmentUnitDeliveryOrder.StorageCode,
                StorageName = garmentUnitDeliveryOrder.StorageName,

                StorageRequestId   = garmentUnitDeliveryOrder.StorageRequestId,
                StorageRequestCode = garmentUnitDeliveryOrder.StorageRequestCode,
                StorageRequestName = garmentUnitDeliveryOrder.StorageRequestName,

                ExpenditureType = "PROSES",
                ExpenditureTo   = "PROSES",
                UENNo           = "UENNO12345",

                ExpenditureDate = DateTimeOffset.Now,

                IsPreparing = false,

                Items = new List <GarmentUnitExpenditureNoteItem>()
            };

            foreach (var item in garmentUnitDeliveryOrder.Items)
            {
                var garmentUnitExpenditureNoteItem = new GarmentUnitExpenditureNoteItem
                {
                    IsSave     = true,
                    DODetailId = item.DODetailId,

                    EPOItemId = item.EPOItemId,

                    URNItemId    = item.URNItemId,
                    UnitDOItemId = item.Id,
                    PRItemId     = item.PRItemId,

                    FabricType     = item.FabricType,
                    POItemId       = item.POItemId,
                    POSerialNumber = item.POSerialNumber,

                    ProductId     = item.ProductId,
                    ProductCode   = item.ProductCode,
                    ProductName   = "FABRIC",
                    ProductRemark = item.ProductRemark,
                    Quantity      = 5,

                    RONo = item.RONo,

                    UomId   = item.UomId,
                    UomUnit = item.UomUnit,

                    PricePerDealUnit = item.PricePerDealUnit,
                    DOCurrencyRate   = item.DOCurrencyRate,
                    Conversion       = 1,
                    ReturQuantity    = 1,
                };
                new GarmentUnitExpenditureNoteItem
                {
                    Id         = 0,
                    IsSave     = true,
                    DODetailId = item.DODetailId,

                    EPOItemId = item.EPOItemId,

                    URNItemId    = item.URNItemId,
                    UnitDOItemId = item.Id,
                    PRItemId     = item.PRItemId,

                    FabricType     = item.FabricType,
                    POItemId       = item.POItemId,
                    POSerialNumber = item.POSerialNumber,

                    ProductId     = item.ProductId,
                    ProductCode   = item.ProductCode,
                    ProductName   = "FABRIC",
                    ProductRemark = item.ProductRemark,
                    Quantity      = item.Quantity,

                    RONo = item.RONo,

                    UomId   = item.UomId,
                    UomUnit = item.UomUnit,

                    PricePerDealUnit = item.PricePerDealUnit,
                    DOCurrencyRate   = item.DOCurrencyRate,
                    Conversion       = 1,
                    ReturQuantity    = 1,
                };

                garmentUnitExpenditureNote.Items.Add(garmentUnitExpenditureNoteItem);
            }

            return(garmentUnitExpenditureNote);
        }
        public async Task <int> Update(int id, GarmentUnitDeliveryOrder garmentUnitDeliveryOrder)
        {
            int Updated = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    garmentUnitDeliveryOrder.Items = garmentUnitDeliveryOrder.Items.Where(x => x.IsSave).ToList();

                    var oldGarmentUnitDeliveryOrder = dbSet
                                                      .Include(d => d.Items)
                                                      //.AsNoTracking()
                                                      .Single(m => m.Id == id);

                    EntityExtension.FlagForUpdate(oldGarmentUnitDeliveryOrder, identityService.Username, USER_AGENT);

                    foreach (var garmentUnitDeliveryOrderItem in garmentUnitDeliveryOrder.Items)
                    {
                        if (garmentUnitDeliveryOrderItem.Id != 0)
                        {
                            var oldGarmentUnitDeliveryOrderItem = oldGarmentUnitDeliveryOrder.Items.FirstOrDefault(i => i.Id == garmentUnitDeliveryOrderItem.Id);

                            EntityExtension.FlagForUpdate(oldGarmentUnitDeliveryOrderItem, identityService.Username, USER_AGENT);
                            GarmentDeliveryOrderDetail doDetail = dbContext.GarmentDeliveryOrderDetails.Single(s => s.Id.Equals(garmentUnitDeliveryOrderItem.DODetailId));

                            doDetail.ReturQuantity = doDetail.ReturQuantity - oldGarmentUnitDeliveryOrderItem.ReturQuantity + garmentUnitDeliveryOrderItem.ReturQuantity;

                            GarmentUnitReceiptNoteItem garmentUnitReceiptNoteItem = dbContext.GarmentUnitReceiptNoteItems.Single(s => s.Id == oldGarmentUnitDeliveryOrderItem.URNItemId);
                            EntityExtension.FlagForUpdate(garmentUnitReceiptNoteItem, identityService.Username, USER_AGENT);
                            garmentUnitReceiptNoteItem.OrderQuantity = garmentUnitReceiptNoteItem.OrderQuantity - (decimal)oldGarmentUnitDeliveryOrderItem.Quantity + (decimal)garmentUnitDeliveryOrderItem.Quantity;

                            GarmentDOItems garmentDOItems = dbContext.GarmentDOItems.SingleOrDefault(x => x.URNItemId == garmentUnitDeliveryOrderItem.URNItemId);
                            if (garmentDOItems != null)
                            {
                                garmentDOItems.RemainingQuantity = garmentDOItems.RemainingQuantity + (decimal)oldGarmentUnitDeliveryOrderItem.Quantity - (decimal)garmentUnitDeliveryOrderItem.Quantity;
                            }

                            oldGarmentUnitDeliveryOrderItem.Quantity          = garmentUnitDeliveryOrderItem.Quantity;
                            oldGarmentUnitDeliveryOrderItem.ReturQuantity     = garmentUnitDeliveryOrderItem.ReturQuantity;
                            oldGarmentUnitDeliveryOrderItem.DefaultDOQuantity = garmentUnitDeliveryOrderItem.DefaultDOQuantity;
                        }
                        else
                        {
                            EntityExtension.FlagForCreate(garmentUnitDeliveryOrderItem, identityService.Username, USER_AGENT);
                            oldGarmentUnitDeliveryOrder.Items.Add(garmentUnitDeliveryOrderItem);
                            GarmentDeliveryOrderDetail doDetail = dbContext.GarmentDeliveryOrderDetails.Single(s => s.Id.Equals(garmentUnitDeliveryOrderItem.DODetailId));

                            doDetail.ReturQuantity = doDetail.ReturQuantity + garmentUnitDeliveryOrderItem.ReturQuantity;

                            GarmentUnitReceiptNoteItem garmentUnitReceiptNoteItem = dbContext.GarmentUnitReceiptNoteItems.Single(s => s.Id == garmentUnitDeliveryOrderItem.URNItemId);
                            EntityExtension.FlagForUpdate(garmentUnitReceiptNoteItem, identityService.Username, USER_AGENT);
                            garmentUnitReceiptNoteItem.OrderQuantity = garmentUnitReceiptNoteItem.OrderQuantity + (decimal)garmentUnitDeliveryOrderItem.Quantity;

                            GarmentDOItems garmentDOItems = dbContext.GarmentDOItems.SingleOrDefault(x => x.URNItemId == garmentUnitDeliveryOrderItem.URNItemId);
                            if (garmentDOItems != null)
                            {
                                garmentDOItems.RemainingQuantity = garmentDOItems.RemainingQuantity - (decimal)garmentUnitDeliveryOrderItem.Quantity;
                            }
                        }
                    }

                    foreach (var oldGarmentUnitDeliveryOrderItem in oldGarmentUnitDeliveryOrder.Items)
                    {
                        var newGarmentUnitDeliveryOrderItem = garmentUnitDeliveryOrder.Items.FirstOrDefault(i => i.Id == oldGarmentUnitDeliveryOrderItem.Id);
                        if (newGarmentUnitDeliveryOrderItem == null)
                        {
                            EntityExtension.FlagForDelete(oldGarmentUnitDeliveryOrderItem, identityService.Username, USER_AGENT);
                            GarmentDeliveryOrderDetail doDetail = dbContext.GarmentDeliveryOrderDetails.Single(s => s.Id.Equals(oldGarmentUnitDeliveryOrderItem.DODetailId));

                            doDetail.ReturQuantity = doDetail.ReturQuantity - oldGarmentUnitDeliveryOrderItem.ReturQuantity;

                            GarmentUnitReceiptNoteItem garmentUnitReceiptNoteItem = dbContext.GarmentUnitReceiptNoteItems.Single(s => s.Id == oldGarmentUnitDeliveryOrderItem.URNItemId);
                            EntityExtension.FlagForUpdate(garmentUnitReceiptNoteItem, identityService.Username, USER_AGENT);
                            garmentUnitReceiptNoteItem.OrderQuantity = garmentUnitReceiptNoteItem.OrderQuantity - (decimal)oldGarmentUnitDeliveryOrderItem.Quantity;

                            GarmentDOItems garmentDOItems = dbContext.GarmentDOItems.SingleOrDefault(x => x.URNItemId == oldGarmentUnitDeliveryOrderItem.URNItemId);
                            if (garmentDOItems != null)
                            {
                                garmentDOItems.RemainingQuantity = garmentDOItems.RemainingQuantity + (decimal)oldGarmentUnitDeliveryOrderItem.Quantity;
                            }
                        }
                    }

                    //dbSet.Update(garmentUnitDeliveryOrder);

                    Updated = await dbContext.SaveChangesAsync();

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

            return(Updated);
        }
        public async Task <GarmentUnitDeliveryOrder> GetNewDataMultipleItem()
        {
            DateTimeOffset now      = DateTimeOffset.Now;
            long           nowTicks = now.Ticks;

            var garmentUnitReceiptNote1 = await Task.Run(() => UNDataUtil.GetTestDataWithStorage());

            var garmentUnitReceiptNote2 = await Task.Run(() => UNDataUtil.GetTestDataWithStorage(nowTicks + 1));

            GarmentUnitDeliveryOrder garmentUnitDeliveryOrder = new GarmentUnitDeliveryOrder
            {
                UnitDOType      = "SAMPLE",
                UnitDODate      = DateTimeOffset.Now,
                UnitSenderId    = garmentUnitReceiptNote1.UnitId,
                UnitRequestCode = garmentUnitReceiptNote1.UnitCode,
                UnitRequestName = garmentUnitReceiptNote1.UnitName,
                UnitRequestId   = garmentUnitReceiptNote1.UnitId,
                UnitSenderCode  = garmentUnitReceiptNote1.UnitCode,
                UnitSenderName  = garmentUnitReceiptNote1.UnitName,
                StorageId       = garmentUnitReceiptNote1.StorageId,
                StorageCode     = garmentUnitReceiptNote1.StorageCode,
                StorageName     = garmentUnitReceiptNote1.StorageName,
                RONo            = garmentUnitReceiptNote1.Items.Select(i => i.RONo).FirstOrDefault(),
                Article         = $"Article{nowTicks}",
                Items           = new List <GarmentUnitDeliveryOrderItem>()
            };

            foreach (var item in garmentUnitReceiptNote1.Items)
            {
                garmentUnitDeliveryOrder.Items.Add(
                    new GarmentUnitDeliveryOrderItem
                {
                    IsSave         = true,
                    DODetailId     = item.DODetailId,
                    EPOItemId      = item.EPOItemId,
                    POItemId       = item.POItemId,
                    PRItemId       = item.PRItemId,
                    FabricType     = "FABRIC",
                    URNId          = garmentUnitReceiptNote1.Id,
                    URNItemId      = item.Id,
                    URNNo          = garmentUnitReceiptNote1.URNNo,
                    POSerialNumber = item.POSerialNumber,
                    RONo           = item.RONo,
                    ProductId      = item.ProductId,
                    ProductCode    = item.ProductCode,
                    ProductName    = item.ProductName,
                    Quantity       = (double)(item.SmallQuantity - item.OrderQuantity),
                    UomId          = item.UomId,
                    UomUnit        = item.UomUnit,
                });
            }



            foreach (var item in garmentUnitReceiptNote2.Items)
            {
                garmentUnitDeliveryOrder.Items.Add(
                    new GarmentUnitDeliveryOrderItem
                {
                    IsSave         = true,
                    DODetailId     = item.DODetailId,
                    EPOItemId      = item.EPOItemId,
                    POItemId       = item.POItemId,
                    PRItemId       = item.PRItemId,
                    FabricType     = "FABRIC",
                    URNId          = garmentUnitReceiptNote1.Id,
                    URNItemId      = item.Id,
                    URNNo          = garmentUnitReceiptNote1.URNNo,
                    POSerialNumber = item.POSerialNumber,
                    RONo           = item.RONo,
                    ProductId      = item.ProductId + 1,
                    ProductCode    = item.ProductCode + $"{nowTicks}",
                    ProductName    = item.ProductName + $"{nowTicks}",
                    Quantity       = (double)(item.SmallQuantity - item.OrderQuantity),
                    UomId          = item.UomId,
                    UomUnit        = item.UomUnit,
                });
            }


            return(garmentUnitDeliveryOrder);
        }