private ItemCoreViewModel GetItems(string code, string name, string ro)
        {
            string             itemUri    = "items/finished-goods/readinven";
            string             queryUri   = "?code=" + code + "&ro=" + ro + "&name=" + name;
            string             uri        = itemUri + queryUri;
            IHttpClientService httpClient = (IHttpClientService)serviceProvider.GetService(typeof(IHttpClientService));
            var response = httpClient.GetAsync($"{APIEndpoint.Core}{uri}").Result;

            if (response.IsSuccessStatusCode)
            {
                var content = response.Content.ReadAsStringAsync().Result;
                Dictionary <string, object> result    = JsonConvert.DeserializeObject <Dictionary <string, object> >(content);
                ItemCoreViewModel           viewModel = JsonConvert.DeserializeObject <ItemCoreViewModel>(result.GetValueOrDefault("data").ToString());
                return(viewModel);//.Where(x => x.dataDestination[0].name == name && x.dataDestination[0].code == code).FirstOrDefault();
                //throw new Exception(string.Format("{0}, {1}, {2}", response.StatusCode, response.Content, APIEndpoint.Purchasing));
            }
            else
            {
                return(null);
            }
        }
        public async Task <SPKDocsViewModel> MapToViewModel(List <SPKDocsCsvViewModel> csv, double source, string sourcec, string sourcen, double destination, string destinationc, string destinationn, DateTimeOffset date)
        {
            List <SPKDocsItemViewModel> sPKDocsItems = new List <SPKDocsItemViewModel>();

            //var itemx = GetItem();

            foreach (var i in csv)
            {
                var itemx = GetItem(i.code);
                if (itemx.Count() == 0 || itemx == null)
                {
                    //item = new ViewModels.NewIntegrationViewModel.ItemViewModel
                    //{
                    //articleRealizationOrder = i.articleRealizationOrder,
                    //_id = itemx.Id,
                    //code = i.code,
                    //domesticCOGS = Convert.ToDouble(i.domesticCOGS),
                    //domesticSale = Convert.ToDouble(i.domesticSale),
                    //name = i.name,
                    //size = i.size,
                    //uom = i.uom

                    //},
                    //quantity = Convert.ToDouble(i.quantity),
                    //remark = ""
                    //});
                    ItemCoreViewModel item = new ItemCoreViewModel
                    {
                        dataDestination = new List <ItemViewModelRead>
                        {
                            new ItemViewModelRead
                            {
                                ArticleRealizationOrder = i.articleRealizationOrder,
                                code = i.code,
                                name = i.name,
                                Size = i.size,
                                Uom  = i.uom,
                            }
                        },
                        DomesticCOGS      = Convert.ToDouble(i.domesticCOGS),
                        DomesticRetail    = 0,
                        DomesticSale      = Convert.ToDouble(i.domesticSale),
                        DomesticWholesale = 0,
                    };
                    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();

                    var item2 = GetItem(i.code);

                    sPKDocsItems.Add(new SPKDocsItemViewModel
                    {
                        item = new ViewModels.NewIntegrationViewModel.ItemViewModel
                        {
                            articleRealizationOrder = i.articleRealizationOrder,
                            _id          = item2.Single()._id,
                            code         = i.code,
                            domesticCOGS = Convert.ToDouble(i.domesticCOGS),
                            domesticSale = Convert.ToDouble(i.domesticSale),
                            name         = i.name,
                            size         = i.size,
                            uom          = i.uom
                        },
                        quantity     = Convert.ToDouble(i.quantity),
                        sendquantity = Convert.ToDouble(i.quantity),
                        remark       = ""
                    });
                }
                else
                {
                    sPKDocsItems.Add(new SPKDocsItemViewModel
                    {
                        item = new ViewModels.NewIntegrationViewModel.ItemViewModel
                        {
                            articleRealizationOrder = i.articleRealizationOrder,
                            _id          = itemx.Single()._id,
                            code         = i.code,
                            domesticCOGS = Convert.ToDouble(i.domesticCOGS),
                            domesticSale = Convert.ToDouble(i.domesticSale),
                            name         = i.name,
                            size         = i.size,
                            uom          = i.uom
                        },
                        quantity     = Convert.ToDouble(i.quantity),
                        sendquantity = Convert.ToDouble(i.quantity),
                        remark       = ""
                    });
                }
            }

            SPKDocsViewModel sPKDocsViews = new SPKDocsViewModel
            {
                code          = GenerateCode("EFR-PK/PBJ"),
                date          = date,
                packingList   = csv.FirstOrDefault().PackingList,
                password      = csv.FirstOrDefault().Password,
                reference     = csv.FirstOrDefault().PackingList,
                isDistributed = true,
                isReceived    = false,
                Weight        = 0,
                source        = new SourceViewModel
                {
                    _id  = (long)source,
                    code = sourcec,
                    name = sourcen
                },
                destination = new DestinationViewModel
                {
                    _id  = (long)destination,
                    code = destinationc,
                    name = destinationn
                },

                items = sPKDocsItems
            };

            return(sPKDocsViews);
        }
        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);
        }