Beispiel #1
0
        public DraftLineBean()
        {
            this.ItemCode        = "";
            this.DiscountPercent = 0;
            this.UoMEntry        = -1;

            BatchNumbers.Add(new BatchNumberBean());
        }
        public static double TotalBatchQuantity(this BatchNumbers batches)
        {
            double batchQty = 0;

            for (int x = 0; x < batches.Count; x++)
            {
                batches.SetCurrentLine(x);
                batchQty += batches.Quantity;
            }

            return(batchQty);
        }
Beispiel #3
0
        public async Task <IActionResult> ProcessPayments(PaymentProcessingViewModel viewModel)
        {
            string ReferenceNumber = viewModel.ReferenceNumber;
            bool   allaccounts     = viewModel.AllAccounts;

            if (string.IsNullOrEmpty(ReferenceNumber))
            {
                return(RedirectToAction("ProcessPayments", new { productId = viewModel.ProductID,
                                                                 errReference = "Process cannot continue. Please enter value." }));
            }
            ;

            if (!allaccounts && (viewModel.PaymentTypeID != 1 && viewModel.PaymentTypeID != 3))
            {
                return(RedirectToAction("ProcessPayments", new
                {
                    productId = viewModel.ProductID,
                    errBankAccounts = "Process cannot continue. Please ensure that all payees have account numbers."
                }));
            }
            ;

            if (ReferenceNumber != null)
            {
                const int BufferSize  = 4096;
                int       paymentType = viewModel.PaymentTypeID;

                var todaydate = DateTime.Now.ToString("yyyyMMddHHmmss");

                string dy = todaydate.Substring(6, 2);
                string mn = todaydate.Substring(4, 2);
                string yr = todaydate.Substring(0, 4);
                string hr = todaydate.Substring(8, 2);
                string mi = todaydate.Substring(10, 2);
                string sc = todaydate.Substring(12, 2);

                string prefix = "";

                switch (paymentType)
                {
                case 1:             //  Cash
                    prefix = "CSH";
                    break;

                case 2:             //  EFT
                    prefix = "EFT";
                    break;

                case 3:             //  Cheque
                    prefix = "CHQ";
                    break;

                case 4:             //  Direct Debit
                    prefix = "DDR";
                    break;

                case 5:             //  Bank Transfer
                    prefix = "BTR";
                    break;

                default:
                    break;
                }

                var filename = prefix + "-File-" + yr + mn + dy + hr + mi + sc + ".txt";
                var filePath = hostingEnv.WebRootPath + $@"\BankFiles\{filename}";

                var cheques = await _context.ChequeSummaryTemps.ToListAsync();

                var chequetransactions = await _context.ChequeTemps.ToListAsync();

                BatchNumbers BatchNumberGen = new BatchNumbers(_context);
                var          BatchNumber    = BatchNumberGen.GetBatchNumber();

                int chequenumber = 0;

                if (paymentType == 3)
                {
                    chequenumber    = int.Parse(viewModel.ReferenceNumber);
                    ReferenceNumber = chequenumber.ToString();
                }
                else
                {
                    ReferenceNumber = viewModel.ReferenceNumber;
                };


                Guid productId     = viewModel.ProductID;
                int  paymentTypeId = viewModel.PaymentTypeID;
                Guid currentUserId = Guid.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier));
                Guid payableId     = Guid.Empty;

                var myParams = new object[] { productId, ReferenceNumber, BatchNumber };

                using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.Read, BufferSize, true))
                {
                    Int32  offset       = 0;
                    string refnumberVar = string.Empty;
                    string text         = "Payment Transactions\r\n";
                    text += "=====================\r\n";
                    byte[] buffer = Encoding.Unicode.GetBytes(text);
                    await fs.WriteAsync(buffer, offset, buffer.Length);

                    decimal BulkAmount = cheques.Sum(a => a.Amount);
                    foreach (ChequeSummaryTemp c in cheques)
                    {
                        Guid payeeId = c.PayeeID;

                        //  This string attempts to create the presumed record format as will be determined by the paying
                        //  institution. This string assumes that the output will be a comma-separated ascii file in the
                        //  given column order.
                        if (paymentType == 1 || paymentType == 3)
                        {
                            text = ReferenceNumber + "," + c.Amount.ToString() + "," +
                                   DateTime.Now.ToString("dd/MM/yyyy") + "," + c.Payee + "," +
                                   c.PostalAddress + "," + c.City;
                        }
                        else if (paymentType == 2 || paymentType == 4 || paymentType == 2)
                        {
                            //  Get Payee Bank Account Details
                            var bankaccountdetail = GetBankDetails(c.PayeeID);
                            text = ReferenceNumber + "," + bankaccountdetail + "," + c.Amount.ToString() + "," +
                                   DateTime.Now.ToString("dd/MM/yyyy") + "," + c.Payee + "," +
                                   c.PostalAddress + "," + c.City;
                        }
                        ;

                        buffer = Encoding.Unicode.GetBytes(text + "\r\n");
                        await fs.WriteAsync(buffer, offset, buffer.Length);

                        if (!ReferenceNumber.Equals(refnumberVar))
                        {
                            refnumberVar = ReferenceNumber;
                            decimal FinalAmount = (paymentType == 3) ? c.Amount : BulkAmount;

                            var payableParams = new object[] { Guid.NewGuid(), productId, ReferenceNumber, DateTime.Now,
                                paymentTypeId, FinalAmount, BatchNumber, false, null, null,
                                null, DateTime.Now, currentUserId, null, null };

                            await _context.Database.ExecuteSqlCommandAsync(
                                "INSERT INTO Payable (ID, ProductID, Reference, PayableDate, PaymentTypeID, Amount, " +
                                "BatchNumber, Void, VoidReason, Remarks, PayableExportID, DateAdded, AddedBy, " +
                                "DateModified, ModifiedBy) " +
                                "VALUES ({0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8}, {9}, {10}, {11}, {12}, {13}, {14})",
                                parameters : payableParams);

                            //  Get Payable ID
                            payableId = GetPayableId(ReferenceNumber);
                        }
                        ;

                        foreach (ChequeTemp t in chequetransactions)
                        {
                            if (t.PayeeID == payeeId)
                            {
                                var transParams = new object[] { t.ID, payableId };

                                await _context.Database.ExecuteSqlCommandAsync(
                                    "UPDATE ClaimTransaction SET PayableID = {1} " +
                                    "WHERE ID = {0}",
                                    parameters : transParams);
                            }
                        }

                        chequenumber++;

                        if (paymentType == 3)
                        {
                            refnumberVar    = chequenumber.ToString();
                            ReferenceNumber = refnumberVar;
                        }
                        else
                        {
                            refnumberVar = ReferenceNumber;
                        };
                    }
                    ;
                    fs.Flush();
                }

                var batchParams = new object[] { BatchNumber };

                await _context.Database.ExecuteSqlCommandAsync(
                    "INSERT INTO BatchNumberGenerator(BatchNumber) " +
                    "Values ({0})",
                    parameters : batchParams);

                // Generete Payment File [Done]
                // Then insert into Payable and update ClaimTransaction tables
                // Delete ChequeTemp and ChequeSummaryTemp records

                var myParam = productId;

                await _context.Database.ExecuteSqlCommandAsync(
                    "DELETE FROM ChequeTemp WHERE ProductID = {0}",
                    parameters : myParam);

                await _context.Database.ExecuteSqlCommandAsync(
                    "DELETE FROM ChequeSummaryTemp WHERE ProductID = {0}",
                    parameters : myParam);
            }

            return(RedirectToAction("ProcessPayments", new { productId = viewModel.ProductID }));
        }
