public async Task <GarmentLeftoverWarehouseReceiptAccessory> GetTestDataACC()
        {
            GarmentLeftoverWarehouseReceiptAccessory data = GetNewData();
            await Service.CreateAsync(data);

            return(data);
        }
        public async Task <int> CreateAsync(GarmentLeftoverWarehouseReceiptAccessory model)
        {
            using (var transaction = DbContext.Database.CurrentTransaction ?? DbContext.Database.BeginTransaction())
            {
                try
                {
                    int Created = 0;

                    model.FlagForCreate(IdentityService.Username, UserAgent);
                    model.FlagForUpdate(IdentityService.Username, UserAgent);

                    model.InvoiceNoReceive = GenerateNo(model);

                    foreach (var item in model.Items)
                    {
                        item.FlagForCreate(IdentityService.Username, UserAgent);
                        item.FlagForUpdate(IdentityService.Username, UserAgent);
                    }
                    DbSet.Add(model);
                    Created = await DbContext.SaveChangesAsync();

                    foreach (var item in model.Items)
                    {
                        GarmentLeftoverWarehouseStock stock = new GarmentLeftoverWarehouseStock
                        {
                            ReferenceType = GarmentLeftoverWarehouseStockReferenceTypeEnum.ACCESSORIES,
                            UnitId        = model.RequestUnitId,
                            UnitCode      = model.RequestUnitCode,
                            UnitName      = model.RequestUnitName,
                            PONo          = item.POSerialNumber,
                            UomId         = item.UomUnitId,
                            UomUnit       = item.UomUnit,
                            Quantity      = item.Quantity,
                            ProductCode   = item.ProductCode,
                            ProductId     = item.ProductId,
                            ProductName   = item.ProductName,
                            BasicPrice    = item.BasicPrice
                        };
                        await StockService.StockIn(stock, model.InvoiceNoReceive, model.Id, item.Id);
                    }

                    await UpdateUnitExpenditureNoteIsReceived(model.UENid, true);

                    transaction.Commit();

                    return(Created);
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw e;
                }
            }
        }
        private string GenerateNo(GarmentLeftoverWarehouseReceiptAccessory model)
        {
            string code   = "BMACC";
            string prefix = code + model.RequestUnitCode.Trim() + model._CreatedUtc.ToString("yy") + model._CreatedUtc.ToString("MM");

            var lastNo = DbSet.Where(w => w.InvoiceNoReceive.StartsWith(prefix))
                         .OrderByDescending(o => o.InvoiceNoReceive)
                         .Select(s => int.Parse(s.InvoiceNoReceive.Replace(prefix, "")))
                         .FirstOrDefault();

            var curNo = $"{prefix}{(lastNo + 1).ToString("D4")}";

            return(curNo);
        }
        public GarmentLeftoverWarehouseReceiptAccessoriesViewModel MapToViewModel(GarmentLeftoverWarehouseReceiptAccessory model)
        {
            GarmentLeftoverWarehouseReceiptAccessoriesViewModel viewModel = new GarmentLeftoverWarehouseReceiptAccessoriesViewModel();

            PropertyCopier <GarmentLeftoverWarehouseReceiptAccessory, GarmentLeftoverWarehouseReceiptAccessoriesViewModel> .Copy(model, viewModel);

            viewModel.RequestUnit = new UnitViewModel
            {
                Id   = model.RequestUnitId.ToString(),
                Code = model.RequestUnitCode,
                Name = model.RequestUnitName
            };

            viewModel.Storage = new StorageViewModel
            {
                _id  = model.StorageFromId.ToString(),
                code = model.StorageFromCode,
                name = model.StorageFromName
            };

            if (model.Items != null)
            {
                viewModel.Items = new List <GarmentLeftoverWarehouseReceiptAccessoriesItemViewModel>();
                foreach (var modelItem in model.Items)
                {
                    GarmentLeftoverWarehouseReceiptAccessoriesItemViewModel viewModelItem = new GarmentLeftoverWarehouseReceiptAccessoriesItemViewModel();
                    PropertyCopier <GarmentLeftoverWarehouseReceiptAccessoryItem, GarmentLeftoverWarehouseReceiptAccessoriesItemViewModel> .Copy(modelItem, viewModelItem);

                    viewModelItem.Product = new ProductViewModel
                    {
                        Id   = modelItem.ProductId.ToString(),
                        Code = modelItem.ProductCode,
                        Name = modelItem.ProductName
                    };

                    viewModelItem.Uom = new UomViewModel
                    {
                        Id   = modelItem.UomUnitId.ToString(),
                        Unit = modelItem.UomUnit
                    };

                    viewModel.Items.Add(viewModelItem);
                }
            }
            return(viewModel);
        }
        public GarmentLeftoverWarehouseReceiptAccessory CopyData(GarmentLeftoverWarehouseReceiptAccessory oldData)
        {
            GarmentLeftoverWarehouseReceiptAccessory newData = new GarmentLeftoverWarehouseReceiptAccessory();

            PropertyCopier <GarmentLeftoverWarehouseReceiptAccessory, GarmentLeftoverWarehouseReceiptAccessory> .Copy(oldData, newData);

            newData.Items = new List <GarmentLeftoverWarehouseReceiptAccessoryItem>();
            foreach (var oldItem in oldData.Items)
            {
                GarmentLeftoverWarehouseReceiptAccessoryItem newItem = new GarmentLeftoverWarehouseReceiptAccessoryItem();

                PropertyCopier <GarmentLeftoverWarehouseReceiptAccessoryItem, GarmentLeftoverWarehouseReceiptAccessoryItem> .Copy(oldItem, newItem);

                newData.Items.Add(newItem);
            }

            return(newData);
        }
        public GarmentLeftoverWarehouseReceiptAccessory MapToModel(GarmentLeftoverWarehouseReceiptAccessoriesViewModel viewModel)
        {
            GarmentLeftoverWarehouseReceiptAccessory model = new GarmentLeftoverWarehouseReceiptAccessory();

            PropertyCopier <GarmentLeftoverWarehouseReceiptAccessoriesViewModel, GarmentLeftoverWarehouseReceiptAccessory> .Copy(viewModel, model);

            if (viewModel.RequestUnit != null)
            {
                model.RequestUnitId   = long.Parse(viewModel.RequestUnit.Id);
                model.RequestUnitCode = viewModel.RequestUnit.Code;
                model.RequestUnitName = viewModel.RequestUnit.Name;
            }

            if (viewModel.Storage != null)
            {
                model.StorageFromId   = long.Parse(viewModel.Storage._id);
                model.StorageFromCode = viewModel.Storage.code;
                model.StorageFromName = viewModel.Storage.name;
            }

            model.Items = new List <GarmentLeftoverWarehouseReceiptAccessoryItem>();
            foreach (var viewModelItem in viewModel.Items)
            {
                GarmentLeftoverWarehouseReceiptAccessoryItem modelItem = new GarmentLeftoverWarehouseReceiptAccessoryItem();
                PropertyCopier <GarmentLeftoverWarehouseReceiptAccessoriesItemViewModel, GarmentLeftoverWarehouseReceiptAccessoryItem> .Copy(viewModelItem, modelItem);

                if (viewModelItem.Product != null)
                {
                    modelItem.ProductId   = long.Parse(viewModelItem.Product.Id);
                    modelItem.ProductCode = viewModelItem.Product.Code;
                    modelItem.ProductName = viewModelItem.Product.Name;
                }

                if (viewModelItem.Uom != null)
                {
                    modelItem.UomUnitId = long.Parse(viewModelItem.Uom.Id);
                    modelItem.UomUnit   = viewModelItem.Uom.Unit;
                }

                model.Items.Add(modelItem);
            }

            return(model);
        }
        public async Task <int> UpdateAsync(int id, GarmentLeftoverWarehouseReceiptAccessory model)
        {
            int Updated = 0;

            using (var transaction = DbContext.Database.CurrentTransaction ?? DbContext.Database.BeginTransaction())
            {
                try
                {
                    GarmentLeftoverWarehouseReceiptAccessory existingModel = await DbSet.Where(w => w.Id == id).FirstOrDefaultAsync();

                    //if (existingModel.InvoiceNoReceive != model.InvoiceNoReceive)
                    //{
                    //    existingModel.InvoiceNoReceive = model.InvoiceNoReceive;
                    //}
                    //if (existingModel.RequestUnitCode != model.RequestUnitCode)
                    //{
                    //    existingModel.RequestUnitCode = model.RequestUnitCode;
                    //}
                    //if (existingModel.RequestUnitId != model.RequestUnitId)
                    //{
                    //    existingModel.RequestUnitId = model.RequestUnitId;
                    //}
                    //if (existingModel.RequestUnitName != model.RequestUnitName)
                    //{
                    //    existingModel.RequestUnitName = model.RequestUnitName;
                    //}
                    //if (existingModel.StorageFromName != model.StorageFromName)
                    //{
                    //    existingModel.StorageFromName = model.StorageFromName;
                    //}
                    //if (existingModel.StorageFromId != model.StorageFromId)
                    //{
                    //    existingModel.StorageFromId = model.StorageFromId;
                    //}
                    //if (existingModel.StorageFromCode != model.StorageFromCode)
                    //{
                    //    existingModel.StorageFromCode = model.StorageFromCode;
                    //}
                    if (existingModel.StorageReceiveDate != model.StorageReceiveDate)
                    {
                        existingModel.StorageReceiveDate = model.StorageReceiveDate;
                    }
                    //if (existingModel.UENid != model.UENid)
                    //{
                    //    existingModel.UENid = model.UENid;
                    //}
                    //if (existingModel.UENNo != model.UENNo)
                    //{
                    //    existingModel.UENNo = model.UENNo;
                    //}
                    if (existingModel.Remark != model.Remark)
                    {
                        existingModel.Remark = model.Remark;
                    }

                    //if (model.AvalType == "AVAL FABRIC")
                    //{
                    //    if (existingModel.TotalAval != model.TotalAval)
                    //    {
                    //        GarmentLeftoverWarehouseStock stock = new GarmentLeftoverWarehouseStock
                    //        {
                    //            ReferenceType = GarmentLeftoverWarehouseStockReferenceTypeEnum.AVAL_FABRIC,
                    //            UnitId = model.UnitFromId,
                    //            UnitCode = model.UnitFromCode,
                    //            UnitName = model.UnitFromName,
                    //            Quantity = existingModel.TotalAval
                    //        };
                    //        await StockService.StockOut(stock, existingModel.AvalReceiptNo, model.Id, 0);

                    //        GarmentLeftoverWarehouseStock stock1 = new GarmentLeftoverWarehouseStock
                    //        {
                    //            ReferenceType = GarmentLeftoverWarehouseStockReferenceTypeEnum.AVAL_FABRIC,
                    //            UnitId = model.UnitFromId,
                    //            UnitCode = model.UnitFromCode,
                    //            UnitName = model.UnitFromName,
                    //            Quantity = model.TotalAval
                    //        };
                    //        await StockService.StockIn(stock1, model.AvalReceiptNo, model.Id, 0);
                    //        existingModel.TotalAval = model.TotalAval;
                    //    }
                    //}


                    existingModel.FlagForUpdate(IdentityService.Username, UserAgent);

                    Updated = await DbContext.SaveChangesAsync();

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

            return(Updated);
        }