public Int32 insertReceivingReceipt(Models.TrnReceivingReceipt receivingReceipt)
        {
            try
            {
                var userId = (from d in db.MstUsers where d.UserId == User.Identity.GetUserId() select d.Id).SingleOrDefault();

                var RRNumberResult = "0000000001";

                var lastRRNumber = from d in db.TrnReceivingReceipts.OrderByDescending(d => d.Id) where d.BranchId == currentBranchId() select d;
                if (lastRRNumber.Any())
                {
                    var PONumber = Convert.ToInt32(lastRRNumber.FirstOrDefault().RRNumber) + 0000000001;
                    RRNumberResult = zeroFill(PONumber, 10);
                }

                Data.TrnReceivingReceipt newReceivingReceipt = new Data.TrnReceivingReceipt();
                newReceivingReceipt.BranchId          = currentBranchId();
                newReceivingReceipt.RRDate            = DateTime.Today;
                newReceivingReceipt.RRNumber          = RRNumberResult;
                newReceivingReceipt.SupplierId        = (from d in db.MstArticles where d.ArticleTypeId == 3 select d.Id).FirstOrDefault();
                newReceivingReceipt.TermId            = (from d in db.MstTerms select d.Id).FirstOrDefault();
                newReceivingReceipt.DocumentReference = "NA";
                newReceivingReceipt.ManualRRNumber    = "NA";
                newReceivingReceipt.Remarks           = "NA";
                newReceivingReceipt.Amount            = 0;
                newReceivingReceipt.WTaxAmount        = 0;
                newReceivingReceipt.PaidAmount        = 0;
                newReceivingReceipt.AdjustmentAmount  = 0;
                newReceivingReceipt.BalanceAmount     = 0;
                newReceivingReceipt.ReceivedById      = userId;
                newReceivingReceipt.PreparedById      = userId;
                newReceivingReceipt.CheckedById       = userId;
                newReceivingReceipt.ApprovedById      = userId;
                newReceivingReceipt.IsLocked          = false;
                newReceivingReceipt.CreatedById       = userId;
                newReceivingReceipt.CreatedDateTime   = DateTime.Now;
                newReceivingReceipt.UpdatedById       = userId;
                newReceivingReceipt.UpdatedDateTime   = DateTime.Now;

                db.TrnReceivingReceipts.InsertOnSubmit(newReceivingReceipt);
                db.SubmitChanges();

                return(newReceivingReceipt.Id);
            }
            catch
            {
                return(0);
            }
        }
        public HttpResponseMessage AddFolderMonitoringReceivingReceipt(List <Entities.FolderMonitoringTrnReceivingReceipt> folderMonitoringTrnReceivingReceiptObjects)
        {
            try
            {
                if (folderMonitoringTrnReceivingReceiptObjects.Any())
                {
                    foreach (var folderMonitoringTrnReceivingReceiptObject in folderMonitoringTrnReceivingReceiptObjects)
                    {
                        Boolean isBranchExist          = false,
                                 isSupplierExist       = false,
                                 isTermExist           = false,
                                 isUserExist           = false,
                                 isReceivedBranchExist = false;

                        Int32 POId = 0;

                        var branch = from d in db.MstBranches where d.BranchCode.Equals(folderMonitoringTrnReceivingReceiptObject.BranchCode) select d;
                        if (branch.Any())
                        {
                            isBranchExist = true;
                        }

                        var supplier = from d in db.MstArticles where d.ArticleTypeId == 3 && d.ManualArticleCode.Equals(folderMonitoringTrnReceivingReceiptObject.SupplierCode) && d.IsLocked == true select d;
                        if (supplier.Any())
                        {
                            isSupplierExist = true;
                        }

                        var term = from d in db.MstTerms where d.Term.Equals(folderMonitoringTrnReceivingReceiptObject.Term) select d;
                        if (term.Any())
                        {
                            isTermExist = true;
                        }

                        var user = from d in db.MstUsers where d.UserName.Equals(folderMonitoringTrnReceivingReceiptObject.UserCode) select d;
                        if (user.Any())
                        {
                            isUserExist = true;
                        }

                        if (isBranchExist)
                        {
                            var purchaseOrder = from d in db.TrnPurchaseOrders where d.BranchId == branch.FirstOrDefault().Id&& d.PONumber.Equals(folderMonitoringTrnReceivingReceiptObject.PONumber) && d.IsLocked == true select d;
                            if (purchaseOrder.Any())
                            {
                                POId = purchaseOrder.FirstOrDefault().Id;
                            }
                            else
                            {
                                if (isSupplierExist)
                                {
                                    var defaultPONumber   = "0000000001";
                                    var lastPurchaseOrder = from d in db.TrnPurchaseOrders.OrderByDescending(d => d.Id) where d.BranchId == branch.FirstOrDefault().Id select d;
                                    if (lastPurchaseOrder.Any())
                                    {
                                        var PONumber = Convert.ToInt32(lastPurchaseOrder.FirstOrDefault().PONumber) + 0000000001;
                                        defaultPONumber = FillLeadingZeroes(PONumber, 10);
                                    }

                                    Data.TrnPurchaseOrder newPurchaseOrder = new Data.TrnPurchaseOrder
                                    {
                                        BranchId            = branch.FirstOrDefault().Id,
                                        PONumber            = defaultPONumber,
                                        PODate              = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.PODate),
                                        SupplierId          = supplier.FirstOrDefault().Id,
                                        TermId              = term.FirstOrDefault().Id,
                                        ManualRequestNumber = "NA",
                                        ManualPONumber      = folderMonitoringTrnReceivingReceiptObject.DocumentReference,
                                        DateNeeded          = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.PODateNeeded),
                                        Remarks             = folderMonitoringTrnReceivingReceiptObject.Remarks,
                                        IsClose             = false,
                                        RequestedById       = user.FirstOrDefault().Id,
                                        PreparedById        = user.FirstOrDefault().Id,
                                        CheckedById         = user.FirstOrDefault().Id,
                                        ApprovedById        = user.FirstOrDefault().Id,
                                        Status              = null,
                                        IsCancelled         = false,
                                        IsPrinted           = false,
                                        IsLocked            = true,
                                        CreatedById         = user.FirstOrDefault().Id,
                                        CreatedDateTime     = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.CreatedDateTime),
                                        UpdatedById         = user.FirstOrDefault().Id,
                                        UpdatedDateTime     = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.CreatedDateTime)
                                    };

                                    db.TrnPurchaseOrders.InsertOnSubmit(newPurchaseOrder);
                                    db.SubmitChanges();

                                    POId = newPurchaseOrder.Id;

                                    var item = from d in db.MstArticles where d.ArticleTypeId == 1 && d.ManualArticleCode.Equals(folderMonitoringTrnReceivingReceiptObject.ItemCode) && d.IsLocked == true select d;
                                    if (item.Any())
                                    {
                                        var conversionUnit = from d in db.MstArticleUnits
                                                             where d.ArticleId == item.FirstOrDefault().Id &&
                                                             d.MstUnit.Unit.Equals(folderMonitoringTrnReceivingReceiptObject.Unit)
                                                             select d;

                                        if (conversionUnit.Any())
                                        {
                                            Decimal baseQuantity = folderMonitoringTrnReceivingReceiptObject.Quantity * 1;
                                            if (conversionUnit.FirstOrDefault().Multiplier > 0)
                                            {
                                                baseQuantity = folderMonitoringTrnReceivingReceiptObject.Quantity * (1 / conversionUnit.FirstOrDefault().Multiplier);
                                            }

                                            Decimal baseCost = folderMonitoringTrnReceivingReceiptObject.Amount;
                                            if (baseQuantity > 0)
                                            {
                                                baseCost = folderMonitoringTrnReceivingReceiptObject.Amount / baseQuantity;
                                            }

                                            Data.TrnPurchaseOrderItem newPurchaseOrderItem = new Data.TrnPurchaseOrderItem
                                            {
                                                POId         = POId,
                                                ItemId       = item.FirstOrDefault().Id,
                                                Particulars  = folderMonitoringTrnReceivingReceiptObject.Particulars,
                                                UnitId       = conversionUnit.FirstOrDefault().UnitId,
                                                Quantity     = folderMonitoringTrnReceivingReceiptObject.Quantity,
                                                Cost         = folderMonitoringTrnReceivingReceiptObject.Cost,
                                                Amount       = folderMonitoringTrnReceivingReceiptObject.Amount,
                                                BaseUnitId   = item.FirstOrDefault().UnitId,
                                                BaseQuantity = baseQuantity,
                                                BaseCost     = baseCost
                                            };

                                            db.TrnPurchaseOrderItems.InsertOnSubmit(newPurchaseOrderItem);
                                            db.SubmitChanges();
                                        }
                                    }
                                }
                            }
                        }

                        var receivedBranch = from d in db.MstBranches where d.BranchCode.Equals(folderMonitoringTrnReceivingReceiptObject.ReceivedBranchCode) select d;
                        if (receivedBranch.Any())
                        {
                            isReceivedBranchExist = true;
                        }

                        if (isBranchExist && isSupplierExist && isTermExist && isUserExist && isReceivedBranchExist)
                        {
                            var purchaseOrderItem = from d in db.TrnPurchaseOrderItems
                                                    where d.POId == POId &&
                                                    d.TrnPurchaseOrder.IsLocked == true &&
                                                    d.MstArticle.ManualArticleCode.Equals(folderMonitoringTrnReceivingReceiptObject.ItemCode) &&
                                                    d.MstArticle.IsInventory == true
                                                    select d;

                            if (purchaseOrderItem.Any())
                            {
                                Int32 RRId = 0;

                                var currentReceivingReceipt = from d in db.TrnReceivingReceipts where d.BranchId == branch.FirstOrDefault().Id&& d.ManualRRNumber.Equals(folderMonitoringTrnReceivingReceiptObject.ManualRRNumber) && d.IsLocked == true select d;
                                if (currentReceivingReceipt.Any())
                                {
                                    RRId = currentReceivingReceipt.FirstOrDefault().Id;

                                    var unlockReceivingReceipt = currentReceivingReceipt.FirstOrDefault();
                                    unlockReceivingReceipt.IsLocked        = false;
                                    unlockReceivingReceipt.UpdatedById     = purchaseOrderItem.FirstOrDefault().TrnPurchaseOrder.UpdatedById;
                                    unlockReceivingReceipt.UpdatedDateTime = purchaseOrderItem.FirstOrDefault().TrnPurchaseOrder.UpdatedDateTime;
                                    db.SubmitChanges();

                                    inventory.DeleteReceivingReceiptInventory(RRId);
                                    journal.DeleteReceivingReceiptJournal(RRId);
                                }
                                else
                                {
                                    var defaultRRNumber      = "0000000001";
                                    var lastReceivingReceipt = from d in db.TrnReceivingReceipts.OrderByDescending(d => d.Id) where d.BranchId == branch.FirstOrDefault().Id select d;
                                    if (lastReceivingReceipt.Any())
                                    {
                                        var RRNumber = Convert.ToInt32(lastReceivingReceipt.FirstOrDefault().RRNumber) + 0000000001;
                                        defaultRRNumber = FillLeadingZeroes(RRNumber, 10);
                                    }

                                    Data.TrnReceivingReceipt newReceivingReceipt = new Data.TrnReceivingReceipt
                                    {
                                        BranchId          = branch.FirstOrDefault().Id,
                                        RRNumber          = defaultRRNumber,
                                        RRDate            = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.RRDate),
                                        DocumentReference = folderMonitoringTrnReceivingReceiptObject.DocumentReference,
                                        SupplierId        = supplier.FirstOrDefault().Id,
                                        TermId            = term.FirstOrDefault().Id,
                                        Remarks           = folderMonitoringTrnReceivingReceiptObject.Remarks,
                                        ManualRRNumber    = folderMonitoringTrnReceivingReceiptObject.ManualRRNumber,
                                        Amount            = 0,
                                        WTaxAmount        = 0,
                                        PaidAmount        = 0,
                                        AdjustmentAmount  = 0,
                                        BalanceAmount     = 0,
                                        ReceivedById      = user.FirstOrDefault().Id,
                                        PreparedById      = user.FirstOrDefault().Id,
                                        CheckedById       = user.FirstOrDefault().Id,
                                        ApprovedById      = user.FirstOrDefault().Id,
                                        Status            = null,
                                        IsCancelled       = false,
                                        IsPrinted         = false,
                                        IsLocked          = false,
                                        CreatedById       = purchaseOrderItem.FirstOrDefault().TrnPurchaseOrder.CreatedById,
                                        CreatedDateTime   = purchaseOrderItem.FirstOrDefault().TrnPurchaseOrder.CreatedDateTime,
                                        UpdatedById       = purchaseOrderItem.FirstOrDefault().TrnPurchaseOrder.UpdatedById,
                                        UpdatedDateTime   = purchaseOrderItem.FirstOrDefault().TrnPurchaseOrder.UpdatedDateTime
                                    };

                                    db.TrnReceivingReceipts.InsertOnSubmit(newReceivingReceipt);
                                    db.SubmitChanges();

                                    RRId = newReceivingReceipt.Id;
                                }

                                var unitConversion = from d in purchaseOrderItem.FirstOrDefault().MstArticle.MstArticleUnits where d.UnitId == purchaseOrderItem.FirstOrDefault().MstArticle.UnitId select d;
                                if (unitConversion.Any())
                                {
                                    Decimal baseQuantity = folderMonitoringTrnReceivingReceiptObject.Quantity * 1;
                                    if (unitConversion.FirstOrDefault().Multiplier > 0)
                                    {
                                        baseQuantity = folderMonitoringTrnReceivingReceiptObject.Quantity * (1 / unitConversion.FirstOrDefault().Multiplier);
                                    }

                                    Decimal amount     = folderMonitoringTrnReceivingReceiptObject.Quantity * folderMonitoringTrnReceivingReceiptObject.Cost;
                                    Decimal VATAmount  = ComputeVATAmount(purchaseOrderItem.FirstOrDefault().MstArticle.MstTaxType1.IsInclusive, folderMonitoringTrnReceivingReceiptObject.Quantity * folderMonitoringTrnReceivingReceiptObject.Cost, purchaseOrderItem.FirstOrDefault().MstArticle.MstTaxType1.TaxRate);
                                    Decimal WTAXAmount = ComputeWTAXAmount(purchaseOrderItem.FirstOrDefault().MstArticle.MstTaxType2.IsInclusive, folderMonitoringTrnReceivingReceiptObject.Quantity * folderMonitoringTrnReceivingReceiptObject.Cost, purchaseOrderItem.FirstOrDefault().MstArticle.MstTaxType2.TaxRate);

                                    Decimal baseCost = 0;
                                    if (baseQuantity > 0)
                                    {
                                        baseCost = (amount - VATAmount + WTAXAmount) / baseQuantity;
                                    }

                                    Data.TrnReceivingReceiptItem newReceivingReceiptItem = new Data.TrnReceivingReceiptItem
                                    {
                                        RRId           = RRId,
                                        POId           = POId,
                                        ItemId         = purchaseOrderItem.FirstOrDefault().ItemId,
                                        Particulars    = folderMonitoringTrnReceivingReceiptObject.Particulars,
                                        UnitId         = purchaseOrderItem.FirstOrDefault().UnitId,
                                        Quantity       = folderMonitoringTrnReceivingReceiptObject.Quantity,
                                        Cost           = folderMonitoringTrnReceivingReceiptObject.Cost,
                                        Amount         = folderMonitoringTrnReceivingReceiptObject.Amount,
                                        VATId          = purchaseOrderItem.FirstOrDefault().MstArticle.InputTaxId,
                                        VATPercentage  = purchaseOrderItem.FirstOrDefault().MstArticle.MstTaxType1.TaxRate,
                                        VATAmount      = VATAmount,
                                        WTAXId         = purchaseOrderItem.FirstOrDefault().MstArticle.WTaxTypeId,
                                        WTAXPercentage = purchaseOrderItem.FirstOrDefault().MstArticle.MstTaxType2.TaxRate,
                                        WTAXAmount     = WTAXAmount,
                                        BranchId       = receivedBranch.FirstOrDefault().Id,
                                        BaseUnitId     = purchaseOrderItem.FirstOrDefault().MstArticle.UnitId,
                                        BaseQuantity   = baseQuantity,
                                        BaseCost       = baseCost
                                    };

                                    db.TrnReceivingReceiptItems.InsertOnSubmit(newReceivingReceiptItem);
                                    db.SubmitChanges();

                                    var receivingReceipt = from d in db.TrnReceivingReceipts where d.Id == RRId && d.IsLocked == false select d;
                                    if (receivingReceipt.Any())
                                    {
                                        Decimal receivingReceiptAmount = 0, receivingReceiptWTAXAmount = 0;
                                        var     receivingReceiptItems = from d in db.TrnReceivingReceiptItems where d.RRId == RRId select d;
                                        if (receivingReceiptItems.Any())
                                        {
                                            receivingReceiptAmount = receivingReceiptItems.Sum(d => d.Amount); receivingReceiptWTAXAmount = receivingReceiptItems.Sum(d => d.WTAXAmount);
                                        }

                                        var lockReceivingReceipt = receivingReceipt.FirstOrDefault();
                                        lockReceivingReceipt.Amount          = receivingReceiptAmount;
                                        lockReceivingReceipt.WTaxAmount      = receivingReceiptWTAXAmount;
                                        lockReceivingReceipt.IsLocked        = true;
                                        lockReceivingReceipt.UpdatedById     = purchaseOrderItem.FirstOrDefault().TrnPurchaseOrder.UpdatedById;
                                        lockReceivingReceipt.UpdatedDateTime = purchaseOrderItem.FirstOrDefault().TrnPurchaseOrder.UpdatedDateTime;
                                        db.SubmitChanges();

                                        accountsPayable.UpdateAccountsPayable(RRId);
                                        inventory.InsertReceivingReceiptInventory(RRId);
                                        journal.InsertReceivingReceiptJournal(RRId);
                                    }
                                }
                            }
                        }
                    }

                    return(Request.CreateResponse(HttpStatusCode.OK));
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, "No data found."));
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, "Something's went wrong from the server."));
            }
        }
        public Int32 insertReceivingReceipt(Models.TrnReceivingReceipt receivingReceipt)
        {
            try
            {
                var userId = (from d in db.MstUsers where d.UserId == User.Identity.GetUserId() select d.Id).SingleOrDefault();

                var lastRRNumber = from d in db.TrnReceivingReceipts.OrderByDescending(d => d.Id) select d;
                var RRNumberResult = "0000000001";

                if (lastRRNumber.Any())
                {
                    var PONumber = Convert.ToInt32(lastRRNumber.FirstOrDefault().RRNumber) + 0000000001;
                    RRNumberResult = zeroFill(PONumber, 10);
                }

                Data.TrnReceivingReceipt newReceivingReceipt = new Data.TrnReceivingReceipt();
                newReceivingReceipt.BranchId = currentBranchId();
                newReceivingReceipt.RRDate = DateTime.Today;
                newReceivingReceipt.RRNumber = RRNumberResult;
                newReceivingReceipt.SupplierId = (from d in db.MstArticles where d.ArticleTypeId == 3 select d.Id).FirstOrDefault();
                newReceivingReceipt.TermId = (from d in db.MstTerms select d.Id).FirstOrDefault();
                newReceivingReceipt.DocumentReference = "NA";
                newReceivingReceipt.ManualRRNumber = "NA";
                newReceivingReceipt.Remarks = "NA";
                newReceivingReceipt.Amount = 0;
                newReceivingReceipt.WTaxAmount = 0;
                newReceivingReceipt.PaidAmount = 0;
                newReceivingReceipt.AdjustmentAmount = 0;
                newReceivingReceipt.BalanceAmount = 0;
                newReceivingReceipt.ReceivedById = userId;
                newReceivingReceipt.PreparedById = userId;
                newReceivingReceipt.CheckedById = userId;
                newReceivingReceipt.ApprovedById = userId;
                newReceivingReceipt.IsLocked = false;
                newReceivingReceipt.CreatedById = userId;
                newReceivingReceipt.CreatedDateTime = DateTime.Now;
                newReceivingReceipt.UpdatedById = userId;
                newReceivingReceipt.UpdatedDateTime = DateTime.Now;

                db.TrnReceivingReceipts.InsertOnSubmit(newReceivingReceipt);
                db.SubmitChanges();

                return newReceivingReceipt.Id;
            }
            catch
            {
                return 0;
            }
        }
