public IActionResult GetPackingListPDF(int id)
        {
            try
            {
                var indexAcceptPdf = Request.Headers["Accept"].ToList().IndexOf("application/pdf");

                SPKDocs          model     = facade.ReadById(id);
                SPKDocsViewModel viewModel = mapper.Map <SPKDocsViewModel>(model);
                if (viewModel == null)
                {
                    throw new Exception("Invalid Id");
                }
                if (indexAcceptPdf < 0)
                {
                    return(Ok(new
                    {
                        apiVersion = ApiVersion,
                        statusCode = General.OK_STATUS_CODE,
                        message = General.OK_MESSAGE,
                        data = viewModel,
                    }));
                }
                else
                {
                    int clientTimeZoneOffset = int.Parse(Request.Headers["x-timezone-offset"].First());

                    //foreach (var item in viewModel.items)
                    //{
                    //    var garmentInvoice = invoiceFacade.ReadById((int)item.garmentInvoice.Id);
                    //    var garmentInvoiceViewModel = mapper.Map<GarmentInvoiceViewModel>(garmentInvoice);
                    //    item.garmentInvoice = garmentInvoiceViewModel;

                    //    foreach (var detail in item.details)
                    //    {
                    //        var deliveryOrder = deliveryOrderFacade.ReadById((int)detail.deliveryOrder.Id);
                    //        var deliveryOrderViewModel = mapper.Map<GarmentDeliveryOrderViewModel>(deliveryOrder);
                    //        detail.deliveryOrder = deliveryOrderViewModel;
                    //    }
                    //}

                    PackingListPdfTemplate PdfTemplateLocal = new PackingListPdfTemplate();
                    MemoryStream           stream           = PdfTemplateLocal.GeneratePdfTemplate(viewModel, serviceProvider, clientTimeZoneOffset);

                    return(new FileStreamResult(stream, "application/pdf")
                    {
                        FileDownloadName = $"{viewModel.packingList}.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 async Task UploadData(SPKDocs data, string username)
        {
            foreach (var i in data.Items)
            {
                EntityExtension.FlagForCreate(i, username, USER_AGENT);
            }
            EntityExtension.FlagForCreate(data, username, USER_AGENT);
            dbSet.Add(data);
            var result = await dbContext.SaveChangesAsync();

            //await BulkInsert(data, username);
        }
        public IActionResult Get(int id)
        {
            try
            {
                var indexAcceptPdf = Request.Headers["Accept"].ToList().IndexOf("application/pdf");

                SPKDocs          model     = facade.ReadById(id);
                SPKDocsViewModel viewModel = mapper.Map <SPKDocsViewModel>(model);
                if (viewModel == null)
                {
                    throw new Exception("Invalid Id");
                }

                //if (indexAcceptPdf < 0)
                //{
                return(Ok(new
                {
                    apiVersion = ApiVersion,
                    statusCode = General.OK_STATUS_CODE,
                    message = General.OK_MESSAGE,
                    data = viewModel,
                }));
                // }
                //else
                //{
                //    int clientTimeZoneOffset = int.Parse(Request.Headers["x-timezone-offset"].First());

                //    PurchaseRequestPDFTemplate PdfTemplate = new PurchaseRequestPDFTemplate();
                //    MemoryStream stream = PdfTemplate.GeneratePdfTemplate(viewModel, clientTimeZoneOffset);

                //    return new FileStreamResult(stream, "application/pdf")
                //    {
                //        FileDownloadName = $"{viewModel.Code}.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 async Task <int> Create(SPKDocs model, string username, int clientTimeZoneOffset = 7)
        {
            int Created = 0;

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

                    string packingList = GenerateCode("EFR-KB/PLB");
                    string code        = GenerateCode("EFR-PK/PBJ");
                    string password    = String.Join("", GenerateCode(DateTime.Now.ToString("dd")).Split("/"));
                    //(generateCode(("0" + date.getDate()).slice(-2))).split('/').join('')

                    foreach (var i in model.Items)
                    {
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                        var inven = GetItems(i.ItemCode, i.ItemName, i.ItemArticleRealizationOrder);
                        if (inven == null)
                        {
                            ItemCoreViewModel item = new ItemCoreViewModel
                            {
                                dataDestination = new List <ItemViewModelRead> {
                                    new ItemViewModelRead {
                                        ArticleRealizationOrder = i.ItemArticleRealizationOrder,
                                        code   = i.ItemCode,
                                        name   = i.ItemName,
                                        Remark = i.Remark,
                                        Size   = i.ItemSize,
                                        Uom    = i.ItemUom,
                                    }
                                },
                                DomesticCOGS      = i.ItemDomesticCOGS,
                                DomesticRetail    = i.ItemDomesticRetail,
                                DomesticSale      = i.ItemDomesticSale,
                                DomesticWholesale = i.ItemDomesticWholesale
                            };

                            string itemsUri   = "items/finished-goods";
                            var    httpClient = (IHttpClientService)serviceProvider.GetService(typeof(IHttpClientService));
                            var    response   = await httpClient.PostAsync($"{APIEndpoint.Core}{itemsUri}", new StringContent(JsonConvert.SerializeObject(item).ToString(), Encoding.UTF8, General.JsonMediaType));

                            response.EnsureSuccessStatusCode();
                        }
                    }
                    model.Code          = code;
                    model.Date          = new DateTimeOffset(model.CreatedUtc);
                    model.PackingList   = packingList;
                    model.Password      = password;
                    model.IsReceived    = false;
                    model.IsDraft       = false;
                    model.IsDistributed = false;

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

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

            return(Created);
        }
        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/RTP");
                    model2.Code = codeOut;
                    model2.Date = DateTimeOffset.Now;
                    List <ExpeditionItem>   expeditionItems   = new List <ExpeditionItem>();
                    List <ExpeditionDetail> expeditionDetails = new List <ExpeditionDetail>();
                    List <SPKDocsItem>      sPKDocsItem       = new List <SPKDocsItem>();
                    EntityExtension.FlagForCreate(model2, username, USER_AGENT);
                    foreach (var i in model2.Items)
                    {
                        sPKDocsItem.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);
                    }

                    dbSet.Add(model2);
                    //Created = await dbContext.SaveChangesAsync();

                    SPKDocs sPKDocs = new SPKDocs
                    {
                        Code            = GenerateCode("EFR-PK/PBJ"),
                        Date            = DateTimeOffset.Now,
                        IsDistributed   = true,
                        IsDraft         = false,
                        IsReceived      = false,
                        DestinationCode = model2.DestinationCode,
                        DestinationId   = model2.DestinationId,
                        DestinationName = model2.DestinationName,
                        PackingList     = GenerateCode("EFR-KB/PLR"),
                        Password        = String.Join("", GenerateCode(DateTime.Now.ToString("dd")).Split("/")),
                        Reference       = codeOut,
                        SourceCode      = model2.SourceCode,
                        SourceName      = model2.SourceName,
                        SourceId        = model2.SourceId,
                        Weight          = 0,
                        Items           = sPKDocsItem
                    };
                    EntityExtension.FlagForCreate(sPKDocs, username, USER_AGENT);
                    foreach (var i in sPKDocs.Items)
                    {
                        var inventorymovement = new InventoryMovement();
                        var inven             = dbContext.Inventories.Where(x => x.ItemId == i.ItemId && x.StorageId == model2.SourceId).FirstOrDefault();
                        if (inven != null)
                        {
                            inventorymovement.Before = inven.Quantity;
                            inven.Quantity           = inven.Quantity - i.Quantity;
                        }
                        inventorymovement.After                      = inventorymovement.Before + i.Quantity;
                        inventorymovement.Date                       = DateTimeOffset.UtcNow;
                        inventorymovement.ItemCode                   = i.ItemCode;
                        inventorymovement.ItemDomesticCOGS           = i.ItemDomesticCOGS;
                        inventorymovement.ItemDomesticRetail         = i.ItemDomesticRetail;
                        inventorymovement.ItemDomesticWholeSale      = i.ItemDomesticRetail;
                        inventorymovement.ItemDomesticSale           = i.ItemDomesticSale;
                        inventorymovement.ItemId                     = i.ItemId;
                        inventorymovement.ItemInternationalCOGS      = 0;
                        inventorymovement.ItemInternationalRetail    = 0;
                        inventorymovement.ItemInternationalSale      = 0;
                        inventorymovement.ItemInternationalWholeSale = 0;
                        inventorymovement.ItemName                   = i.ItemName;
                        inventorymovement.ItemSize                   = i.ItemSize;
                        inventorymovement.ItemUom                    = i.ItemUom;
                        inventorymovement.Quantity                   = i.Quantity;
                        inventorymovement.StorageCode                = model2.SourceCode;
                        inventorymovement.StorageId                  = model2.SourceId;
                        inventorymovement.StorageName                = model2.SourceName;
                        inventorymovement.Type                       = "OUT";
                        inventorymovement.Reference                  = codeOut;
                        inventorymovement.Remark                     = model2.Remark;
                        inventorymovement.StorageIsCentral           = model2.SourceName.Contains("GUDANG") ? true : false;
                        EntityExtension.FlagForCreate(inventorymovement, username, USER_AGENT);
                        dbSetInventoryMovement.Add(inventorymovement);

                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                    }
                    dbSetSPKDocs.Add(sPKDocs);
                    Created = await dbContext.SaveChangesAsync();

                    foreach (var i in sPKDocs.Items)
                    {
                        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)sPKDocs.Id
                        });
                    }

                    expeditionItems.Add(new ExpeditionItem
                    {
                        Code            = sPKDocs.Code,
                        Date            = sPKDocs.Date,
                        DestinationCode = sPKDocs.DestinationCode,
                        DestinationId   = (int)sPKDocs.DestinationId,
                        DestinationName = sPKDocs.DestinationName,
                        IsDistributed   = sPKDocs.IsDistributed,
                        IsDraft         = sPKDocs.IsDraft,
                        IsReceived      = sPKDocs.IsReceived,
                        PackingList     = sPKDocs.PackingList,
                        Password        = sPKDocs.Password,
                        Reference       = sPKDocs.Reference,
                        SourceCode      = sPKDocs.SourceCode,
                        SourceId        = (int)sPKDocs.SourceId,
                        SourceName      = sPKDocs.SourceName,
                        //SPKDocsId = (int)dbContext.SPKDocs.OrderByDescending(x => x.Id).FirstOrDefault().Id + 1,
                        SPKDocsId = (int)sPKDocs.Id,
                        Weight    = sPKDocs.Weight,
                        Details   = expeditionDetails
                    });

                    Expedition expedition = new Expedition
                    {
                        Code = GenerateCode("EFR-KB/EXP"),
                        Date = DateTimeOffset.Now,
                        ExpeditionServiceCode = model.expeditionService.code,
                        ExpeditionServiceId   = (int)model.expeditionService._id,
                        ExpeditionServiceName = model.expeditionService.name,
                        Remark = "",
                        Weight = 0,
                        Items  = expeditionItems,
                    };
                    EntityExtension.FlagForCreate(expedition, username, USER_AGENT);
                    foreach (var i in expeditionItems)
                    {
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                        foreach (var d in expeditionDetails)
                        {
                            EntityExtension.FlagForCreate(d, username, USER_AGENT);
                        }
                    }

                    dbSetExpedition.Add(expedition);
                    Created = await dbContext.SaveChangesAsync();

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

            return(Created);
        }
        public async Task <IActionResult> PostCSVFileAsync(double source, string sourcec, string sourcen, double destination, string destinationc, string destinationn, DateTimeOffset date)
        // public async Task<IActionResult> PostCSVFileAsync(double source, double destination,  DateTime date)
        {
            try
            {
                identityService.Username       = User.Claims.Single(p => p.Type.Equals("username")).Value;
                identityService.Token          = Request.Headers["Authorization"].FirstOrDefault().Replace("Bearer ", "");
                identityService.TimezoneOffset = Convert.ToInt32(Request.Headers["x-timezone-offset"]);
                if (Request.Form.Files.Count > 0)
                {
                    //VerifyUser();
                    var           UploadedFile = Request.Form.Files[0];
                    StreamReader  Reader       = new StreamReader(UploadedFile.OpenReadStream());
                    List <string> FileHeader   = new List <string>(Reader.ReadLine().Split(","));
                    var           ValidHeader  = facade.CsvHeader.SequenceEqual(FileHeader, StringComparer.OrdinalIgnoreCase);

                    if (ValidHeader)
                    {
                        Reader.DiscardBufferedData();
                        Reader.BaseStream.Seek(0, SeekOrigin.Begin);
                        Reader.BaseStream.Position = 0;
                        CsvReader Csv = new CsvReader(Reader);
                        Csv.Configuration.IgnoreQuotes = false;
                        Csv.Configuration.Delimiter    = ",";
                        Csv.Configuration.RegisterClassMap <PkbjMap>();
                        Csv.Configuration.HeaderValidated = null;

                        List <SPKDocsCsvViewModel> Data = Csv.GetRecords <SPKDocsCsvViewModel>().ToList();

                        SPKDocsViewModel Data1 = await facade.MapToViewModel(Data, source, sourcec, sourcen, destination, destinationc, destinationn, date);

                        Tuple <bool, List <object> > Validated = facade.UploadValidate(ref Data, Request.Form.ToList());

                        Reader.Close();

                        if (Validated.Item1) /* If Data Valid */
                        {
                            SPKDocs data = mapper.Map <SPKDocs>(Data1);
                            //foreach (var item in data)
                            //{
                            //    Transfrom(item);
                            //}
                            await facade.UploadData(data, identityService.Username);


                            Dictionary <string, object> Result =
                                new ResultFormatter(ApiVersion, General.CREATED_STATUS_CODE, General.OK_MESSAGE)
                                .Ok();
                            return(Created(HttpContext.Request.Path, Result));
                        }
                        else
                        {
                            using (MemoryStream memoryStream = new MemoryStream())
                            {
                                using (StreamWriter streamWriter = new StreamWriter(memoryStream))
                                    using (CsvWriter csvWriter = new CsvWriter(streamWriter))
                                    {
                                        csvWriter.WriteRecords(Validated.Item2);
                                    }

                                return(File(memoryStream.ToArray(), ContentType, FileName));
                            }
                        }
                    }
                    else
                    {
                        Dictionary <string, object> Result =
                            new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, General.CSV_ERROR_MESSAGE)
                            .Fail();

                        return(NotFound(Result));
                    }
                }
                else
                {
                    Dictionary <string, object> Result =
                        new ResultFormatter(ApiVersion, General.BAD_REQUEST_STATUS_CODE, General.NO_FILE_ERROR_MESSAGE)
                        .Fail();
                    return(BadRequest(Result));
                }
            }
            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));
            }
        }
