Пример #1
0
        //This is used for make separate copy of object (without reference)
        public static ReturnToVendorItemsModel rtvClone(ReturnToVendorItemsModel obj)
        {
            ReturnToVendorItemsModel new_obj = new ReturnToVendorItemsModel();

            foreach (PropertyInfo pi in obj.GetType().GetProperties())
            {
                if (pi.CanRead && pi.CanWrite && pi.PropertyType.IsSerializable)
                {
                    pi.SetValue(new_obj, pi.GetValue(obj, null), null);
                }
            }
            return(new_obj);
        }
Пример #2
0
        //This is complete transaction for ReturnToVendorTransaction
        //1. Add ReturnToVendorItems
        //2. Add StockTransaction
        //3. Update StockUpdate (AvailableQuantity)
        public static Boolean ReturnToVendorTransaction(List <ReturnToVendorItemsModel> retrnToVendorItemsFromClient, InventoryDbContext inventoryDbContext)
        {
            //Transaction Begin
            //We first Need to make Stock, Stock_Transaction Object with WriteOff data (which has client data)
            using (var dbContextTransaction = inventoryDbContext.Database.BeginTransaction())
            {
                try
                {
                    //This is updated list of stock records after write off items
                    List <StockModel> stockListForUpdate = new List <StockModel>();
                    //This is transaction list of write off items
                    List <StockTransactionModel> stockTxnListForInsert = new List <StockTransactionModel>();
                    //This is WriteOff List for insert into writeOff table
                    List <ReturnToVendorItemsModel> retrnToVndrListForInsert = new List <ReturnToVendorItemsModel>();

                    //Stock data
                    foreach (var rtvItm in retrnToVendorItemsFromClient)
                    {
                        StockModel curStock = new StockModel();

                        curStock = GetStockbyStockId(rtvItm.StockId, inventoryDbContext);
                        //curStock.StockId = rtvItm.StockId;
                        curStock.AvailableQuantity = curStock.AvailableQuantity - rtvItm.Quantity;

                        stockListForUpdate.Add(curStock);
                    }

                    //ReturnToVendorItems data
                    foreach (var retItm in retrnToVendorItemsFromClient)
                    {
                        ReturnToVendorItemsModel retVendor = new ReturnToVendorItemsModel();

                        retVendor = rtvClone(retItm);

                        retrnToVndrListForInsert.Add(retVendor);
                    }

                    //Save ReturnToVendorItems in database
                    AddretrnToVndrItems(inventoryDbContext, retrnToVndrListForInsert);

                    //stocktxn data
                    foreach (var rtvItem in retrnToVndrListForInsert)
                    {
                        StockTransactionModel stkTxnItem = new StockTransactionModel();

                        stkTxnItem.StockId         = rtvItem.StockId;
                        stkTxnItem.Quantity        = (int)rtvItem.Quantity;
                        stkTxnItem.InOut           = "out";
                        stkTxnItem.ReferenceNo     = rtvItem.ReturnToVendorItemId;
                        stkTxnItem.CreatedBy       = rtvItem.CreatedBy;
                        stkTxnItem.TransactionType = "returntovendor";

                        stockTxnListForInsert.Add(stkTxnItem);
                    }

                    //Save Stock Transaction record
                    AddStockTransaction(inventoryDbContext, stockTxnListForInsert);
                    //Update Stock records
                    UpdateStockAvailQty(inventoryDbContext, stockListForUpdate);
                    //Commit Transaction
                    dbContextTransaction.Commit();
                    return(true);
                }
                catch (Exception ex)
                {
                    //Rollback all transaction if exception occured  i.e. WriteOff Insertion, Stock_Transaction Insertion, Stock Updation
                    dbContextTransaction.Rollback();
                    throw ex;
                }
            }
        }