Beispiel #4
0
        public static string ReciboCalibrado(string WhsCode, string DocEntry, string DocEntryOF, string Tarja, string Peso, string Conteo, string reparo, string Variedad, string CodPro, string NomPro, string sessionId)
        {
            var OF = DeserializeJsonToDynamic(GET(ServiceLayer.ProductionOrders, DocEntryOF, null, sessionId, out _));

            if (OF.AbsoluteEntry != null)
            {
                //var batch = DeserializeJsonObject<BatchNumberDetails>(GET(ServiceLayer.BatchNumberDetails, null, $"?$filter=Batch eq '{Lote}'", sessionId));
                //var bin = DeserializeJsonObject<DFO_LOTESCALIBRADO>(GET(ServiceLayer.DFO_LOTESCALIBRADO, null, $"?$filter=LOTE eq '{Lote}'", sessionId));

                //Consultar cajas asociadas a OF sin lote asignado

                DateTime date   = DateTime.Now;
                string   fecha  = date.ToString("yyyyMMddHHmmssfff");
                string   Notes  = "";
                string   Status = "0";
                if (reparo == "Y")
                {
                    Notes  = "Aprobado con reparos";
                    Status = "2";
                }

                var ListDocBatch = new List <BatchNumbers>();

                BatchNumbers DocBatch = new BatchNumbers
                {
                    BatchNumber = Tarja,
                    Quantity    = double.Parse(Peso),
                    //Status = Status,
                    U_FRU_CantBins    = 1,
                    U_FRU_CantBinsDis = 1,
                    U_FRU_Conteo      = Conteo,
                    U_FRU_EstadoCalid = Notes
                };

                ListDocBatch.Add(DocBatch);

                var             ListDocLines = new List <IDocument_Lines>();
                IDocument_Lines DocLines     = new IDocument_Lines
                {
                    BaseEntry = OF.AbsoluteEntry,
                    //BaseLine = 0,
                    BaseType      = "202",
                    Quantity      = double.Parse(Peso),
                    BatchNumbers  = ListDocBatch,
                    WarehouseCode = WhsCode//,
                };
                ListDocLines.Add(DocLines);

                IDocuments Documents = new IDocuments
                {
                    DocDate       = DateTime.Now.ToString("yyyyMMdd"),
                    DocumentLines = ListDocLines,
                };

                var response = DeserializeJsonToDynamic(POST(ServiceLayer.InventoryGenEntries, Documents, sessionId, out HttpStatusCode statusCode));

                if (response.DocEntry != null)
                {
                    var batch = DeserializeJsonObject <BatchNumberDetails>(GET(ServiceLayer.BatchNumberDetails, null, $"?$filter=Batch eq '{Tarja}'", sessionId, out _));

                    batch.U_FRU_CantBinsDis = 1;
                    batch.U_FRU_CantBins    = 1;
                    batch.U_FRU_Conteo      = Conteo;
                    batch.U_FRU_EstadoCalid = Notes;
                    PATCH(ServiceLayer.BatchNumberDetails, batch, batch.DocEntry.ToString(), sessionId, out _);

                    // Tarja

                    var OCAOF = DeserializeList <Calibrado>(GET(ServiceLayer.Calibrado, null, $"?$filter=DocEntry eq {DocEntry} and Remark eq null", sessionId, out _));
                    foreach (var item in OCAOF)
                    {
                        item.Remark   = response.DocEntry;
                        item.U_Estado = "A";
                        PATCH(ServiceLayer.Calibrado, item, item.DocEntry, sessionId, out _);
                    }
                }
                else
                {
                    var objresponse = DeserializeJsonToDynamic(response);
                    return(objresponse.error.message.value.ToString());
                }

                return(response.ToString());
            }
            else
            {
                return("OF no encontrada");
            }
        }