Ejemplo n.º 7
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(SPKDocsFromFinihsingOutsViewModel viewModel, string username, string token)
        {
            int Created = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    List <SPKDocsItem> sPKDocsItems = new List <SPKDocsItem>();

                    foreach (var item in viewModel.Items)
                    {
                        var isDifferentSize = item.IsDifferentSize;
                        if (isDifferentSize == true)
                        {
                            foreach (var detail in item.Details)
                            {
                                var sizeId       = detail.Size.Id.ToString("00");
                                var counterId    = viewModel.counters._id.ToString("00");
                                var subCounterId = viewModel.subCounters._id.ToString("00");
                                var asal         = viewModel.SourceId.ToString("0");
                                var roCreatedUtc = viewModel.RoCreatedUtc;
                                var materialId   = viewModel.materials._id.ToString("00");

                                var barcode = asal + counterId + subCounterId + materialId + sizeId + roCreatedUtc;
                                Console.WriteLine("barcodefad " + barcode);
                                var itemx = GetItem(barcode);

                                if (itemx == null || itemx.Count() == 0) //barcode belum terdaftar, insert ke tabel items (BMS) terlebih dahulu
                                {
                                    ItemCoreViewModelUsername itemCore = new ItemCoreViewModelUsername
                                    {
                                        dataDestination = new List <ItemViewModelRead>
                                        {
                                            new ItemViewModelRead
                                            {
                                                ArticleRealizationOrder = viewModel.RONo,
                                                code        = barcode,
                                                name        = viewModel.Comodity.name,
                                                Size        = item.Size.Size,
                                                Uom         = item.Uom.Unit,
                                                ImagePath   = viewModel.ImagePath,
                                                ImgFile     = "",
                                                Tags        = "",
                                                Remark      = "",
                                                Description = "",
                                                _id         = 0
                                            }
                                        },
                                        color                  = viewModel.color,
                                        process                = viewModel.process,
                                        materials              = viewModel.materials,
                                        materialCompositions   = viewModel.materialCompositions,
                                        collections            = viewModel.collections,
                                        seasons                = viewModel.seasons,
                                        counters               = viewModel.counters,
                                        subCounters            = viewModel.subCounters,
                                        categories             = viewModel.categories,
                                        DomesticCOGS           = item.BasicPrice,
                                        DomesticRetail         = 0,
                                        DomesticSale           = item.BasicPrice + item.ComodityPrice,
                                        DomesticWholesale      = 0,
                                        InternationalCOGS      = 0,
                                        InternationalWholesale = 0,
                                        InternationalRetail    = 0,
                                        InternationalSale      = 0,
                                        ImageFile              = "",
                                        _id      = 0,
                                        Username = username,
                                        Token    = token,
                                        TotalQty = detail.Quantity
                                    };

                                    string itemsUri   = "items/finished-goods/item";
                                    var    httpClient = (IHttpClientService)serviceProvider.GetService(typeof(IHttpClientService));
                                    var    response   = await httpClient.PostAsync($"{APIEndpoint.Core}{itemsUri}", new StringContent(JsonConvert.SerializeObject(itemCore).ToString(), Encoding.UTF8, General.JsonMediaType));

                                    response.EnsureSuccessStatusCode();

                                    var item2 = GetItem2(barcode);

                                    sPKDocsItems.Add(new SPKDocsItem
                                    {
                                        ItemArticleRealizationOrder = viewModel.RONo,
                                        ItemCode         = barcode,
                                        ItemDomesticCOGS = item.BasicPrice,
                                        ItemDomesticSale = item.BasicPrice + item.ComodityPrice,
                                        ItemId           = item2.FirstOrDefault()._id,
                                        ItemName         = viewModel.Comodity.name,
                                        ItemSize         = detail.Size.Size,
                                        ItemUom          = item.Uom.Unit,
                                        Quantity         = detail.Quantity,
                                        Remark           = "",
                                        SendQuantity     = detail.Quantity,
                                    });
                                }
                                else // barcode sudah terdaftar
                                {
                                    var existItemId = itemx.FirstOrDefault()._id;
                                    ItemCoreViewModelUsername itemCore = new ItemCoreViewModelUsername
                                    {
                                        _id      = existItemId,
                                        Username = username,
                                        Token    = token,
                                        TotalQty = detail.Quantity
                                    };

                                    sPKDocsItems.Add(new SPKDocsItem
                                    {
                                        ItemArticleRealizationOrder = viewModel.RONo,
                                        ItemCode         = barcode,
                                        ItemDomesticCOGS = item.BasicPrice,
                                        ItemDomesticSale = item.BasicPrice + item.ComodityPrice,
                                        ItemId           = existItemId,
                                        ItemName         = viewModel.Comodity.name,
                                        ItemSize         = detail.Size.Size,
                                        ItemUom          = item.Uom.Unit,
                                        Quantity         = detail.Quantity,
                                        Remark           = "",
                                        SendQuantity     = detail.Quantity,
                                    });

                                    //update TotalQty di tabel Items
                                    string             itemPutUri = $"items/finished-goods/update-qty-by-id/{existItemId}";
                                    IHttpClientService httpClient = (IHttpClientService)serviceProvider.GetService(typeof(IHttpClientService));
                                    var response = await httpClient.PutAsync($"{APIEndpoint.Core}{itemPutUri}", new StringContent(JsonConvert.SerializeObject(itemCore).ToString(), Encoding.UTF8, General.JsonMediaType));

                                    if (response != null)
                                    {
                                        response.EnsureSuccessStatusCode();
                                    }
                                }
                            }
                        }
                        else
                        {
                            var sizeId       = item.Size.Id.ToString("00");
                            var counterId    = viewModel.counters._id.ToString("00");
                            var subCounterId = viewModel.subCounters._id.ToString("00");
                            var asal         = viewModel.SourceId.ToString("0");
                            var roCreatedUtc = viewModel.RoCreatedUtc;
                            var materialId   = viewModel.materials._id.ToString("00");

                            var barcode = asal + counterId + subCounterId + materialId + sizeId + roCreatedUtc;
                            Console.WriteLine("barcodefad " + barcode);
                            var itemx = GetItem(barcode);

                            if (itemx == null || itemx.Count() == 0) //barcode belum terdaftar, insert ke tabel items (BMS) terlebih dahulu
                            {
                                ItemCoreViewModelUsername itemCore = new ItemCoreViewModelUsername
                                {
                                    dataDestination = new List <ItemViewModelRead>
                                    {
                                        new ItemViewModelRead
                                        {
                                            ArticleRealizationOrder = viewModel.RONo,
                                            code        = barcode,
                                            name        = viewModel.Comodity.name,
                                            Size        = item.Size.Size,
                                            Uom         = item.Uom.Unit,
                                            ImagePath   = viewModel.ImagePath,
                                            ImgFile     = "",
                                            Tags        = "",
                                            Remark      = "",
                                            Description = "",
                                            _id         = 0
                                        }
                                    },
                                    color                  = viewModel.color,
                                    process                = viewModel.process,
                                    materials              = viewModel.materials,
                                    materialCompositions   = viewModel.materialCompositions,
                                    collections            = viewModel.collections,
                                    seasons                = viewModel.seasons,
                                    counters               = viewModel.counters,
                                    subCounters            = viewModel.subCounters,
                                    categories             = viewModel.categories,
                                    DomesticCOGS           = item.BasicPrice,
                                    DomesticRetail         = 0,
                                    DomesticSale           = item.BasicPrice + item.ComodityPrice,
                                    DomesticWholesale      = 0,
                                    InternationalCOGS      = 0,
                                    InternationalWholesale = 0,
                                    InternationalRetail    = 0,
                                    InternationalSale      = 0,
                                    ImageFile              = "",
                                    _id      = 0,
                                    Username = username,
                                    Token    = token,
                                    TotalQty = item.Quantity
                                };

                                string itemsUri   = "items/finished-goods/item";
                                var    httpClient = (IHttpClientService)serviceProvider.GetService(typeof(IHttpClientService));
                                var    response   = await httpClient.PostAsync($"{APIEndpoint.Core}{itemsUri}", new StringContent(JsonConvert.SerializeObject(itemCore).ToString(), Encoding.UTF8, General.JsonMediaType));

                                response.EnsureSuccessStatusCode();

                                var item2 = GetItem2(barcode);

                                sPKDocsItems.Add(new SPKDocsItem
                                {
                                    ItemArticleRealizationOrder = viewModel.RONo,
                                    ItemCode         = barcode,
                                    ItemDomesticCOGS = item.BasicPrice,
                                    ItemDomesticSale = item.BasicPrice + item.ComodityPrice,
                                    ItemId           = item2.FirstOrDefault()._id,
                                    ItemName         = viewModel.Comodity.name,
                                    ItemSize         = item.Size.Size,
                                    ItemUom          = item.Uom.Unit,
                                    Quantity         = item.Quantity,
                                    Remark           = "",
                                    SendQuantity     = item.Quantity,
                                });
                            }
                            else // barcode sudah terdaftar
                            {
                                var existItemId = itemx.FirstOrDefault()._id;
                                ItemCoreViewModelUsername itemCore = new ItemCoreViewModelUsername
                                {
                                    _id      = existItemId,
                                    Username = username,
                                    Token    = token,
                                    TotalQty = item.Quantity
                                };

                                sPKDocsItems.Add(new SPKDocsItem
                                {
                                    ItemArticleRealizationOrder = viewModel.RONo,
                                    ItemCode         = barcode,
                                    ItemDomesticCOGS = item.BasicPrice,
                                    ItemDomesticSale = item.BasicPrice + item.ComodityPrice,
                                    ItemId           = existItemId,
                                    ItemName         = viewModel.Comodity.name,
                                    ItemSize         = item.Size.Size,
                                    ItemUom          = item.Uom.Unit,
                                    Quantity         = item.Quantity,
                                    Remark           = "",
                                    SendQuantity     = item.Quantity,
                                });

                                //update TotalQty di tabel Items
                                string             itemPutUri = $"items/finished-goods/update-qty-by-id/{existItemId}";
                                IHttpClientService httpClient = (IHttpClientService)serviceProvider.GetService(typeof(IHttpClientService));
                                var response = await httpClient.PutAsync($"{APIEndpoint.Core}{itemPutUri}", new StringContent(JsonConvert.SerializeObject(itemCore).ToString(), Encoding.UTF8, General.JsonMediaType));

                                if (response != null)
                                {
                                    response.EnsureSuccessStatusCode();
                                }
                            }
                        }
                    }

                    var packingListCode = GeneratePackingList();

                    SPKDocs data = new SPKDocs()
                    {
                        Code                 = GenerateCode("EFR-PK/PBJ"),
                        Date                 = viewModel.FinishingOutDate,
                        DestinationId        = (long)viewModel.DestinationStorageId,
                        DestinationCode      = viewModel.DestinationStorageCode,
                        DestinationName      = viewModel.DestinationStorageName,
                        IsDistributed        = false,
                        IsReceived           = false,
                        PackingList          = packingListCode,
                        Password             = "******",
                        Reference            = packingListCode,
                        SourceId             = (long)viewModel.SourceStorageId,
                        SourceCode           = viewModel.SourceStorageCode,
                        SourceName           = viewModel.SourceStorageName,
                        Weight               = 0,
                        FinishingOutIdentity = viewModel.FinishingOutIdentity,
                        Items                = sPKDocsItems
                    };

                    foreach (var i in data.Items)
                    {
                        EntityExtension.FlagForCreate(i, username, USER_AGENT);
                    }
                    EntityExtension.FlagForCreate(data, username, USER_AGENT);
                    dbContext.Add(data);

                    Created = await dbContext.SaveChangesAsync();

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

            return(Created);
        }