public async Task <int> Create(TransferInDoc model, string username, int clientTimeZoneOffset = 7)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    string code = GenerateCode("EFR-TB/BBT");
                    model.Code = code;
                    var SPK = dbContext.SPKDocs.Where(x => x.PackingList == model.Reference).Single();
                    SPK.IsReceived = true;
                    var Id = SPK.Id;
                    EntityExtension.FlagForCreate(model, username, USER_AGENT);
                    foreach (var i in model.Items)
                    {
                        i.Id = 0;
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                        var SPKItems = dbContext.SPKDocsItems.Where(x => x.ItemArticleRealizationOrder == i.ArticleRealizationOrder && x.ItemCode == i.ItemCode && i.ItemName == i.ItemName && x.SPKDocsId == Id).Single();
                        SPKItems.SendQuantity = i.Quantity;

                        var inven = dbContext.Inventories.Where(x => x.ItemCode == i.ItemCode).FirstOrDefault();
                        if (inven != null)
                        {
                            inven.StorageCode = model.DestinationCode;
                            inven.StorageId   = model.DestinationId;
                            inven.StorageName = model.DestinationName;
                        }
                    }

                    dbSet.Add(model);
                    Created = await dbContext.SaveChangesAsync();

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

            return(Created);
        }
示例#2
0
        public async Task <int> Create(TransferInDoc model, string username, int clientTimeZoneOffset = 7)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    string code = GenerateCode("MM-TB/BBP");
                    model.Code = code;
                    var SPK = dbContext.SPKDocs.Where(x => x.PackingList == model.Reference).Single();
                    SPK.IsReceived = true;
                    var Id = SPK.Id;
                    EntityExtension.FlagForCreate(model, username, USER_AGENT);
                    foreach (var i in model.Items)
                    {
                        i.Id = 0;
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                        var SPKItems = dbContext.SPKDocsItems.Where(x => x.ItemArticleRealizationOrder == i.ArticleRealizationOrder && x.ItemCode == i.ItemCode && i.ItemName == i.ItemName && x.SPKDocsId == Id).Single();
                        SPKItems.SendQuantity = i.Quantity;
                        var inventorymovement = new InventoryMovement();
                        var inven             = dbContext.Inventories.Where(x => x.ItemId == i.ItemId && x.StorageId == model.DestinationId).FirstOrDefault();
                        if (inven != null)
                        {
                            inventorymovement.Before = inven.Quantity;
                            inven.Quantity           = inven.Quantity + i.Quantity;//inven.Quantity + i.quantity;
                            //dbSetInventory.Update(inven);
                        }
                        else
                        {
                            Inventory inventory = new Inventory
                            {
                                ItemArticleRealizationOrder = i.ArticleRealizationOrder,
                                ItemCode              = i.ItemCode,
                                ItemDomesticCOGS      = i.DomesticCOGS,
                                ItemDomesticRetail    = i.DomesticRetail,
                                ItemDomesticSale      = i.DomesticSale,
                                ItemDomesticWholeSale = i.DomesticWholeSale,
                                ItemId = i.ItemId,
                                ItemInternationalCOGS      = 0,
                                ItemInternationalRetail    = 0,
                                ItemInternationalSale      = 0,
                                ItemInternationalWholeSale = 0,
                                ItemName         = i.ItemName,
                                ItemSize         = i.Size,
                                ItemUom          = i.Uom,
                                Quantity         = i.Quantity,
                                StorageCode      = model.DestinationCode,
                                StorageId        = model.DestinationId,
                                StorageName      = model.DestinationName,
                                StorageIsCentral = model.DestinationName.Contains("GUDANG") ? true : false,
                            };
                            EntityExtension.FlagForCreate(inventory, username, USER_AGENT);
                            dbSetInventory.Add(inventory);
                        }

                        inventorymovement.After                      = inventorymovement.Before + i.Quantity;
                        inventorymovement.Date                       = DateTimeOffset.UtcNow;
                        inventorymovement.ItemCode                   = i.ItemCode;
                        inventorymovement.ItemDomesticCOGS           = i.DomesticCOGS;
                        inventorymovement.ItemDomesticRetail         = i.DomesticRetail;
                        inventorymovement.ItemDomesticWholeSale      = i.DomesticRetail;
                        inventorymovement.ItemDomesticSale           = i.DomesticSale;
                        inventorymovement.ItemId                     = i.ItemId;
                        inventorymovement.ItemInternationalCOGS      = 0;
                        inventorymovement.ItemInternationalRetail    = 0;
                        inventorymovement.ItemInternationalSale      = 0;
                        inventorymovement.ItemInternationalWholeSale = 0;
                        inventorymovement.ItemName                   = i.ItemName;
                        inventorymovement.ItemSize                   = i.Size;
                        inventorymovement.ItemUom                    = i.Uom;
                        inventorymovement.Quantity                   = i.Quantity;
                        inventorymovement.StorageCode                = model.DestinationCode;
                        inventorymovement.StorageId                  = model.DestinationId;
                        inventorymovement.StorageName                = model.DestinationName;
                        inventorymovement.Type                       = "IN";
                        inventorymovement.Reference                  = code;
                        inventorymovement.Remark                     = model.Remark;
                        inventorymovement.StorageIsCentral           = model.DestinationName.Contains("GUDANG") ? true : false;
                        EntityExtension.FlagForCreate(inventorymovement, username, USER_AGENT);
                        dbSetInventoryMovement.Add(inventorymovement);
                    }

                    dbSet.Add(model);
                    Created = await dbContext.SaveChangesAsync();

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

            return(Created);
        }