Beispiel #5
0
        public static string ConsumoLoteCalibrado(string Lote, string DocEntryOF, string LineNum, string sessionId)
        {
            var OF = GET(ServiceLayer.ProductionOrders, DocEntryOF, null, sessionId, out _).DeserializeJsonToDynamic();

            if (OF.AbsoluteEntry != null)
            {
                var batch = DeserializeJsonObject <BatchNumberDetails>(GET(ServiceLayer.BatchNumberDetails, null, $"?$filter=Batch eq '{Lote}'", sessionId, out _));
                var bin   = DeserializeJsonObject <ListadoBinsMP>(GET(ServiceLayer.ListadoBinsMP, null, $"?$filter=LOTE eq '{Lote}' ", sessionId, out _)); //and ALMACEN eq 'FRUTEXSA'

                if (bin.CANTIDADBINS > 0)
                {
                    var          ListDocBatch = new List <BatchNumbers>();
                    BatchNumbers DocBatch     = new BatchNumbers
                    {
                        BatchNumber  = Lote,
                        SystemNumber = batch.SystemNumber,
                        Quantity     = double.Parse(bin.CANTIDADBINS.ToString()),
                    };
                    ListDocBatch.Add(DocBatch);

                    var             ListDocLines = new List <IDocument_Lines>();
                    IDocument_Lines DocLines     = new IDocument_Lines
                    {
                        DocEntry      = null,
                        BaseEntry     = OF.AbsoluteEntry,
                        BaseLine      = int.Parse(LineNum),
                        BaseType      = "202",
                        Quantity      = double.Parse(bin.CANTIDADBINS.ToString()), //bin.CANTIDADBINS,
                        BatchNumbers  = ListDocBatch,
                        WarehouseCode = bin.ALMACEN
                    };
                    ListDocLines.Add(DocLines);

                    IDocuments Documents = new IDocuments
                    {
                        DocEntry      = null,
                        DocDate       = DateTime.Now.ToString("yyyyMMdd"),
                        DocumentLines = ListDocLines,
                    };

                    var response = POST(ServiceLayer.InventoryGenExits, Documents, sessionId, out HttpStatusCode statusCode).DeserializeJsonToDynamic();

                    if (statusCode == HttpStatusCode.Created)
                    {
                        batch.U_FRU_CantBinsDis -= 1;
                        if (!batch.U_FRU_CantBinsVol.HasValue)
                        {
                            batch.U_FRU_CantBinsVol = 0;
                        }

                        batch.U_FRU_CantBinsVol += 1;
                        PATCH(ServiceLayer.BatchNumberDetails, batch, batch.DocEntry.ToString(), sessionId, out _);
                    }
                    else
                    {
                        var objresponse = DeserializeJsonToDynamic(response);
                        return(objresponse.error.message.value.ToString());
                    }
                    return(response.ToString());
                }
                else
                {
                    return("El lote no tiene cantidad disponible");
                }
            }
            else
            {
                return("OF no encontrada");
            }
        }