private static object[] Take(SupplyLedgerEntity supplyLedgerEntity)
 {
     return(new object[]
     {
         "@SupplyLedgerID", supplyLedgerEntity.SupplyLedgerId,
         "@RefID", supplyLedgerEntity.RefId,
         "@RefDetailID", supplyLedgerEntity.RefDetailId,
         "@RefType", supplyLedgerEntity.RefType,
         "@RefNo", supplyLedgerEntity.RefNo,
         "@RefDate", supplyLedgerEntity.RefDate,
         "@PostedDate", supplyLedgerEntity.PostedDate,
         "@Description", supplyLedgerEntity.Description,
         "@JournalMemo", supplyLedgerEntity.JournalMemo,
         "@InventoryItemID", supplyLedgerEntity.InventoryItemId,
         "@DepartmentID", supplyLedgerEntity.DepartmentId,
         "@CurrencyCode", supplyLedgerEntity.CurrencyCode,
         "@ExchangeRate", supplyLedgerEntity.ExchangeRate,
         "@Unit", supplyLedgerEntity.Unit,
         "@Quantity", supplyLedgerEntity.Quantity,
         "@UnitPriceOc", supplyLedgerEntity.UnitPriceOc,
         "@UnitPriceExchange", supplyLedgerEntity.UnitPriceExchange,
         "@AmountOc", supplyLedgerEntity.AmountOc,
         "@AmountExchange", supplyLedgerEntity.AmountExchange,
     });
 }
        private SupplyLedgerEntity MakeSupplyLedger(OpeningSupplyEntryEntity openingSupplyEntry)
        {
            var result = new SupplyLedgerEntity();

            result.SupplyLedgerId    = 0;
            result.RefId             = openingSupplyEntry.RefId;
            result.RefDetailId       = 0;
            result.RefType           = openingSupplyEntry.RefType;
            result.RefNo             = "OPN";
            result.RefDate           = openingSupplyEntry.RefDate;
            result.PostedDate        = openingSupplyEntry.PostedDate;
            result.Description       = null;
            result.JournalMemo       = null;
            result.InventoryItemId   = openingSupplyEntry.InventoryItemId;
            result.DepartmentId      = openingSupplyEntry.DepartmentId;
            result.CurrencyCode      = openingSupplyEntry.CurrencyCode;
            result.ExchangeRate      = openingSupplyEntry.ExchangeRate;
            result.Unit              = InventoryItemDao.GetInventoryItem(openingSupplyEntry.InventoryItemId)?.Unit ?? null;
            result.Quantity          = openingSupplyEntry.Quantity;
            result.UnitPriceOc       = openingSupplyEntry.UnitPriceOc;
            result.UnitPriceExchange = openingSupplyEntry.UnitPriceExchange;
            result.AmountOc          = openingSupplyEntry.AmountOc;
            result.AmountExchange    = openingSupplyEntry.AmountExchange;
            return(result);
        }
        private SupplyLedgerEntity MakeSupplyLedger(SUIncrementDecrementEntity suIncrementDecrement, SUIncrementDecrementDetailEntity suIncrementDecrementDetail)
        {
            var result = new SupplyLedgerEntity();

            result.SupplyLedgerId    = 0;
            result.RefId             = suIncrementDecrement.RefId;
            result.RefDetailId       = suIncrementDecrementDetail.RefDetailId;
            result.RefType           = suIncrementDecrement.RefType;
            result.RefNo             = suIncrementDecrement.RefNo;
            result.RefDate           = suIncrementDecrement.RefDate;
            result.PostedDate        = suIncrementDecrement.PostedDate;
            result.Description       = suIncrementDecrementDetail.Description;
            result.JournalMemo       = suIncrementDecrement.JournalMemo;
            result.InventoryItemId   = suIncrementDecrementDetail.InventoryItemId;
            result.DepartmentId      = suIncrementDecrementDetail.DepartmentId;
            result.CurrencyCode      = suIncrementDecrement.CurrencyCode;
            result.ExchangeRate      = suIncrementDecrement.ExchangeRate;
            result.Unit              = InventoryItemDao.GetInventoryItem(suIncrementDecrementDetail.InventoryItemId)?.Unit ?? null;
            result.Quantity          = suIncrementDecrementDetail.Quantity;
            result.UnitPriceOc       = suIncrementDecrementDetail.UnitPriceOc;
            result.UnitPriceExchange = suIncrementDecrementDetail.UnitPriceExchange;
            result.AmountOc          = suIncrementDecrementDetail.AmountOc;
            result.AmountExchange    = suIncrementDecrementDetail.AmountExchange;
            return(result);
        }
 /// <summary>
 /// Takes the specified fixed asset ledger.
 /// </summary>
 /// <param name="supplyLedgerEntity">The supply ledger entity.</param>
 /// <returns></returns>
 private static object[] Take(SupplyLedgerEntity supplyLedgerEntity)
 {
     return(new object[]
     {
         "@SupplyLedgerID", supplyLedgerEntity.SupplyLedgerId,
         "@RefID", supplyLedgerEntity.RefId,
         "@RefType", supplyLedgerEntity.RefType,
         "@RefNo", supplyLedgerEntity.RefNo,
         "@RefDate", supplyLedgerEntity.RefDate,
         "@PostedDate", supplyLedgerEntity.PostedDate,
         "@DepartmentID", supplyLedgerEntity.DepartmentId,
         "@InventoryItemID", supplyLedgerEntity.InventoryItemId,
         "@Unit", supplyLedgerEntity.Unit,
         "@UnitPrice", supplyLedgerEntity.UnitPrice,
         "@IncrementQuantity", supplyLedgerEntity.IncrementQuantity,
         "@DecrementQuantity", supplyLedgerEntity.DecrementQuantity,
         "@IncrementAmount", supplyLedgerEntity.IncrementAmount,
         "@DecrementAmount", supplyLedgerEntity.DecrementAmount,
         "@JournalMemo", supplyLedgerEntity.JournalMemo,
         "@Description", supplyLedgerEntity.Description,
         "@AccountNumber", supplyLedgerEntity.AccountNumber,
         "@RefDetailID", supplyLedgerEntity.RefDetailId
     });
 }
        public long InsertSupplyLedger(SupplyLedgerEntity supplyLedger)
        {
            const string sql = @"uspInsert_SupplyLedger";

            return(Db.Insert(sql, true, Take(supplyLedger)));
        }
        /// <summary>
        /// Updates the ba deposit.
        /// </summary>
        /// <param name="suTransferEntity">The su transfer entity.</param>
        /// <returns></returns>
        public SUTransferResponse UpdateSUTransfer(SUTransferEntity suTransferEntity)
        {
            var response = new SUTransferResponse {
                Acknowledge = AcknowledgeType.Success
            };

            try
            {
                if (!suTransferEntity.Validate())
                {
                    foreach (var error in suTransferEntity.ValidationErrors)
                    {
                        response.Message += error + Environment.NewLine;
                    }
                    response.Acknowledge = AcknowledgeType.Failure;
                    return(response);
                }
                using (var scope = new TransactionScope())
                {
                    var suTransfer = SUTransferDao.GetSUTransfer(suTransferEntity.RefNo.Trim(), suTransferEntity.PostedDate);
                    if (suTransfer != null && suTransfer.PostedDate.Year == suTransferEntity.PostedDate.Year)
                    {
                        if (suTransfer.RefId != suTransferEntity.RefId)
                        {
                            response.Acknowledge = AcknowledgeType.Failure;
                            response.Message     = @"Số chứng từ " + suTransferEntity.RefNo + @" đã tồn tại !";
                            return(response);
                        }
                    }

                    response.Message = SUTransferDao.UpdateSUTransfer(suTransferEntity);
                    if (!string.IsNullOrEmpty(response.Message))
                    {
                        response.Acknowledge = AcknowledgeType.Failure;
                        return(response);
                    }

                    #region Update account balance
                    //Trừ đi số tiền của chứng từ cũ trước khi cộng thêm số tiền mới

                    UpdateAccountBalance(suTransferEntity);
                    if (response.Message != null)
                    {
                        response.Acknowledge = AcknowledgeType.Failure;
                        scope.Dispose();
                        return(response);
                    }

                    #endregion

                    #region Delete detail and insert detail

                    // Xóa bảng SUTransferDetail
                    response.Message = SUTransferDetailDao.DeleteSUTransferDetailByRefId(suTransferEntity.RefId);
                    if (!string.IsNullOrEmpty(response.Message))
                    {
                        response.Acknowledge = AcknowledgeType.Failure;
                        return(response);
                    }

                    // Xóa bảng OriginalGeneralLedger
                    response.Message = OriginalGeneralLedgerDao.DeleteOriginalGeneralLedger(suTransferEntity.RefId);
                    if (response.Message != null)
                    {
                        response.Acknowledge = AcknowledgeType.Failure;
                        scope.Dispose();
                        return(response);
                    }

                    // Xóa bảng SupplyLedger
                    response.Message = SupplyLedgerDao.DeleteSupplyLedgerByRefId(suTransferEntity.RefId, suTransferEntity.RefType);
                    if (response.Message != null)
                    {
                        response.Acknowledge = AcknowledgeType.Failure;
                        scope.Dispose();
                        return(response);
                    }

                    if (suTransferEntity.SUTransferDetails != null)
                    {
                        foreach (var suTransferDetail in suTransferEntity.SUTransferDetails)
                        {
                            if (suTransferEntity.RefType == (int)BuCA.Enum.RefType.SUTransfer)
                            {
                                AutoMapper(GetUnitsInDepartment(suTransferDetail.InventoryItemId, suTransferDetail.FromDepartmentId, suTransferDetail.Quantity, suTransferDetail.Description), response);
                                if (response.Acknowledge == AcknowledgeType.Failure)
                                {
                                    return(response);
                                }
                            }

                            suTransferDetail.RefDetailId = Guid.NewGuid().ToString();
                            suTransferDetail.RefId       = suTransferEntity.RefId;
                            response.Message             = SUTransferDetailDao.InsertSUTransferDetail(suTransferDetail);
                            if (!string.IsNullOrEmpty(response.Message))
                            {
                                response.Acknowledge = AcknowledgeType.Failure;
                                return(response);
                            }

                            #region Insert into AccountBalance

                            // Cộng thêm số tiền mới sau khi sửa chứng từ
                            InsertAccountBalance(suTransferEntity, suTransferDetail);
                            if (response.Message != null)
                            {
                                response.Acknowledge = AcknowledgeType.Failure;
                                scope.Dispose();
                                return(response);
                            }

                            #endregion

                            #region Insert OriginalGeneralLedger
                            var originalGeneralLedgerEntity = new OriginalGeneralLedgerEntity
                            {
                                OriginalGeneralLedgerId = Guid.NewGuid().ToString(),
                                RefType           = suTransferEntity.RefType,
                                RefId             = suTransferEntity.RefId,
                                RefDetailId       = suTransferDetail.RefDetailId,
                                RefDate           = suTransferEntity.RefDate,
                                RefNo             = suTransferEntity.RefNo,
                                Amount            = suTransferDetail.Amount,
                                BudgetChapterCode = suTransferDetail.BudgetChapterCode,
                                CreditAccount     = suTransferDetail.CreditAccount,
                                DebitAccount      = suTransferDetail.DebitAccount,
                                Description       = suTransferDetail.Description,
                                JournalMemo       = suTransferEntity.JournalMemo,
                                SortOrder         = suTransferDetail.SortOrder,
                                PostedDate        = suTransferEntity.PostedDate,

                                // Không có Currency trong db : mặc định VNĐ và 1
                                CurrencyCode = "VND",
                                ExchangeRate = 1,
                            };
                            response.Message = OriginalGeneralLedgerDao.InsertOriginalGeneralLedger(originalGeneralLedgerEntity);
                            if (!string.IsNullOrEmpty(response.Message))
                            {
                                response.Acknowledge = AcknowledgeType.Failure;
                                return(response);
                            }

                            #endregion

                            #region Insert SupplyLedger
                            if (suTransferDetail.InventoryItemId != null)
                            {
                                var supplyLedgerEntity = new SupplyLedgerEntity
                                {
                                    SupplyLedgerId    = Guid.NewGuid().ToString(),
                                    RefId             = suTransferEntity.RefId,
                                    RefType           = suTransferEntity.RefType,
                                    RefNo             = suTransferEntity.RefNo,
                                    RefDate           = suTransferEntity.RefDate,
                                    PostedDate        = suTransferEntity.PostedDate,
                                    DepartmentId      = suTransferDetail.FromDepartmentId,
                                    InventoryItemId   = suTransferDetail.InventoryItemId,
                                    Unit              = suTransferDetail.Unit,
                                    UnitPrice         = suTransferDetail.UnitPrice,
                                    IncrementQuantity = 0,
                                    DecrementQuantity = suTransferDetail.Quantity,
                                    IncrementAmount   = 0,
                                    DecrementAmount   = suTransferDetail.Amount,
                                    JournalMemo       = suTransferEntity.JournalMemo,
                                    Description       = suTransferDetail.Description,
                                    AccountNumber     = suTransferDetail.DebitAccount,
                                    RefDetailId       = suTransferDetail.RefDetailId
                                };
                                response.Message = SupplyLedgerDao.InsertSupplyLedger(supplyLedgerEntity);
                                if (!string.IsNullOrEmpty(response.Message))
                                {
                                    response.Acknowledge = AcknowledgeType.Failure;
                                    return(response);
                                }

                                //insert lan 2
                                supplyLedgerEntity.SupplyLedgerId    = Guid.NewGuid().ToString();
                                supplyLedgerEntity.AccountNumber     = suTransferDetail.CreditAccount;
                                supplyLedgerEntity.DepartmentId      = suTransferDetail.ToDepartmentId;
                                supplyLedgerEntity.IncrementQuantity = suTransferDetail.Quantity;
                                supplyLedgerEntity.DecrementQuantity = 0;
                                supplyLedgerEntity.IncrementAmount   = suTransferDetail.Amount;
                                supplyLedgerEntity.DecrementAmount   = 0;

                                response.Message = SupplyLedgerDao.InsertSupplyLedger(supplyLedgerEntity);
                                if (!string.IsNullOrEmpty(response.Message))
                                {
                                    response.Acknowledge = AcknowledgeType.Failure;
                                    return(response);
                                }
                            }
                            #endregion
                        }
                    }

                    #endregion

                    scope.Complete();
                }
                response.RefId = suTransferEntity.RefId;
                return(response);
            }
            catch (Exception ex)
            {
                response.Message = ex.Message;
                return(response);
            }
        }
        /// <summary>
        /// Inserts the ba deposit.
        /// </summary>
        /// <param name="sUIncrementDecrementEntity">The b a deposit entity.</param>
        /// <returns></returns>
        public SUIncrementDecrementResponse InsertSUIncrementDecrement(SUIncrementDecrementEntity sUIncrementDecrementEntity, bool isconvertDB)
        {
            var response = new SUIncrementDecrementResponse {
                Acknowledge = AcknowledgeType.Success
            };

            try
            {
                if (!sUIncrementDecrementEntity.Validate())
                {
                    foreach (var error in sUIncrementDecrementEntity.ValidationErrors)
                    {
                        response.Message += error + Environment.NewLine;
                    }
                    response.Acknowledge = AcknowledgeType.Failure;
                    return(response);
                }
                using (var scope = new TransactionScope())
                {
                    var sUIncrementDecrementByRefNo =
                        SUIncrementDecrementDao.GetSUIncrementDecrementByRefNo(sUIncrementDecrementEntity.RefNo, sUIncrementDecrementEntity.PostedDate);
                    if (sUIncrementDecrementByRefNo != null && sUIncrementDecrementByRefNo.PostedDate.Year == sUIncrementDecrementEntity.PostedDate.Year)
                    {
                        response.Acknowledge = AcknowledgeType.Failure;
                        response.Message     = "Mã chứng từ đã tồn tại!";
                        return(response);
                    }
                    sUIncrementDecrementEntity.RefId = Guid.NewGuid().ToString();
                    response.Message = SUIncrementDecrementDao.InsertSUIncrementDecrement(sUIncrementDecrementEntity);
                    if (!string.IsNullOrEmpty(response.Message))
                    {
                        response.Acknowledge = AcknowledgeType.Failure;
                        return(response);
                    }

                    #region insert SUIncrementDecrementDetails

                    if (sUIncrementDecrementEntity.SUIncrementDecrementDetails != null)
                    {
                        foreach (var sUIncrementDecrementDetailEntity in sUIncrementDecrementEntity.SUIncrementDecrementDetails)
                        {
                            if (!isconvertDB)//AnhNT: Nếu không phải convert dữ liệu thì mới check số lượng tồn
                            {
                                if (sUIncrementDecrementEntity.RefType == (int)BuCA.Enum.RefType.SUDecrement)
                                {
                                    AutoMapper(
                                        GetUnitsInDepartment(sUIncrementDecrementDetailEntity.InventoryItemId,
                                                             sUIncrementDecrementDetailEntity.DepartmentId,
                                                             sUIncrementDecrementDetailEntity.Quantity,
                                                             sUIncrementDecrementDetailEntity.Description), response);
                                    if (response.Acknowledge == AcknowledgeType.Failure)
                                    {
                                        return(response);
                                    }
                                }
                            }

                            sUIncrementDecrementDetailEntity.RefDetailId = Guid.NewGuid().ToString();
                            sUIncrementDecrementDetailEntity.RefId       = sUIncrementDecrementEntity.RefId;
                            response.Message =
                                SUIncrementDecrementDetailDao.InsertSUIncrementDecrementDetail(sUIncrementDecrementDetailEntity);
                            if (!string.IsNullOrEmpty(response.Message))
                            {
                                response.Acknowledge = AcknowledgeType.Failure;
                                return(response);
                            }

                            #region Insert to AccountBalance

                            InsertAccountBalance(sUIncrementDecrementEntity, sUIncrementDecrementDetailEntity);

                            #endregion

                            #region Insert OriginalGeneralLedger
                            var originalGeneralLedgerEntity = new OriginalGeneralLedgerEntity
                            {
                                OriginalGeneralLedgerId = Guid.NewGuid().ToString(),
                                RefType           = sUIncrementDecrementEntity.RefType,
                                RefId             = sUIncrementDecrementEntity.RefId,
                                RefDetailId       = sUIncrementDecrementDetailEntity.RefDetailId,
                                RefDate           = sUIncrementDecrementEntity.RefDate,
                                RefNo             = sUIncrementDecrementEntity.RefNo,
                                Amount            = sUIncrementDecrementDetailEntity.Amount,
                                BudgetChapterCode = sUIncrementDecrementDetailEntity.BudgetChapterCode,
                                CreditAccount     = sUIncrementDecrementDetailEntity.CreditAccount,
                                DebitAccount      = sUIncrementDecrementDetailEntity.DebitAccount,
                                Description       = sUIncrementDecrementDetailEntity.Description,
                                JournalMemo       = sUIncrementDecrementEntity.JournalMemo,
                                SortOrder         = sUIncrementDecrementDetailEntity.SortOrder,
                                PostedDate        = sUIncrementDecrementEntity.PostedDate,

                                // Không có Currency trong db : mặc định VNĐ và 1
                                CurrencyCode = "VND",
                                ExchangeRate = 1,
                            };
                            response.Message = OriginalGeneralLedgerDao.InsertOriginalGeneralLedger(originalGeneralLedgerEntity);
                            if (!string.IsNullOrEmpty(response.Message))
                            {
                                response.Acknowledge = AcknowledgeType.Failure;
                                return(response);
                            }
                            #endregion

                            if (sUIncrementDecrementEntity.RefType == 205 || sUIncrementDecrementEntity.RefType == 206)
                            {
                                #region Insert SupplyLedger
                                if (sUIncrementDecrementDetailEntity.InventoryItemId != null)
                                {
                                    var supplyLedgerEntity = new SupplyLedgerEntity
                                    {
                                        SupplyLedgerId    = Guid.NewGuid().ToString(),
                                        RefId             = sUIncrementDecrementEntity.RefId,
                                        RefType           = sUIncrementDecrementEntity.RefType,
                                        RefNo             = sUIncrementDecrementEntity.RefNo,
                                        RefDate           = sUIncrementDecrementEntity.RefDate,
                                        PostedDate        = sUIncrementDecrementEntity.PostedDate,
                                        DepartmentId      = sUIncrementDecrementDetailEntity.DepartmentId,
                                        InventoryItemId   = sUIncrementDecrementDetailEntity.InventoryItemId,
                                        Unit              = null,
                                        UnitPrice         = sUIncrementDecrementDetailEntity.UnitPrice,
                                        IncrementQuantity = sUIncrementDecrementEntity.RefType == 205 ? sUIncrementDecrementDetailEntity.Quantity : 0,
                                        DecrementQuantity = sUIncrementDecrementEntity.RefType == 205 ? 0 : sUIncrementDecrementDetailEntity.Quantity,
                                        IncrementAmount   = sUIncrementDecrementEntity.RefType == 205 ? sUIncrementDecrementDetailEntity.Amount : 0,
                                        DecrementAmount   = sUIncrementDecrementEntity.RefType == 205 ? 0 : sUIncrementDecrementDetailEntity.Amount,
                                        JournalMemo       = sUIncrementDecrementEntity.JournalMemo,
                                        Description       = sUIncrementDecrementDetailEntity.Description,
                                        AccountNumber     = sUIncrementDecrementDetailEntity.DebitAccount,
                                        RefDetailId       = sUIncrementDecrementDetailEntity.RefDetailId
                                    };
                                    response.Message = SupplyLedgerDao.InsertSupplyLedger(supplyLedgerEntity);
                                    if (!string.IsNullOrEmpty(response.Message))
                                    {
                                        response.Acknowledge = AcknowledgeType.Failure;
                                        return(response);
                                    }
                                }
                                #endregion
                            }
                        }
                    }

                    #endregion

                    scope.Complete();
                }
                response.RefId = sUIncrementDecrementEntity.RefId;
                return(response);
            }
            catch (Exception ex)
            {
                response.Message = ex.Message;
                return(response);
            }
        }