示例#3
0
        public async Task <int> Create(TransferOutDocViewModel model, TransferOutDoc model2, string username, int clientTimeZoneOffset = 7)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    string codeOut        = GenerateCode("EFR-KB/RTT");
                    string packingList1   = GenerateCode("EFR-KB/PLR");
                    string CodeIn         = GenerateCode("EFR-TB/BRT");
                    string packingList2   = GenerateCode("EFR-KB/PLB");
                    string expCode        = GenerateCode("EFR-KB/EXP");
                    string codetransferin = GenerateCode("EFR-TB/BRT");
                    model2.Code = codeOut;
                    model2.Date = DateTimeOffset.Now;
                    var storages          = GetStorage("GDG.05");
                    var expeditionService = GetExpedition("Dikirim Sendiri");
                    List <ExpeditionItem>     expeditionItems     = new List <ExpeditionItem>();
                    List <ExpeditionDetail>   expeditionDetails   = new List <ExpeditionDetail>();
                    List <SPKDocsItem>        sPKDocsItem1        = new List <SPKDocsItem>();
                    List <SPKDocsItem>        sPKDocsItem2        = new List <SPKDocsItem>();
                    List <TransferInDocItem>  transferInDocs      = new List <TransferInDocItem>();
                    List <InventoryMovement>  inventoryMovements  = new List <InventoryMovement>();
                    List <TransferOutDocItem> transferOutDocItems = new List <TransferOutDocItem>();
                    EntityExtension.FlagForCreate(model2, username, USER_AGENT);
                    foreach (var i in model2.Items)
                    {
                        var invenInTransfer = dbContext.Inventories.Where(x => x.ItemId == i.ItemId && x.StorageId == storages.Id).FirstOrDefault();
                        if (invenInTransfer == null)
                        {
                            Inventory inventory = new Inventory
                            {
                                ItemArticleRealizationOrder = i.ArticleRealizationOrder,
                                ItemCode              = i.ItemCode,
                                ItemDomesticCOGS      = i.DomesticCOGS,
                                ItemDomesticRetail    = i.DomesticRetail,
                                ItemDomesticSale      = i.DomesticSale,
                                ItemDomesticWholeSale = i.DomesticWholeSale,
                                ItemId = i.ItemId,
                                ItemInternationalCOGS      = 0,
                                ItemInternationalRetail    = 0,
                                ItemInternationalSale      = 0,
                                ItemInternationalWholeSale = 0,
                                ItemName         = i.ItemName,
                                ItemSize         = i.Size,
                                ItemUom          = i.Uom,
                                Quantity         = 0,
                                StorageCode      = storages.Code,
                                StorageId        = storages.Id,
                                StorageName      = storages.Name,
                                StorageIsCentral = storages.Name.Contains("GUDANG") ? true : false,
                            };
                            EntityExtension.FlagForCreate(inventory, username, USER_AGENT);
                            dbSetInventory.Add(inventory);
                            transferOutDocItems.Add(new TransferOutDocItem
                            {
                                ArticleRealizationOrder = i.ArticleRealizationOrder,
                                DomesticCOGS            = i.DomesticCOGS,
                                DomesticRetail          = i.DomesticRetail,
                                DomesticSale            = i.DomesticSale,
                                DomesticWholeSale       = i.DomesticWholeSale,
                                ItemCode = i.ItemCode,
                                ItemId   = i.ItemId,
                                ItemName = i.ItemName,
                                Quantity = i.Quantity,
                                Remark   = i.Remark,
                                Size     = i.Size,
                                Uom      = i.Uom
                            });
                        }
                        else
                        {
                            invenInTransfer.Quantity = invenInTransfer.Quantity - i.Quantity;
                        }
                        sPKDocsItem1.Add(new SPKDocsItem
                        {
                            ItemArticleRealizationOrder = i.ArticleRealizationOrder,
                            ItemCode              = i.ItemCode,
                            ItemDomesticCOGS      = i.DomesticCOGS,
                            ItemDomesticRetail    = i.DomesticRetail,
                            ItemDomesticSale      = i.DomesticSale,
                            ItemDomesticWholesale = i.DomesticWholeSale,
                            ItemId       = i.ItemId,
                            ItemName     = i.ItemName,
                            ItemSize     = i.Size,
                            ItemUom      = i.Uom,
                            Quantity     = i.Quantity,
                            Remark       = i.Remark,
                            SendQuantity = i.Quantity
                        });
                        sPKDocsItem2.Add(new SPKDocsItem
                        {
                            ItemArticleRealizationOrder = i.ArticleRealizationOrder,
                            ItemCode              = i.ItemCode,
                            ItemDomesticCOGS      = i.DomesticCOGS,
                            ItemDomesticRetail    = i.DomesticRetail,
                            ItemDomesticSale      = i.DomesticSale,
                            ItemDomesticWholesale = i.DomesticWholeSale,
                            ItemId       = i.ItemId,
                            ItemName     = i.ItemName,
                            ItemSize     = i.Size,
                            ItemUom      = i.Uom,
                            Quantity     = i.Quantity,
                            Remark       = i.Remark,
                            SendQuantity = i.Quantity
                        });
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                    }
                    EntityExtension.FlagForCreate(model2, username, USER_AGENT);
                    foreach (var i in model2.Items)
                    {
                        //var inventorymovement = new InventoryMovement();

                        transferInDocs.Add(new TransferInDocItem
                        {
                            ArticleRealizationOrder = i.ArticleRealizationOrder,
                            ItemCode          = i.ItemCode,
                            DomesticCOGS      = i.DomesticCOGS,
                            DomesticRetail    = i.DomesticRetail,
                            DomesticSale      = i.DomesticSale,
                            DomesticWholeSale = i.DomesticWholeSale,
                            ItemId            = i.ItemId,
                            ItemName          = i.ItemName,
                            Size     = i.Size,
                            Uom      = i.Uom,
                            Quantity = i.Quantity,
                            Remark   = i.Remark
                        });
                    }
                    SPKDocs sPKDocs1 = new SPKDocs
                    {
                        Code            = GenerateCode("EFR-PK/PBJ"),
                        Date            = DateTimeOffset.Now,
                        SourceId        = model2.SourceId,
                        SourceCode      = model2.SourceCode,
                        SourceName      = model2.SourceName,
                        DestinationId   = storages.Id,
                        DestinationCode = storages.Code,
                        DestinationName = storages.Name,
                        IsDistributed   = true,
                        IsReceived      = true,
                        IsDraft         = false,
                        PackingList     = packingList1,
                        Reference       = codeOut,
                        Password        = String.Join("", GenerateCode(DateTime.Now.ToString("dd")).Split("/")),
                        Weight          = 0,
                        Items           = sPKDocsItem1
                    };
                    EntityExtension.FlagForCreate(sPKDocs1, username, USER_AGENT);

                    TransferInDoc transferInDoc = new TransferInDoc
                    {
                        Code            = codetransferin,
                        Date            = DateTimeOffset.Now,
                        DestinationId   = storages.Id,
                        DestinationCode = storages.Code,
                        DestinationName = storages.Name,
                        SourceCode      = model2.SourceCode,
                        SourceId        = model2.SourceId,
                        SourceName      = model2.SourceName,
                        Reference       = packingList1,
                        Remark          = "",
                        Items           = transferInDocs
                    };
                    EntityExtension.FlagForCreate(transferInDoc, username, USER_AGENT);

                    SPKDocs sPKDocs2 = new SPKDocs
                    {
                        Code            = GenerateCode("EFR-PK/PBJ"),
                        Date            = DateTimeOffset.Now,
                        DestinationId   = model2.DestinationId,
                        DestinationCode = model2.DestinationCode,
                        DestinationName = model2.DestinationName,
                        SourceId        = storages.Id,
                        SourceCode      = storages.Code,
                        SourceName      = storages.Name,
                        IsDistributed   = true,
                        IsReceived      = false,
                        IsDraft         = false,
                        PackingList     = packingList2,
                        Reference       = codeOut,
                        Password        = String.Join("", GenerateCode(DateTime.Now.ToString("dd")).Split("/")),
                        Weight          = 0,
                        Items           = sPKDocsItem2
                    };
                    EntityExtension.FlagForCreate(sPKDocs2, username, USER_AGENT);

                    foreach (var i in sPKDocs1.Items)
                    {
                        var QtySource      = 0.0;
                        var invenOutSource = dbContext.Inventories.Where(x => x.ItemId == i.ItemId && x.StorageId == model2.SourceId).FirstOrDefault();

                        if (invenOutSource != null)
                        {
                            QtySource = invenOutSource.Quantity;
                            invenOutSource.Quantity = invenOutSource.Quantity - i.Quantity;
                        }

                        inventoryMovements.Add(new InventoryMovement
                        {
                            Before                     = QtySource,
                            After                      = invenOutSource.Quantity,
                            Date                       = DateTimeOffset.Now,
                            ItemCode                   = i.ItemCode,
                            ItemDomesticCOGS           = i.ItemDomesticCOGS,
                            ItemDomesticRetail         = i.ItemDomesticRetail,
                            ItemDomesticWholeSale      = i.ItemDomesticRetail,
                            ItemDomesticSale           = i.ItemDomesticSale,
                            ItemId                     = i.ItemId,
                            ItemInternationalCOGS      = 0,
                            ItemInternationalRetail    = 0,
                            ItemInternationalSale      = 0,
                            ItemInternationalWholeSale = 0,
                            ItemName                   = i.ItemName,
                            ItemSize                   = i.ItemSize,
                            ItemUom                    = i.ItemUom,
                            Quantity                   = i.Quantity,
                            StorageCode                = model2.SourceCode,
                            StorageId                  = model2.SourceId,
                            StorageName                = model2.SourceName,
                            Type                       = "OUT",
                            Reference                  = codeOut,
                            Remark                     = model2.Remark,
                            StorageIsCentral           = model2.SourceName.Contains("GUDANG") ? true : false,
                        });
                        inventoryMovements.Add(new InventoryMovement
                        {
                            Before                     = 0,
                            After                      = 1,
                            Date                       = DateTimeOffset.Now,
                            ItemCode                   = i.ItemCode,
                            ItemDomesticCOGS           = i.ItemDomesticCOGS,
                            ItemDomesticRetail         = i.ItemDomesticRetail,
                            ItemDomesticWholeSale      = i.ItemDomesticRetail,
                            ItemDomesticSale           = i.ItemDomesticSale,
                            ItemId                     = i.ItemId,
                            ItemInternationalCOGS      = 0,
                            ItemInternationalRetail    = 0,
                            ItemInternationalSale      = 0,
                            ItemInternationalWholeSale = 0,
                            ItemName                   = i.ItemName,
                            ItemSize                   = i.ItemSize,
                            ItemUom                    = i.ItemUom,
                            Quantity                   = i.Quantity,
                            StorageCode                = storages.Code,
                            StorageId                  = storages.Id,
                            StorageName                = storages.Name,
                            Type                       = "IN",
                            Reference                  = codetransferin,
                            Remark                     = model2.Remark,
                            StorageIsCentral           = storages.Name.Contains("GUDANG") ? true : false,
                        });
                        inventoryMovements.Add(new InventoryMovement
                        {
                            Before                     = 1,
                            After                      = 0,
                            Date                       = DateTimeOffset.Now,
                            ItemCode                   = i.ItemCode,
                            ItemDomesticCOGS           = i.ItemDomesticCOGS,
                            ItemDomesticRetail         = i.ItemDomesticRetail,
                            ItemDomesticWholeSale      = i.ItemDomesticRetail,
                            ItemDomesticSale           = i.ItemDomesticSale,
                            ItemId                     = i.ItemId,
                            ItemInternationalCOGS      = 0,
                            ItemInternationalRetail    = 0,
                            ItemInternationalSale      = 0,
                            ItemInternationalWholeSale = 0,
                            ItemName                   = i.ItemName,
                            ItemSize                   = i.ItemSize,
                            ItemUom                    = i.ItemUom,
                            Quantity                   = i.Quantity,
                            StorageCode                = model2.DestinationCode,
                            StorageId                  = model2.DestinationId,
                            StorageName                = model2.DestinationName,
                            Type                       = "OUT",
                            Reference                  = expCode,
                            Remark                     = model2.Remark,
                            StorageIsCentral           = model2.DestinationName.Contains("GUDANG") ? true : false,
                        });
                        expeditionDetails.Add(new ExpeditionDetail
                        {
                            ArticleRealizationOrder = i.ItemArticleRealizationOrder,
                            DomesticCOGS            = i.ItemDomesticCOGS,
                            DomesticRetail          = i.ItemDomesticRetail,
                            DomesticSale            = i.ItemDomesticSale,
                            DomesticWholesale       = i.ItemDomesticWholesale,
                            ItemCode     = i.ItemCode,
                            ItemId       = i.ItemId,
                            ItemName     = i.ItemName,
                            Quantity     = i.Quantity,
                            Remark       = i.Remark,
                            SendQuantity = i.SendQuantity,
                            Uom          = i.ItemUom,
                            Size         = i.ItemSize,
                            //SPKDocsId = (int)dbContext.SPKDocs.OrderByDescending(x=>x.Id).FirstOrDefault().Id + 1
                            SPKDocsId = (int)sPKDocs1.Id
                        });
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                    }
                    expeditionItems.Add(new ExpeditionItem
                    {
                        Code            = sPKDocs2.Code,
                        Date            = sPKDocs2.Date,
                        DestinationCode = sPKDocs2.DestinationCode,
                        DestinationId   = (int)sPKDocs2.DestinationId,
                        DestinationName = sPKDocs2.DestinationName,
                        IsDistributed   = sPKDocs2.IsDistributed,
                        IsDraft         = sPKDocs2.IsDraft,
                        IsReceived      = sPKDocs2.IsReceived,
                        PackingList     = sPKDocs2.PackingList,
                        Password        = sPKDocs2.Password,
                        Reference       = codeOut,
                        SourceCode      = sPKDocs2.SourceCode,
                        SourceId        = (int)sPKDocs2.SourceId,
                        SourceName      = sPKDocs2.SourceName,
                        //SPKDocsId = (int)dbContext.SPKDocs.OrderByDescending(x => x.Id).FirstOrDefault().Id + 1,
                        SPKDocsId = (int)sPKDocs2.Id,
                        Weight    = sPKDocs2.Weight,
                        Details   = expeditionDetails
                    });

                    Expedition expedition = new Expedition
                    {
                        Code = expCode,
                        Date = DateTimeOffset.Now,
                        ExpeditionServiceCode = expeditionService.code,
                        ExpeditionServiceId   = (int)expeditionService._id,
                        ExpeditionServiceName = expeditionService.name,
                        Remark = "",
                        Weight = 0,
                        Items  = expeditionItems,
                    };
                    EntityExtension.FlagForCreate(expedition, username, USER_AGENT);

                    TransferOutDoc transferOutDoc2 = new TransferOutDoc
                    {
                        Code            = expCode,
                        Date            = DateTimeOffset.Now,
                        DestinationCode = model2.DestinationCode,
                        DestinationId   = model2.DestinationId,
                        DestinationName = model2.DestinationName,
                        Reference       = packingList2,
                        Remark          = "",
                        SourceId        = storages.Id,
                        SourceCode      = storages.Code,
                        SourceName      = storages.Name,
                        Items           = transferOutDocItems
                    };
                    EntityExtension.FlagForCreate(transferOutDoc2, username, USER_AGENT);
                    #region Saving
                    foreach (var i in transferOutDoc2.Items)
                    {
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                    }
                    foreach (var i in sPKDocs2.Items)
                    {
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                    }
                    foreach (var i in expedition.Items)
                    {
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                        foreach (var d in i.Details)
                        {
                            EntityExtension.FlagForCreate(d, username, USER_AGENT);
                        }
                    }
                    foreach (var i in transferInDoc.Items)
                    {
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                    }
                    foreach (var i in inventoryMovements)
                    {
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                        dbSetInventoryMovement.Add(i);
                    }
                    dbSetExpedition.Add(expedition);
                    dbSetSpk.Add(sPKDocs1);
                    dbSetSpk.Add(sPKDocs2);
                    dbSet.Add(model2);
                    dbSet.Add(transferOutDoc2);
                    dbSetTransferIn.Add(transferInDoc);

                    Created = await dbContext.SaveChangesAsync();

                    transaction.Commit();

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

                return(Created);
            }
        }
        public async Task <int> Create(TransferInDoc model, string username, int clientTimeZoneOffset = 7)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    string code = GenerateCode("EFR-TB/BBP");
                    model.Code = code;


                    var SPK        = dbContext.SPKDocs.Where(x => x.PackingList == model.Reference).FirstOrDefault();
                    var expedition = dbContext.ExpeditionItems.Where(x => x.PackingList == model.Reference);
                    if (expedition.Count() != 0)
                    {
                        expedition.Single().IsReceived = true;
                    }
                    SPK.IsReceived = true;
                    var Id = SPK.Id;
                    EntityExtension.FlagForCreate(model, username, USER_AGENT);

                    var newItems = new List <TransferInDocItem>();

                    foreach (var i in model.Items)
                    {
                        var SPKItems = dbContext.SPKDocsItems.Where(x => x.ItemArticleRealizationOrder == i.ArticleRealizationOrder && x.ItemCode == i.ItemCode && i.ItemName == i.ItemName && x.SPKDocsId == Id).Single();
                        SPKItems.SendQuantity = i.Quantity;
                        var inventorymovement = new InventoryMovement();

                        int status = 0;
                        var inven  = dbContext.Inventories.OrderByDescending(x => x.CreatedUtc).Where(x => x.ItemId == i.ItemId && x.ItemCode.Contains(i.ItemCode)).FirstOrDefault();
                        if (inven != null)
                        {
                            var latestItemCode       = inven.ItemCode;
                            var latestItemCodeLength = latestItemCode.Length;
                            var latestStatus         = latestItemCode.Substring(latestItemCodeLength - 2);
                            status = int.Parse(latestStatus);
                        }
                        var countLoop = i.Quantity;
                        var itemcode  = i.ItemCode;
                        for (var j = 0; j < countLoop; j++)
                        {
                            status = status + 1;

                            i.Id       = 0;
                            i.Quantity = 1;
                            i.ItemCode = "" + itemcode + status.ToString("00");

                            TransferInDocItem transferInDocItem = new TransferInDocItem
                            {
                                ArticleRealizationOrder = i.ArticleRealizationOrder,
                                DomesticCOGS            = i.DomesticCOGS,
                                DomesticRetail          = i.DomesticRetail,
                                DomesticSale            = i.DomesticSale,
                                DomesticWholeSale       = i.DomesticWholeSale,
                                ItemCode       = "" + itemcode + status.ToString("00"),
                                ItemId         = i.ItemId,
                                ItemName       = i.ItemName,
                                Quantity       = 1,
                                Remark         = i.Remark,
                                Size           = i.Size,
                                TransferDocsId = i.TransferDocsId,
                                TransferInDocs = i.TransferInDocs,
                                Uom            = i.Uom,
                                Id             = 0
                            };

                            EntityExtension.FlagForCreate(transferInDocItem, username, USER_AGENT);
                            newItems.Add(transferInDocItem);

                            Inventory inventory = new Inventory
                            {
                                ItemArticleRealizationOrder = i.ArticleRealizationOrder,
                                ItemCode              = "" + itemcode + status.ToString("00"),
                                ItemDomesticCOGS      = i.DomesticCOGS,
                                ItemDomesticRetail    = i.DomesticRetail,
                                ItemDomesticSale      = i.DomesticSale,
                                ItemDomesticWholeSale = i.DomesticWholeSale,
                                ItemId = i.ItemId,
                                ItemInternationalCOGS      = 0,
                                ItemInternationalRetail    = 0,
                                ItemInternationalSale      = 0,
                                ItemInternationalWholeSale = 0,
                                ItemName         = i.ItemName,
                                ItemSize         = i.Size,
                                ItemUom          = i.Uom,
                                Quantity         = 1,
                                StorageCode      = model.DestinationCode,
                                StorageId        = model.DestinationId,
                                StorageName      = model.DestinationName,
                                StorageIsCentral = model.DestinationName.Contains("GUDANG") ? true : false,
                            };
                            EntityExtension.FlagForCreate(inventory, username, USER_AGENT);
                            dbSetInventory.Add(inventory);

                            inventorymovement.After                      = inventorymovement.Before + 1;
                            inventorymovement.Date                       = DateTimeOffset.UtcNow;
                            inventorymovement.ItemCode                   = "" + itemcode + status.ToString("00");
                            inventorymovement.ItemDomesticCOGS           = i.DomesticCOGS;
                            inventorymovement.ItemDomesticRetail         = i.DomesticRetail;
                            inventorymovement.ItemDomesticWholeSale      = i.DomesticRetail;
                            inventorymovement.ItemDomesticSale           = i.DomesticSale;
                            inventorymovement.ItemId                     = i.ItemId;
                            inventorymovement.ItemInternationalCOGS      = 0;
                            inventorymovement.ItemInternationalRetail    = 0;
                            inventorymovement.ItemInternationalSale      = 0;
                            inventorymovement.ItemInternationalWholeSale = 0;
                            inventorymovement.ItemName                   = i.ItemName;
                            inventorymovement.ItemSize                   = i.Size;
                            inventorymovement.ItemUom                    = i.Uom;
                            inventorymovement.Quantity                   = 1;
                            inventorymovement.StorageCode                = model.DestinationCode;
                            inventorymovement.StorageId                  = model.DestinationId;
                            inventorymovement.StorageName                = model.DestinationName;
                            inventorymovement.Type                       = "IN";
                            inventorymovement.Reference                  = code;
                            inventorymovement.Remark                     = model.Remark;
                            inventorymovement.StorageIsCentral           = model.DestinationName.Contains("GUDANG") ? true : false;
                            EntityExtension.FlagForCreate(inventorymovement, username, USER_AGENT);
                            dbSetInventoryMovement.Add(inventorymovement);
                        }
                    }

                    model.Items = newItems;
                    dbSet.Add(model);
                    Created = await dbContext.SaveChangesAsync();

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

            return(Created);
        }