Exemple #4
0
        public HttpResponseMessage AddReceivingReceipt()
        {
            try
            {
                var currentUser = from d in db.MstUsers
                                  where d.UserId == User.Identity.GetUserId()
                                  select d;

                if (currentUser.Any())
                {
                    var currentUserId   = currentUser.FirstOrDefault().Id;
                    var currentBranchId = currentUser.FirstOrDefault().BranchId;

                    var userForms = from d in db.MstUserForms
                                    where d.UserId == currentUserId &&
                                    d.SysForm.FormName.Equals("ReceivingReceiptList")
                                    select d;

                    if (userForms.Any())
                    {
                        if (userForms.FirstOrDefault().CanAdd)
                        {
                            var defaultRRNumber      = "0000000001";
                            var lastReceivingReceipt = from d in db.TrnReceivingReceipts.OrderByDescending(d => d.Id)
                                                       where d.BranchId == currentBranchId
                                                       select d;

                            if (lastReceivingReceipt.Any())
                            {
                                var RRNumber = Convert.ToInt32(lastReceivingReceipt.FirstOrDefault().RRNumber) + 0000000001;
                                defaultRRNumber = FillLeadingZeroes(RRNumber, 10);
                            }

                            var suppliers = from d in db.MstArticles.OrderBy(d => d.Article)
                                            where d.ArticleTypeId == 3 &&
                                            d.IsLocked == true
                                            select d;

                            if (suppliers.Any())
                            {
                                var terms = from d in db.MstTerms.OrderBy(d => d.Term)
                                            where d.IsLocked == true
                                            select d;

                                if (terms.Any())
                                {
                                    var users = from d in db.MstUsers.OrderBy(d => d.FullName)
                                                where d.IsLocked == true
                                                select d;

                                    if (users.Any())
                                    {
                                        Data.TrnReceivingReceipt newReceivingReceipt = new Data.TrnReceivingReceipt
                                        {
                                            BranchId          = currentBranchId,
                                            RRNumber          = defaultRRNumber,
                                            RRDate            = DateTime.Today,
                                            DocumentReference = "NA",
                                            SupplierId        = suppliers.FirstOrDefault().Id,
                                            TermId            = terms.FirstOrDefault().Id,
                                            Remarks           = "NA",
                                            ManualRRNumber    = "NA",
                                            Amount            = 0,
                                            WTaxAmount        = 0,
                                            PaidAmount        = 0,
                                            AdjustmentAmount  = 0,
                                            BalanceAmount     = 0,
                                            ReceivedById      = currentUserId,
                                            PreparedById      = currentUserId,
                                            CheckedById       = currentUserId,
                                            ApprovedById      = currentUserId,
                                            IsLocked          = false,
                                            CreatedById       = currentUserId,
                                            CreatedDateTime   = DateTime.Now,
                                            UpdatedById       = currentUserId,
                                            UpdatedDateTime   = DateTime.Now
                                        };

                                        db.TrnReceivingReceipts.InsertOnSubmit(newReceivingReceipt);
                                        db.SubmitChanges();

                                        return(Request.CreateResponse(HttpStatusCode.OK, newReceivingReceipt.Id));
                                    }
                                    else
                                    {
                                        return(Request.CreateResponse(HttpStatusCode.NotFound, "No user found. Please setup more users for all transactions."));
                                    }
                                }
                                else
                                {
                                    return(Request.CreateResponse(HttpStatusCode.NotFound, "No term found. Please setup more terms for all transactions."));
                                }
                            }
                            else
                            {
                                return(Request.CreateResponse(HttpStatusCode.NotFound, "No supplier found. Please setup more suppliers for all transactions."));
                            }
                        }
                        else
                        {
                            return(Request.CreateResponse(HttpStatusCode.BadRequest, "Sorry. You have no rights to add receiving receipt."));
                        }
                    }
                    else
                    {
                        return(Request.CreateResponse(HttpStatusCode.BadRequest, "Sorry. You have no access for this receiving receipt page."));
                    }
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "Theres no current user logged in."));
                }
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, "Something's went wrong from the server."));
            }
        }
        public HttpResponseMessage AddFolderMonitoringReceivingReceipt(List <Entities.FolderMonitoringTrnReceivingReceipt> folderMonitoringTrnReceivingReceiptObjects)
        {
            try
            {
                if (folderMonitoringTrnReceivingReceiptObjects.Any())
                {
                    String returnMessage = "";

                    List <Entities.FolderMonitoringTrnReceivingReceiptHeader> newFolderMonitoringTrnReceivingReceiptHeaders = new List <Entities.FolderMonitoringTrnReceivingReceiptHeader>();
                    List <Entities.FolderMonitoringTrnReceivingReceiptItem>   newFolderMonitoringTrnReceivingReceiptItems   = new List <Entities.FolderMonitoringTrnReceivingReceiptItem>();

                    Boolean isDataValid = false;

                    foreach (var folderMonitoringTrnReceivingReceiptObject in folderMonitoringTrnReceivingReceiptObjects)
                    {
                        Boolean isBranchExist          = false,
                                 isSupplierExist       = false,
                                 isUserExist           = false,
                                 isItemExist           = false,
                                 isUnitExist           = false,
                                 isReceivedBranchExist = false;

                        var branch = from d in db.MstBranches where d.BranchCode.Equals(folderMonitoringTrnReceivingReceiptObject.BranchCode) select d;
                        if (branch.Any())
                        {
                            isBranchExist = true;
                        }

                        var supplier = from d in db.MstArticles where d.ArticleTypeId == 3 && d.ManualArticleCode.Equals(folderMonitoringTrnReceivingReceiptObject.SupplierCode) && d.IsLocked == true select d;
                        if (supplier.Any())
                        {
                            isSupplierExist = true;
                        }

                        var user = from d in db.MstUsers where d.UserName.Equals(folderMonitoringTrnReceivingReceiptObject.UserCode) select d;
                        if (user.Any())
                        {
                            isUserExist = true;
                        }

                        var item = from d in db.MstArticles where d.ArticleTypeId == 1 && d.ManualArticleCode.Equals(folderMonitoringTrnReceivingReceiptObject.ItemCode) && d.IsLocked == true select d;
                        if (item.Any())
                        {
                            isItemExist = true;
                        }

                        var unit = from d in db.MstUnits where d.Unit.Equals(folderMonitoringTrnReceivingReceiptObject.Unit) select d;
                        if (unit.Any())
                        {
                            isUnitExist = true;
                        }

                        var receivedBranch = from d in db.MstBranches where d.BranchCode.Equals(folderMonitoringTrnReceivingReceiptObject.ReceivedBranchCode) select d;
                        if (receivedBranch.Any())
                        {
                            isReceivedBranchExist = true;
                        }

                        if (!isBranchExist)
                        {
                            returnMessage = "Invalid Branch Code: " + folderMonitoringTrnReceivingReceiptObject.BranchCode; isDataValid = false; break;
                        }
                        else if (!isSupplierExist)
                        {
                            returnMessage = "Invalid Supplier Code: " + folderMonitoringTrnReceivingReceiptObject.SupplierCode; isDataValid = false; break;
                        }
                        else if (!isUserExist)
                        {
                            returnMessage = "Invalid User Code: " + folderMonitoringTrnReceivingReceiptObject.UserCode; isDataValid = false; break;
                        }
                        else if (!isItemExist)
                        {
                            returnMessage = "Invalid Item Code: " + folderMonitoringTrnReceivingReceiptObject.ItemCode; isDataValid = false; break;
                        }
                        else if (!isUnitExist)
                        {
                            returnMessage = "Invalid Unit: " + folderMonitoringTrnReceivingReceiptObject.Unit; isDataValid = false; break;
                        }
                        else if (!isReceivedBranchExist)
                        {
                            returnMessage = "Invalid Received Branch Code: " + folderMonitoringTrnReceivingReceiptObject.ReceivedBranchCode; isDataValid = false; break;
                        }
                        else
                        {
                            var currentReceivingReceipt = from d in db.TrnReceivingReceipts
                                                          where d.BranchId == branch.FirstOrDefault().Id &&
                                                          d.ManualRRNumber.Equals(folderMonitoringTrnReceivingReceiptObject.ManualRRNumber) &&
                                                          d.IsLocked == true
                                                          select d;

                            if (currentReceivingReceipt.Any())
                            {
                                returnMessage = "This Manual RR No. " + folderMonitoringTrnReceivingReceiptObject.ManualRRNumber + " is already exist!";
                                isDataValid   = false;

                                break;
                            }
                            else
                            {
                                var unitConversion = from d in db.MstArticleUnits
                                                     where d.ArticleId == item.FirstOrDefault().Id &&
                                                     d.UnitId == unit.FirstOrDefault().Id
                                                     select d;

                                if (unitConversion.Any())
                                {
                                    Decimal baseQuantity = folderMonitoringTrnReceivingReceiptObject.Quantity * 1;
                                    if (unitConversion.FirstOrDefault().Multiplier > 0)
                                    {
                                        baseQuantity = folderMonitoringTrnReceivingReceiptObject.Quantity * (1 / unitConversion.FirstOrDefault().Multiplier);
                                    }

                                    Decimal amount     = folderMonitoringTrnReceivingReceiptObject.Quantity * folderMonitoringTrnReceivingReceiptObject.Cost;
                                    Decimal VATAmount  = ComputeVATAmount(item.FirstOrDefault().MstTaxType1.IsInclusive, folderMonitoringTrnReceivingReceiptObject.Quantity * folderMonitoringTrnReceivingReceiptObject.Cost, item.FirstOrDefault().MstTaxType1.TaxRate);
                                    Decimal WTAXAmount = ComputeWTAXAmount(item.FirstOrDefault().MstTaxType2.IsInclusive, folderMonitoringTrnReceivingReceiptObject.Quantity * folderMonitoringTrnReceivingReceiptObject.Cost, item.FirstOrDefault().MstTaxType2.TaxRate);

                                    Decimal baseCost = 0;
                                    if (baseQuantity > 0)
                                    {
                                        baseCost = (amount - VATAmount + WTAXAmount) / baseQuantity;
                                    }

                                    var folderMonitoringTrnReceivingReceiptHeader = from d in newFolderMonitoringTrnReceivingReceiptHeaders
                                                                                    where d.BranchId == branch.FirstOrDefault().Id &&
                                                                                    d.ManualRRNumber.Equals(folderMonitoringTrnReceivingReceiptObject.ManualRRNumber)
                                                                                    select d;

                                    if (folderMonitoringTrnReceivingReceiptHeader.Any())
                                    {
                                        var currentFolderMonitoringTrnReceivingReceiptHeader = folderMonitoringTrnReceivingReceiptHeader.FirstOrDefault();
                                        currentFolderMonitoringTrnReceivingReceiptHeader.ListFolderMonitoringTrnReceivingReceiptItems.Add(new Entities.FolderMonitoringTrnReceivingReceiptItem()
                                        {
                                            ManualRRNumber = folderMonitoringTrnReceivingReceiptObject.ManualRRNumber,
                                            POId           = 0,
                                            ManualPONumber = folderMonitoringTrnReceivingReceiptObject.ManualPONumber,
                                            PODate         = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.PODate),
                                            PODateNeeded   = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.PODateNeeded),
                                            ItemId         = item.FirstOrDefault().Id,
                                            Particulars    = folderMonitoringTrnReceivingReceiptObject.Particulars,
                                            UnitId         = unitConversion.FirstOrDefault().UnitId,
                                            Quantity       = folderMonitoringTrnReceivingReceiptObject.Quantity,
                                            Cost           = folderMonitoringTrnReceivingReceiptObject.Cost,
                                            Amount         = folderMonitoringTrnReceivingReceiptObject.Amount,
                                            VATId          = item.FirstOrDefault().InputTaxId,
                                            VATPercentage  = item.FirstOrDefault().MstTaxType1.TaxRate,
                                            VATAmount      = VATAmount,
                                            WTAXId         = item.FirstOrDefault().WTaxTypeId,
                                            WTAXPercentage = item.FirstOrDefault().MstTaxType2.TaxRate,
                                            WTAXAmount     = WTAXAmount,
                                            BranchId       = receivedBranch.FirstOrDefault().Id,
                                            BaseUnitId     = item.FirstOrDefault().UnitId,
                                            BaseQuantity   = baseQuantity,
                                            BaseCost       = baseCost
                                        });
                                    }
                                    else
                                    {
                                        newFolderMonitoringTrnReceivingReceiptItems = new List <Entities.FolderMonitoringTrnReceivingReceiptItem>
                                        {
                                            new Entities.FolderMonitoringTrnReceivingReceiptItem()
                                            {
                                                ManualRRNumber = folderMonitoringTrnReceivingReceiptObject.ManualRRNumber,
                                                POId           = 0,
                                                ManualPONumber = folderMonitoringTrnReceivingReceiptObject.ManualPONumber,
                                                PODate         = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.PODate),
                                                PODateNeeded   = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.PODateNeeded),
                                                ItemId         = item.FirstOrDefault().Id,
                                                Particulars    = folderMonitoringTrnReceivingReceiptObject.Particulars,
                                                UnitId         = unitConversion.FirstOrDefault().UnitId,
                                                Quantity       = folderMonitoringTrnReceivingReceiptObject.Quantity,
                                                Cost           = folderMonitoringTrnReceivingReceiptObject.Cost,
                                                Amount         = folderMonitoringTrnReceivingReceiptObject.Amount,
                                                VATId          = item.FirstOrDefault().InputTaxId,
                                                VATPercentage  = item.FirstOrDefault().MstTaxType1.TaxRate,
                                                VATAmount      = VATAmount,
                                                WTAXId         = item.FirstOrDefault().WTaxTypeId,
                                                WTAXPercentage = item.FirstOrDefault().MstTaxType2.TaxRate,
                                                WTAXAmount     = WTAXAmount,
                                                BranchId       = receivedBranch.FirstOrDefault().Id,
                                                BaseUnitId     = item.FirstOrDefault().UnitId,
                                                BaseQuantity   = baseQuantity,
                                                BaseCost       = baseCost
                                            }
                                        };

                                        if (newFolderMonitoringTrnReceivingReceiptItems.Any())
                                        {
                                            newFolderMonitoringTrnReceivingReceiptHeaders.Add(new Entities.FolderMonitoringTrnReceivingReceiptHeader()
                                            {
                                                BranchId          = branch.FirstOrDefault().Id,
                                                RRNumber          = "0000000000",
                                                RRDate            = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.RRDate),
                                                DocumentReference = folderMonitoringTrnReceivingReceiptObject.DocumentReference,
                                                SupplierId        = supplier.FirstOrDefault().Id,
                                                TermId            = supplier.FirstOrDefault().MstTerm.Id,
                                                Remarks           = folderMonitoringTrnReceivingReceiptObject.Remarks,
                                                ManualRRNumber    = folderMonitoringTrnReceivingReceiptObject.ManualRRNumber,
                                                Amount            = 0,
                                                WTaxAmount        = 0,
                                                PaidAmount        = 0,
                                                AdjustmentAmount  = 0,
                                                BalanceAmount     = 0,
                                                ReceivedById      = user.FirstOrDefault().Id,
                                                PreparedById      = user.FirstOrDefault().Id,
                                                CheckedById       = user.FirstOrDefault().Id,
                                                ApprovedById      = user.FirstOrDefault().Id,
                                                Status            = null,
                                                IsCancelled       = false,
                                                IsPrinted         = false,
                                                IsLocked          = false,
                                                CreatedById       = user.FirstOrDefault().Id,
                                                CreatedDateTime   = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.CreatedDateTime),
                                                UpdatedById       = user.FirstOrDefault().Id,
                                                UpdatedDateTime   = Convert.ToDateTime(folderMonitoringTrnReceivingReceiptObject.CreatedDateTime),
                                                ListFolderMonitoringTrnReceivingReceiptItems = newFolderMonitoringTrnReceivingReceiptItems
                                            });
                                        }
                                    }
                                }
                                else
                                {
                                    returnMessage = "This item code: " + folderMonitoringTrnReceivingReceiptObject.ItemCode + " has invalid unit conversion. Unit: " + folderMonitoringTrnReceivingReceiptObject.Unit;
                                    isDataValid   = false;

                                    break;
                                }

                                isDataValid = true;
                            }
                        }
                    }

                    if (isDataValid)
                    {
                        if (newFolderMonitoringTrnReceivingReceiptHeaders.Any())
                        {
                            foreach (var newFolderMonitoringTrnReceivingReceiptHeader in newFolderMonitoringTrnReceivingReceiptHeaders)
                            {
                                Int32 RRId = 0;

                                var defaultRRNumber      = "0000000001";
                                var lastReceivingReceipt = from d in db.TrnReceivingReceipts.OrderByDescending(d => d.Id) where d.BranchId == newFolderMonitoringTrnReceivingReceiptHeader.BranchId select d;
                                if (lastReceivingReceipt.Any())
                                {
                                    var RRNumber = Convert.ToInt32(lastReceivingReceipt.FirstOrDefault().RRNumber) + 0000000001;
                                    defaultRRNumber = FillLeadingZeroes(RRNumber, 10);
                                }

                                Data.TrnReceivingReceipt newReceivingReceipt = new Data.TrnReceivingReceipt
                                {
                                    BranchId          = newFolderMonitoringTrnReceivingReceiptHeader.BranchId,
                                    RRNumber          = defaultRRNumber,
                                    RRDate            = newFolderMonitoringTrnReceivingReceiptHeader.RRDate,
                                    DocumentReference = newFolderMonitoringTrnReceivingReceiptHeader.DocumentReference,
                                    SupplierId        = newFolderMonitoringTrnReceivingReceiptHeader.SupplierId,
                                    TermId            = newFolderMonitoringTrnReceivingReceiptHeader.TermId,
                                    Remarks           = newFolderMonitoringTrnReceivingReceiptHeader.Remarks,
                                    ManualRRNumber    = newFolderMonitoringTrnReceivingReceiptHeader.ManualRRNumber,
                                    Amount            = newFolderMonitoringTrnReceivingReceiptHeader.Amount,
                                    WTaxAmount        = newFolderMonitoringTrnReceivingReceiptHeader.WTaxAmount,
                                    PaidAmount        = newFolderMonitoringTrnReceivingReceiptHeader.PaidAmount,
                                    AdjustmentAmount  = newFolderMonitoringTrnReceivingReceiptHeader.AdjustmentAmount,
                                    BalanceAmount     = newFolderMonitoringTrnReceivingReceiptHeader.BalanceAmount,
                                    ReceivedById      = newFolderMonitoringTrnReceivingReceiptHeader.ReceivedById,
                                    PreparedById      = newFolderMonitoringTrnReceivingReceiptHeader.PreparedById,
                                    CheckedById       = newFolderMonitoringTrnReceivingReceiptHeader.CheckedById,
                                    ApprovedById      = newFolderMonitoringTrnReceivingReceiptHeader.ApprovedById,
                                    Status            = newFolderMonitoringTrnReceivingReceiptHeader.Status,
                                    IsCancelled       = newFolderMonitoringTrnReceivingReceiptHeader.IsCancelled,
                                    IsPrinted         = newFolderMonitoringTrnReceivingReceiptHeader.IsPrinted,
                                    IsLocked          = newFolderMonitoringTrnReceivingReceiptHeader.IsLocked,
                                    CreatedById       = newFolderMonitoringTrnReceivingReceiptHeader.CreatedById,
                                    CreatedDateTime   = newFolderMonitoringTrnReceivingReceiptHeader.CreatedDateTime,
                                    UpdatedById       = newFolderMonitoringTrnReceivingReceiptHeader.UpdatedById,
                                    UpdatedDateTime   = newFolderMonitoringTrnReceivingReceiptHeader.UpdatedDateTime
                                };

                                db.TrnReceivingReceipts.InsertOnSubmit(newReceivingReceipt);
                                db.SubmitChanges();

                                RRId = newReceivingReceipt.Id;

                                if (newFolderMonitoringTrnReceivingReceiptHeader.ListFolderMonitoringTrnReceivingReceiptItems.Any())
                                {
                                    foreach (var listFolderMonitoringTrnReceivingReceiptItem in newFolderMonitoringTrnReceivingReceiptHeader.ListFolderMonitoringTrnReceivingReceiptItems)
                                    {
                                        Int32 POId = 0;

                                        var purchaseOrder = from d in db.TrnPurchaseOrders
                                                            where d.BranchId == newFolderMonitoringTrnReceivingReceiptHeader.BranchId &&
                                                            d.PODate == listFolderMonitoringTrnReceivingReceiptItem.PODate &&
                                                            d.ManualPONumber.Equals(listFolderMonitoringTrnReceivingReceiptItem.ManualPONumber) &&
                                                            d.IsLocked == true
                                                            select d;

                                        if (purchaseOrder.Any())
                                        {
                                            POId = purchaseOrder.FirstOrDefault().Id;
                                        }
                                        else
                                        {
                                            var defaultPONumber   = "0000000001";
                                            var lastPurchaseOrder = from d in db.TrnPurchaseOrders.OrderByDescending(d => d.Id) where d.BranchId == newFolderMonitoringTrnReceivingReceiptHeader.BranchId select d;
                                            if (lastPurchaseOrder.Any())
                                            {
                                                var PONumber = Convert.ToInt32(lastPurchaseOrder.FirstOrDefault().PONumber) + 0000000001;
                                                defaultPONumber = FillLeadingZeroes(PONumber, 10);
                                            }

                                            Data.TrnPurchaseOrder newPurchaseOrder = new Data.TrnPurchaseOrder
                                            {
                                                BranchId            = newFolderMonitoringTrnReceivingReceiptHeader.BranchId,
                                                PONumber            = defaultPONumber,
                                                PODate              = Convert.ToDateTime(listFolderMonitoringTrnReceivingReceiptItem.PODate),
                                                SupplierId          = newFolderMonitoringTrnReceivingReceiptHeader.SupplierId,
                                                TermId              = newFolderMonitoringTrnReceivingReceiptHeader.TermId,
                                                ManualRequestNumber = "NA",
                                                ManualPONumber      = listFolderMonitoringTrnReceivingReceiptItem.ManualPONumber,
                                                DateNeeded          = Convert.ToDateTime(listFolderMonitoringTrnReceivingReceiptItem.PODateNeeded),
                                                Remarks             = newFolderMonitoringTrnReceivingReceiptHeader.Remarks,
                                                IsClose             = false,
                                                RequestedById       = newFolderMonitoringTrnReceivingReceiptHeader.PreparedById,
                                                PreparedById        = newFolderMonitoringTrnReceivingReceiptHeader.PreparedById,
                                                CheckedById         = newFolderMonitoringTrnReceivingReceiptHeader.CheckedById,
                                                ApprovedById        = newFolderMonitoringTrnReceivingReceiptHeader.ApprovedById,
                                                Status              = null,
                                                IsCancelled         = false,
                                                IsPrinted           = false,
                                                IsLocked            = true,
                                                CreatedById         = newFolderMonitoringTrnReceivingReceiptHeader.CreatedById,
                                                CreatedDateTime     = newFolderMonitoringTrnReceivingReceiptHeader.CreatedDateTime,
                                                UpdatedById         = newFolderMonitoringTrnReceivingReceiptHeader.UpdatedById,
                                                UpdatedDateTime     = newFolderMonitoringTrnReceivingReceiptHeader.CreatedDateTime
                                            };

                                            db.TrnPurchaseOrders.InsertOnSubmit(newPurchaseOrder);
                                            db.SubmitChanges();

                                            POId = newPurchaseOrder.Id;
                                        }

                                        Data.TrnPurchaseOrderItem newPurchaseOrderItem = new Data.TrnPurchaseOrderItem
                                        {
                                            POId         = POId,
                                            ItemId       = listFolderMonitoringTrnReceivingReceiptItem.ItemId,
                                            Particulars  = listFolderMonitoringTrnReceivingReceiptItem.Particulars,
                                            UnitId       = listFolderMonitoringTrnReceivingReceiptItem.UnitId,
                                            Quantity     = listFolderMonitoringTrnReceivingReceiptItem.Quantity,
                                            Cost         = listFolderMonitoringTrnReceivingReceiptItem.Cost,
                                            Amount       = listFolderMonitoringTrnReceivingReceiptItem.Amount,
                                            BaseUnitId   = listFolderMonitoringTrnReceivingReceiptItem.BaseUnitId,
                                            BaseQuantity = listFolderMonitoringTrnReceivingReceiptItem.BaseQuantity,
                                            BaseCost     = listFolderMonitoringTrnReceivingReceiptItem.BaseCost
                                        };

                                        db.TrnPurchaseOrderItems.InsertOnSubmit(newPurchaseOrderItem);

                                        var item = from d in db.MstArticles
                                                   where d.Id == listFolderMonitoringTrnReceivingReceiptItem.ItemId &&
                                                   d.IsLocked == true
                                                   select d;

                                        if (item.Any())
                                        {
                                            var updateItem = item.FirstOrDefault();
                                            updateItem.Cost = newPurchaseOrderItem.Cost;
                                            db.SubmitChanges();
                                        }

                                        Data.TrnReceivingReceiptItem newReceivingReceiptItem = new Data.TrnReceivingReceiptItem
                                        {
                                            RRId           = RRId,
                                            POId           = POId,
                                            ItemId         = listFolderMonitoringTrnReceivingReceiptItem.ItemId,
                                            Particulars    = listFolderMonitoringTrnReceivingReceiptItem.Particulars,
                                            UnitId         = listFolderMonitoringTrnReceivingReceiptItem.UnitId,
                                            Quantity       = listFolderMonitoringTrnReceivingReceiptItem.Quantity,
                                            Cost           = listFolderMonitoringTrnReceivingReceiptItem.Cost,
                                            Amount         = listFolderMonitoringTrnReceivingReceiptItem.Amount,
                                            VATId          = listFolderMonitoringTrnReceivingReceiptItem.VATId,
                                            VATPercentage  = listFolderMonitoringTrnReceivingReceiptItem.VATPercentage,
                                            VATAmount      = listFolderMonitoringTrnReceivingReceiptItem.VATAmount,
                                            WTAXId         = listFolderMonitoringTrnReceivingReceiptItem.WTAXId,
                                            WTAXPercentage = listFolderMonitoringTrnReceivingReceiptItem.WTAXPercentage,
                                            WTAXAmount     = listFolderMonitoringTrnReceivingReceiptItem.WTAXAmount,
                                            BranchId       = listFolderMonitoringTrnReceivingReceiptItem.BranchId,
                                            BaseUnitId     = listFolderMonitoringTrnReceivingReceiptItem.BaseUnitId,
                                            BaseQuantity   = listFolderMonitoringTrnReceivingReceiptItem.BaseQuantity,
                                            BaseCost       = listFolderMonitoringTrnReceivingReceiptItem.BaseCost
                                        };

                                        db.TrnReceivingReceiptItems.InsertOnSubmit(newReceivingReceiptItem);
                                    }

                                    db.SubmitChanges();
                                }

                                var receivingReceipt = from d in db.TrnReceivingReceipts
                                                       where d.Id == RRId
                                                       select d;

                                if (receivingReceipt.Any())
                                {
                                    Decimal amount = 0;
                                    var     receivingReceiptItems = from d in db.TrnReceivingReceiptItems where d.RRId == RRId select d;
                                    if (receivingReceiptItems.Any())
                                    {
                                        amount = receivingReceiptItems.Sum(d => d.Amount);
                                    }

                                    var lockReceivingReceipt = receivingReceipt.FirstOrDefault();
                                    lockReceivingReceipt.Amount   = amount;
                                    lockReceivingReceipt.IsLocked = true;
                                    db.SubmitChanges();

                                    accountsPayable.UpdateAccountsPayable(RRId);
                                    inventory.InsertReceivingReceiptInventory(RRId);
                                    journal.InsertReceivingReceiptJournal(RRId);
                                }
                            }
                        }
                    }

                    return(Request.CreateResponse(HttpStatusCode.OK, returnMessage));
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.NotFound, "Data Source is Invalid or Empty."));
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, "Backend Error: " + ex.Message));
            }
        }