Ejemplo n.º 1
0
 public async Task UploadData(SODocs data, string username)
 {
     foreach (var i in data.Items)
     {
         EntityExtension.FlagForCreate(i, username, USER_AGENT);
     }
     EntityExtension.FlagForCreate(data, username, USER_AGENT);
     dbSetSO.Add(data);
     var result = await dbContext.SaveChangesAsync();
 }
Ejemplo n.º 2
0
        public async Task <int> Delete(int id, string username)
        {
            SODocs model = ReadById(id);

            EntityExtension.FlagForDelete(model, username, USER_AGENT, true);

            foreach (var i in model.Items)
            {
                EntityExtension.FlagForDelete(model, username, USER_AGENT, true);
            }

            dbSetSO.Update(model);

            return(await dbContext.SaveChangesAsync());
        }
Ejemplo n.º 3
0
        public IActionResult Get(int id)
        {
            try
            {
                var             indexAcceptPdf = Request.Headers["Accept"].ToList().IndexOf("application/pdf");
                SODocs          model          = facade.ReadById(id);
                SODocsViewModel viewModel      = mapper.Map <SODocsViewModel>(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 <IActionResult> PostCSVFileAsync(string source)
        // 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 <Bateeq.Service.Warehouse.Lib.Facades.SOFacade.SOMap>();
                        Csv.Configuration.HeaderValidated = null;

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

                        SODocsViewModel Data1 = await facade.MapToViewModel(Data, source);

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

                        Reader.Close();

                        if (Validated.Item1) /* If Data Valid */
                        {
                            SODocs data = mapper.Map <SODocs>(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.º 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);
            }
        }