示例#5
0
        public async Task <int> Process(SODocs viewModel, string username, int clientTimeZoneOffset = 7)
        {
            int Process = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    var model = dbContext.StockOpnameDocs.Where(x => x.Id == viewModel.Id).FirstOrDefault();
                    model.IsProcessed = true;

                    string inventoryMovementIn  = GenerateCode("EFR-TB/SO");
                    string inventoryMovementOut = GenerateCode("EFR-KB/SO");

                    List <TransferInDocItem>  transferInDocsItems  = new List <TransferInDocItem>();
                    List <InventoryMovement>  inventoryMovements   = new List <InventoryMovement>();
                    List <TransferOutDocItem> transferOutDocsItems = new List <TransferOutDocItem>();

                    EntityExtension.FlagForUpdate(model, username, USER_AGENT);
                    foreach (var i in viewModel.Items)
                    {
                        var inventoriesAvailable = dbContext.Inventories.Where(x => x.ItemId == i.ItemId && x.StorageId == viewModel.StorageId).FirstOrDefault();
                        var sourceQty            = inventoriesAvailable.Quantity;

                        if (i.IsAdjusted == true)
                        {
                            var items = dbContext.StockOpnameDocsItems.Where(x => x.Id == i.Id && x.SODocsId == viewModel.Id).FirstOrDefault();
                            items.IsAdjusted = true;
                            EntityExtension.FlagForUpdate(items, username, USER_AGENT);

                            if (i.QtyBeforeSO < i.QtySO)
                            {
                                transferInDocsItems.Add(new TransferInDocItem
                                {
                                    ArticleRealizationOrder = i.ItemArticleRealizationOrder,
                                    DomesticCOGS            = i.ItemDomesticCOGS,
                                    DomesticRetail          = i.ItemDomesticRetail,
                                    DomesticSale            = i.ItemDomesticSale,
                                    DomesticWholeSale       = i.ItemDomesticWholeSale,
                                    ItemCode = i.ItemCode,
                                    ItemId   = i.ItemId,
                                    ItemName = i.ItemName,
                                    Quantity = i.QtySO - i.QtyBeforeSO,
                                    Remark   = i.Remark,
                                    Size     = i.ItemSize,
                                    Uom      = i.ItemUom
                                });

                                inventoryMovements.Add(new InventoryMovement
                                {
                                    Before = sourceQty,
                                    After  = sourceQty + (i.QtySO - i.QtyBeforeSO),
                                    Date   = DateTimeOffset.Now,
                                    ItemArticleRealizationOrder = i.ItemArticleRealizationOrder,
                                    ItemCode              = i.ItemCode,
                                    ItemDomesticCOGS      = i.ItemDomesticCOGS,
                                    ItemDomesticRetail    = i.ItemDomesticRetail,
                                    ItemDomesticWholeSale = i.ItemDomesticRetail,
                                    ItemDomesticSale      = i.ItemDomesticSale,
                                    ItemId = i.ItemId,
                                    ItemInternationalCOGS      = i.ItemInternationalCOGS,
                                    ItemInternationalRetail    = i.ItemInternationalRetail,
                                    ItemInternationalSale      = i.ItemInternationalSale,
                                    ItemInternationalWholeSale = i.ItemInternationalWholeSale,
                                    ItemName         = i.ItemName,
                                    ItemSize         = i.ItemSize,
                                    ItemUom          = i.ItemUom,
                                    Quantity         = i.QtySO - i.QtyBeforeSO,
                                    StorageCode      = viewModel.StorageCode,
                                    StorageId        = viewModel.StorageId,
                                    StorageName      = viewModel.StorageName,
                                    Type             = "IN",
                                    Reference        = inventoryMovementIn,
                                    Remark           = i.Remark,
                                    StorageIsCentral = viewModel.StorageName.Contains("GUDANG") ? true : false,
                                });

                                inventoriesAvailable.Quantity += (i.QtySO - i.QtyBeforeSO);
                                EntityExtension.FlagForUpdate(inventoriesAvailable, username, USER_AGENT);
                                EntityExtension.FlagForCreate(i, username, USER_AGENT);
                            }

                            else
                            {
                                transferOutDocsItems.Add(new TransferOutDocItem
                                {
                                    ArticleRealizationOrder = i.ItemArticleRealizationOrder,
                                    DomesticCOGS            = i.ItemDomesticCOGS,
                                    DomesticRetail          = i.ItemDomesticRetail,
                                    DomesticSale            = i.ItemDomesticSale,
                                    DomesticWholeSale       = i.ItemDomesticWholeSale,
                                    ItemCode = i.ItemCode,
                                    ItemId   = i.ItemId,
                                    ItemName = i.ItemName,
                                    Quantity = i.QtyBeforeSO - i.QtySO,
                                    Remark   = i.Remark,
                                    Size     = i.ItemSize,
                                    Uom      = i.ItemUom
                                });

                                inventoryMovements.Add(new InventoryMovement
                                {
                                    Before = sourceQty,
                                    After  = sourceQty - (i.QtyBeforeSO - i.QtySO),
                                    Date   = DateTimeOffset.Now,
                                    ItemArticleRealizationOrder = i.ItemArticleRealizationOrder,
                                    ItemCode              = i.ItemCode,
                                    ItemDomesticCOGS      = i.ItemDomesticCOGS,
                                    ItemDomesticRetail    = i.ItemDomesticRetail,
                                    ItemDomesticWholeSale = i.ItemDomesticRetail,
                                    ItemDomesticSale      = i.ItemDomesticSale,
                                    ItemId = i.ItemId,
                                    ItemInternationalCOGS      = i.ItemInternationalCOGS,
                                    ItemInternationalRetail    = i.ItemInternationalRetail,
                                    ItemInternationalSale      = i.ItemInternationalSale,
                                    ItemInternationalWholeSale = i.ItemInternationalWholeSale,
                                    ItemName         = i.ItemName,
                                    ItemSize         = i.ItemSize,
                                    ItemUom          = i.ItemUom,
                                    Quantity         = i.QtyBeforeSO - i.QtySO,
                                    StorageCode      = viewModel.StorageCode,
                                    StorageId        = viewModel.StorageId,
                                    StorageName      = viewModel.StorageName,
                                    Type             = "OUT",
                                    Reference        = inventoryMovementOut,
                                    Remark           = i.Remark,
                                    StorageIsCentral = viewModel.StorageName.Contains("GUDANG") ? true : false,
                                });

                                inventoriesAvailable.Quantity -= (i.QtyBeforeSO - i.QtySO);
                                EntityExtension.FlagForUpdate(inventoriesAvailable, username, USER_AGENT);
                                EntityExtension.FlagForCreate(i, username, USER_AGENT);
                            }
                        }
                    }

                    if (transferInDocsItems.Count > 0)
                    {
                        TransferInDoc transferInDoc = new TransferInDoc
                        {
                            Code            = inventoryMovementIn,
                            Date            = DateTimeOffset.Now,
                            DestinationId   = viewModel.StorageId,
                            DestinationCode = viewModel.StorageCode,
                            DestinationName = viewModel.StorageName,
                            SourceId        = viewModel.StorageId,
                            SourceCode      = viewModel.StorageCode,
                            SourceName      = viewModel.StorageName,
                            Reference       = viewModel.Code,
                            Remark          = "",
                            Items           = transferInDocsItems
                        };
                        EntityExtension.FlagForCreate(transferInDoc, username, USER_AGENT);

                        foreach (var tii in transferInDoc.Items)
                        {
                            EntityExtension.FlagForCreate(tii, username, USER_AGENT);
                        }

                        dbSetTransferIn.Add(transferInDoc);
                    }

                    if (transferOutDocsItems.Count > 0)
                    {
                        TransferOutDoc transferOutDoc = new TransferOutDoc
                        {
                            Code            = inventoryMovementOut,
                            Date            = DateTimeOffset.Now,
                            DestinationId   = viewModel.StorageId,
                            DestinationCode = viewModel.StorageCode,
                            DestinationName = viewModel.StorageName,
                            SourceId        = viewModel.StorageId,
                            SourceCode      = viewModel.StorageCode,
                            SourceName      = viewModel.StorageName,
                            Reference       = viewModel.Code,
                            Remark          = "",
                            Items           = transferOutDocsItems
                        };
                        EntityExtension.FlagForCreate(transferOutDoc, username, USER_AGENT);

                        foreach (var toi in transferOutDoc.Items)
                        {
                            EntityExtension.FlagForCreate(toi, username, USER_AGENT);
                        }

                        dbSetTransferOut.Add(transferOutDoc);
                    }

                    foreach (var im in inventoryMovements)
                    {
                        EntityExtension.FlagForCreate(im, username, USER_AGENT);
                        dbSetInventoryMovement.Add(im);
                    }

                    Process = await dbContext.SaveChangesAsync();

                    transaction.Commit();
                }

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

                return(Process);
            }
        }
        public async Task <int> Create(AdjustmentDocs model, string username, int clientTimeZoneOffset = 7)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    string code     = GenerateCode("EFR-ADJ/INT");
                    var    storages = GetStorage(model.StorageCode);

                    string inventoryMovementIn  = GenerateCode("EFR-TB/ADJ");
                    string inventoryMovementOut = GenerateCode("EFR-KB/ADJ");

                    List <TransferInDocItem>  transferInDocsItems  = new List <TransferInDocItem>();
                    List <InventoryMovement>  inventoryMovements   = new List <InventoryMovement>();
                    List <TransferOutDocItem> transferOutDocsItems = new List <TransferOutDocItem>();

                    model.Code = code;

                    EntityExtension.FlagForCreate(model, username, USER_AGENT);
                    foreach (var i in model.Items)
                    {
                        if (i.Type == "IN")
                        {
                            var SourceQuantity = 0.0;

                            var inventoriesAvailable = dbContext.Inventories.Where(x => x.ItemId == i.ItemId && x.StorageId == storages.Id).FirstOrDefault();
                            if (inventoriesAvailable == null)
                            {
                                Inventory inventory = new Inventory
                                {
                                    ItemArticleRealizationOrder = i.ItemArticleRealizationOrder,
                                    ItemCode              = i.ItemCode,
                                    ItemDomesticCOGS      = i.ItemDomesticCOGS,
                                    ItemDomesticRetail    = i.ItemDomesticRetail,
                                    ItemDomesticSale      = i.ItemDomesticSale,
                                    ItemDomesticWholeSale = i.ItemDomesticWholeSale,
                                    ItemId = i.ItemId,
                                    ItemInternationalCOGS      = 0,
                                    ItemInternationalRetail    = 0,
                                    ItemInternationalSale      = 0,
                                    ItemInternationalWholeSale = 0,
                                    ItemName         = i.ItemName,
                                    ItemSize         = i.ItemSize,
                                    ItemUom          = i.ItemUom,
                                    Quantity         = i.QtyAdjustment,
                                    StorageCode      = model.StorageCode,
                                    StorageId        = model.StorageId,
                                    StorageName      = model.StorageName,
                                    StorageIsCentral = model.StorageName.Contains("GUDANG") ? true : false
                                };
                                EntityExtension.FlagForCreate(inventory, username, USER_AGENT);
                                dbSetInventory.Add(inventory);
                            }
                            else
                            {
                                SourceQuantity = inventoriesAvailable.Quantity;
                                inventoriesAvailable.Quantity = inventoriesAvailable.Quantity + i.QtyAdjustment;
                                EntityExtension.FlagForUpdate(inventoriesAvailable, username, USER_AGENT);
                            }

                            i.QtyBeforeAdjustment = SourceQuantity;

                            transferInDocsItems.Add(new TransferInDocItem
                            {
                                ArticleRealizationOrder = i.ItemArticleRealizationOrder,
                                DomesticCOGS            = i.ItemDomesticCOGS,
                                DomesticRetail          = i.ItemDomesticRetail,
                                DomesticSale            = i.ItemDomesticSale,
                                DomesticWholeSale       = i.ItemDomesticWholeSale,
                                ItemCode = i.ItemCode,
                                ItemId   = i.ItemId,
                                ItemName = i.ItemName,
                                Quantity = i.QtyAdjustment,
                                Remark   = i.Remark,
                                Size     = i.ItemSize,
                                Uom      = i.ItemUom
                            });
                            EntityExtension.FlagForCreate(i, username, USER_AGENT);

                            inventoryMovements.Add(new InventoryMovement
                            {
                                Before = SourceQuantity,
                                After  = SourceQuantity + i.QtyAdjustment,
                                Date   = DateTimeOffset.Now,
                                ItemArticleRealizationOrder = i.ItemArticleRealizationOrder,
                                ItemCode              = i.ItemCode,
                                ItemDomesticCOGS      = i.ItemDomesticCOGS,
                                ItemDomesticRetail    = i.ItemDomesticRetail,
                                ItemDomesticWholeSale = i.ItemDomesticRetail,
                                ItemDomesticSale      = i.ItemDomesticSale,
                                ItemId = i.ItemId,
                                ItemInternationalCOGS      = i.ItemInternationalCOGS,
                                ItemInternationalRetail    = i.ItemInternationalRetail,
                                ItemInternationalSale      = i.ItemInternationalSale,
                                ItemInternationalWholeSale = i.ItemInternationalWholeSale,
                                ItemName         = i.ItemName,
                                ItemSize         = i.ItemSize,
                                ItemUom          = i.ItemUom,
                                Quantity         = i.QtyAdjustment,
                                StorageCode      = model.StorageCode,
                                StorageId        = model.StorageId,
                                StorageName      = model.StorageName,
                                Type             = "IN",
                                Reference        = inventoryMovementIn,
                                Remark           = i.Remark,
                                StorageIsCentral = model.StorageName.Contains("GUDANG") ? true : false
                            });
                        }
                        else
                        {
                            var SourceQuantity = 0.0;

                            var inventoriesAvailable = dbContext.Inventories.Where(x => x.ItemId == i.ItemId && x.StorageId == storages.Id).FirstOrDefault();
                            if (inventoriesAvailable != null)
                            {
                                SourceQuantity = inventoriesAvailable.Quantity;
                                inventoriesAvailable.Quantity = inventoriesAvailable.Quantity - i.QtyAdjustment;
                                EntityExtension.FlagForUpdate(inventoriesAvailable, username, USER_AGENT);
                            }
                            else
                            {
                                Inventory inventory = new Inventory
                                {
                                    ItemArticleRealizationOrder = i.ItemArticleRealizationOrder,
                                    ItemCode              = i.ItemCode,
                                    ItemDomesticCOGS      = i.ItemDomesticCOGS,
                                    ItemDomesticRetail    = i.ItemDomesticRetail,
                                    ItemDomesticSale      = i.ItemDomesticSale,
                                    ItemDomesticWholeSale = i.ItemDomesticWholeSale,
                                    ItemId = i.ItemId,
                                    ItemInternationalCOGS      = 0,
                                    ItemInternationalRetail    = 0,
                                    ItemInternationalSale      = 0,
                                    ItemInternationalWholeSale = 0,
                                    ItemName         = i.ItemName,
                                    ItemSize         = i.ItemSize,
                                    ItemUom          = i.ItemUom,
                                    Quantity         = i.QtyAdjustment,
                                    StorageCode      = model.StorageCode,
                                    StorageId        = model.StorageId,
                                    StorageName      = model.StorageName,
                                    StorageIsCentral = model.StorageName.Contains("GUDANG") ? true : false
                                };
                                EntityExtension.FlagForCreate(inventory, username, USER_AGENT);
                                dbSetInventory.Add(inventory);
                            }

                            i.QtyBeforeAdjustment = SourceQuantity;

                            transferOutDocsItems.Add(new TransferOutDocItem
                            {
                                ArticleRealizationOrder = i.ItemArticleRealizationOrder,
                                DomesticCOGS            = i.ItemDomesticCOGS,
                                DomesticRetail          = i.ItemDomesticRetail,
                                DomesticSale            = i.ItemDomesticSale,
                                DomesticWholeSale       = i.ItemDomesticWholeSale,
                                ItemCode = i.ItemCode,
                                ItemId   = i.ItemId,
                                ItemName = i.ItemName,
                                Quantity = i.QtyAdjustment,
                                Remark   = i.Remark,
                                Size     = i.ItemSize,
                                Uom      = i.ItemUom
                            });
                            EntityExtension.FlagForCreate(i, username, USER_AGENT);

                            inventoryMovements.Add(new InventoryMovement
                            {
                                Before = SourceQuantity,
                                After  = SourceQuantity - i.QtyAdjustment,
                                Date   = DateTimeOffset.Now,
                                ItemArticleRealizationOrder = i.ItemArticleRealizationOrder,
                                ItemCode              = i.ItemCode,
                                ItemDomesticCOGS      = i.ItemDomesticCOGS,
                                ItemDomesticRetail    = i.ItemDomesticRetail,
                                ItemDomesticWholeSale = i.ItemDomesticRetail,
                                ItemDomesticSale      = i.ItemDomesticSale,
                                ItemId = i.ItemId,
                                ItemInternationalCOGS      = i.ItemInternationalCOGS,
                                ItemInternationalRetail    = i.ItemInternationalRetail,
                                ItemInternationalSale      = i.ItemInternationalSale,
                                ItemInternationalWholeSale = i.ItemInternationalWholeSale,
                                ItemName         = i.ItemName,
                                ItemSize         = i.ItemSize,
                                ItemUom          = i.ItemUom,
                                Quantity         = i.QtyAdjustment,
                                StorageCode      = model.StorageCode,
                                StorageId        = model.StorageId,
                                StorageName      = model.StorageName,
                                Type             = "OUT",
                                Reference        = inventoryMovementOut,
                                Remark           = i.Remark,
                                StorageIsCentral = model.StorageName.Contains("GUDANG") ? true : false,
                            });
                        }
                    }

                    if (transferInDocsItems.Count > 0)
                    {
                        TransferInDoc transferInDoc = new TransferInDoc
                        {
                            Code            = inventoryMovementIn,
                            Date            = DateTimeOffset.Now,
                            DestinationId   = model.StorageId,
                            DestinationCode = model.StorageCode,
                            DestinationName = model.StorageName,
                            SourceId        = model.StorageId,
                            SourceCode      = model.StorageCode,
                            SourceName      = model.StorageName,
                            Reference       = code,
                            Remark          = "",
                            Items           = transferInDocsItems
                        };
                        EntityExtension.FlagForCreate(transferInDoc, username, USER_AGENT);

                        foreach (var tii in transferInDoc.Items)
                        {
                            EntityExtension.FlagForCreate(tii, username, USER_AGENT);
                        }

                        dbSetTransferIn.Add(transferInDoc);
                    }

                    if (transferOutDocsItems.Count > 0)
                    {
                        TransferOutDoc transferOutDoc = new TransferOutDoc
                        {
                            Code            = inventoryMovementOut,
                            Date            = DateTimeOffset.Now,
                            DestinationId   = model.StorageId,
                            DestinationCode = model.StorageCode,
                            DestinationName = model.StorageName,
                            SourceId        = model.StorageId,
                            SourceCode      = model.StorageCode,
                            SourceName      = model.StorageName,
                            Reference       = code,
                            Remark          = "",
                            Items           = transferOutDocsItems
                        };
                        EntityExtension.FlagForCreate(transferOutDoc, username, USER_AGENT);

                        foreach (var toi in transferOutDoc.Items)
                        {
                            EntityExtension.FlagForCreate(toi, username, USER_AGENT);
                        }

                        dbSetTransferOut.Add(transferOutDoc);
                    }

                    foreach (var im in inventoryMovements)
                    {
                        EntityExtension.FlagForCreate(im, username, USER_AGENT);
                        dbSetInventoryMovement.Add(im);
                    }

                    dbSetAdjustment.Add(model);
                    Created = await dbContext.SaveChangesAsync();

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

                return(Created);
            }
        }