コード例 #1
0
ファイル: BLMovimiento.cs プロジェクト: ferarell/DelfinGroup
        public Boolean Save(ref Movimiento Item)
        {
            try
            {
                Boolean m_isCorrect = true;
                DataAccessEnterpriseSQL.DABeginTransaction();
                String    x_Usuario = "";
                GAsientos genAsientos;
                #region [ Cabecera de Movimiento ]
                genAsientos = new GAsientos(GAsientos.TipoAsiento.AsientoCaja);

                switch (Item.Instance)
                {
                case Infrastructure.Aspect.BusinessEntity.InstanceEntity.Added:
                    m_isCorrect = Insert(ref Item);
                    if (Item.ListDetCtaCte != null)
                    {
                        foreach (Entities.DetCtaCte item in Item.ListDetCtaCte)
                        {
                            item.CCCT_Pendiente = Math.Abs(item.CCCT_Pendiente.Value);
                            item.Instance       = InstanceEntity.Added;
                        }
                    }
                    Item.ItemCtaCteDescuadre               = new CtaCte();
                    Item.ItemCtaCteDescuadre.Instance      = InstanceEntity.Added;
                    Item.ItemCtaCteDescuadre.AUDI_UsrCrea  = Item.AUDI_UsrCrea;
                    Item.ItemCtaCteDescuadre.ItemDetCtaCte = new DetCtaCte();
                    Item.ItemCtaCteDescuadre.ItemDetCtaCte.AUDI_UsrCrea = Item.AUDI_UsrCrea;
                    Item.ItemCtaCteDescuadre.CCCT_FechaEmision          = Item.MOVI_FecEmision;
                    x_Usuario = Item.AUDI_UsrCrea;

                    if (Item.ListFlujos != null && Item.ListFlujos.Count > 0)
                    {
                        foreach (Entities.MovimientoFlujo _movimientoFlujo in Item.ListFlujos)
                        {
                            MovimientoFlujo movimientoFlujo = _movimientoFlujo;
                            movimientoFlujo.EMPR_Codigo  = Item.EMPR_Codigo;
                            movimientoFlujo.AUDI_UsrCrea = Item.AUDI_UsrCrea;
                            movimientoFlujo.MOVI_Codigo  = Item.MOVI_Codigo;
                            //iMovimientoFlujo.CUBA_Codigo = Item.CUBA_Codigo;
                            _movimientoFlujo.Instance = InstanceEntity.Added;
                            m_isCorrect = BL_MovimientoFlujo.Save(ref movimientoFlujo);
                            if (!m_isCorrect)
                            { //Item.SetMensajeError(String.Format("* No se puede grabar la Chequera Numero {0}.", iMovimientoFlujo.MFLU_Item)); break;
                            }
                        }
                    }

                    if (Item.ListTipificaciones != null && Item.ListTipificaciones.Count > 0)
                    {
                        foreach (Entities.Tipificaciones iTipificacion in Item.ListTipificaciones)
                        {
                            Tipificaciones _tipificacion = iTipificacion;
                            _tipificacion.EMPR_Codigo  = Item.EMPR_Codigo;
                            _tipificacion.MOVI_Codigo  = Item.MOVI_Codigo;
                            _tipificacion.AUDI_UsrCrea = Item.AUDI_UsrCrea;
                            _tipificacion.Instance     = InstanceEntity.Added;
                            m_isCorrect = BL_Tipificaciones.Save(ref _tipificacion);
                        }
                    }
                    break;

                case Infrastructure.Aspect.BusinessEntity.InstanceEntity.Modified:
                    m_isCorrect = Update(ref Item);
                    foreach (Entities.DetCtaCte item in Item.ListDetCtaCte)
                    {
                        item.CCCT_Pendiente = Math.Abs(item.CCCT_Pendiente.Value);
                    }
                    if (Item.ItemCtaCteDescuadre == null)
                    {
                        Item.ItemCtaCteDescuadre          = new CtaCte();
                        Item.ItemCtaCteDescuadre.Instance = InstanceEntity.Added;
                    }
                    Item.ItemCtaCteDescuadre.AUDI_UsrMod = Item.AUDI_UsrMod;
                    x_Usuario = Item.AUDI_UsrMod;

                    #region [ Flujos ]

                    /* Eliminar los registros */
                    if (Item.ListFlujosEliminados != null && Item.ListFlujosEliminados.Count > 0)
                    {
                        foreach (Entities.MovimientoFlujo iMovimientoFlujo in Item.ListFlujosEliminados)
                        {
                            MovimientoFlujo MovimientoFlujo = iMovimientoFlujo;
                            MovimientoFlujo.Instance = InstanceEntity.Deleted;
                            BL_MovimientoFlujo.Save(ref MovimientoFlujo);
                        }
                    }
                    /* Agregar o actualizar los registros */
                    if (Item.ListFlujos != null && Item.ListFlujos.Count > 0)
                    {
                        foreach (Entities.MovimientoFlujo iMovimientoFlujo in Item.ListFlujos)
                        {
                            MovimientoFlujo MovimientoFlujo = iMovimientoFlujo;
                            MovimientoFlujo.EMPR_Codigo = Item.EMPR_Codigo;
                            if (MovimientoFlujo.Instance == InstanceEntity.Added)
                            {
                                MovimientoFlujo.AUDI_UsrCrea = Item.AUDI_UsrCrea;
                            }
                            else if (MovimientoFlujo.Instance == InstanceEntity.Modified)
                            {
                                MovimientoFlujo.AUDI_UsrMod = Item.AUDI_UsrMod;
                            }
                            MovimientoFlujo.MOVI_Codigo = Item.MOVI_Codigo;
                            m_isCorrect = BL_MovimientoFlujo.Save(ref MovimientoFlujo);
                            if (!m_isCorrect)
                            {// Item.SetMensajeError(String.Format("* No se puede grabar la Chequera Numero {0}.", _iChequera.CHEQ_Codigo)); break;
                            }
                        }
                    }

                    #endregion

                    #region [ Tipificaciones ]

                    if (Item.ListTipificacionesEliminados != null && Item.ListTipificacionesEliminados.Count > 0)
                    {
                        foreach (Entities.Tipificaciones iTipEli in Item.ListTipificacionesEliminados)
                        {
                            Tipificaciones _tipificacion = iTipEli;
                            _tipificacion.Instance = InstanceEntity.Deleted;
                            BL_Tipificaciones.Save(ref _tipificacion);
                        }
                    }

                    if (Item.ListTipificaciones != null && Item.ListTipificaciones.Count > 0)
                    {
                        foreach (Entities.Tipificaciones iTipificacion in Item.ListTipificaciones)
                        {
                            Tipificaciones _tipificacion = iTipificacion;
                            _tipificacion.EMPR_Codigo = Item.EMPR_Codigo;
                            if (_tipificacion.Instance == InstanceEntity.Added)
                            {
                                _tipificacion.AUDI_UsrCrea = Item.AUDI_UsrMod;
                            }
                            else if (_tipificacion.Instance == InstanceEntity.Modified)
                            {
                                _tipificacion.AUDI_UsrMod = Item.AUDI_UsrMod;
                            }
                            _tipificacion.MOVI_Codigo = Item.MOVI_Codigo;
                            m_isCorrect = BL_Tipificaciones.Save(ref _tipificacion);
                        }
                    }

                    #endregion


                    break;

                case Infrastructure.Aspect.BusinessEntity.InstanceEntity.Deleted:
                    m_isCorrect = Delete(ref Item); break;
                }

                #endregion

                #region Detalles de CtaCte

                if (Item.ListDetCtaCteEliminados != null && Item.ListDetCtaCteEliminados.Count > 0)
                {
                    foreach (Entities.DetCtaCte iDetCtaCte in Item.ListDetCtaCteEliminados)
                    {
                        Entities.DetCtaCte _idetctacte = iDetCtaCte;
                        _idetctacte.Instance = InstanceEntity.Deleted;
                        BL_DetCtaCte.Save(ref _idetctacte);
                    }
                }
                if (Item.ListDetCtaCte != null && Item.ListDetCtaCte.Count > 0)
                {
                    foreach (Entities.DetCtaCte iDetCtaCte in Item.ListDetCtaCte)
                    {
                        switch (iDetCtaCte.Instance)
                        {
                        case InstanceEntity.Unchanged:
                            break;

                        case InstanceEntity.Added:
                            iDetCtaCte.AUDI_UsrCrea = x_Usuario;
                            break;

                        case InstanceEntity.Modified:
                            iDetCtaCte.AUDI_UsrMod = x_Usuario;
                            break;

                        case InstanceEntity.Deleted:
                            break;

                        default:
                            break;
                        }
                        #region Guardar el detalle de Transacciones

                        iDetCtaCte.EMPR_Codigo     = Item.EMPR_Codigo;
                        iDetCtaCte.MOVI_Codigo     = Item.MOVI_Codigo;
                        iDetCtaCte.TIPO_TabMND     = Item.ItemCuentasBancarias.TIPO_TabMND;
                        iDetCtaCte.TIPO_CodMND     = Item.ItemCuentasBancarias.TIPO_CodMND;
                        iDetCtaCte.CCCT_TipoCambio = Item.MOVI_TipoCambio;
                        iDetCtaCte.DCCT_FechaTrans = DateTime.Now;
                        String TipoMovimiento = Item.TIPO_Movimiento.TIPO_Desc2;
                        if (Item.TIPO_Movimiento.TIPO_Desc2.Equals("I"))
                        {
                            if (iDetCtaCte.TipoCtaCte.Equals("-"))
                            {
                                if (iDetCtaCte.TIPO_CodTDO.Equals(Entities.Tipos.GetTipo(Entities.Tipos.TipoTDO.NotaCredito)))
                                {
                                    Item.TIPO_Movimiento.TIPO_Desc2 = "E";
                                }
                                else
                                {
                                    Item.TIPO_Movimiento.TIPO_Desc2 = "E";
                                }
                            }
                        }
                        else if (Item.TIPO_Movimiento.TIPO_Desc2.Equals("E"))
                        {
                            if (iDetCtaCte.TipoCtaCte.Equals("-"))
                            {
                                if (iDetCtaCte.TIPO_CodTDO.Equals(Entities.Tipos.GetTipo(Entities.Tipos.TipoTDO.NotaCredito)))
                                {
                                    Item.TIPO_Movimiento.TIPO_Desc2 = "I";
                                }
                                else
                                {
                                    Item.TIPO_Movimiento.TIPO_Desc2 = "I";
                                }
                            }
                        }

                        Decimal TipoCambio = iDetCtaCte.DCCT_TipoCambio;
                        if (Item.TIPO_Movimiento.TIPO_Desc2.Equals("E"))
                        {
                            #region Movimiento de Egreso

                            /*
                             * Realizar las operaciones correspondientes para un Egreso
                             */
                            iDetCtaCte.DCCT_MontoHaber  = 0;
                            iDetCtaCte.DCCT_MontoHaberD = 0;
                            iDetCtaCte.CONS_TabTDC      = Infrastructure.Aspect.Constants.Util.GetTTipoMovimientoDetCtaCte();
                            iDetCtaCte.CONS_CodTDC      = Infrastructure.Aspect.Constants.Util.GetTTipoMovimientoDetCtaCte(Infrastructure.Aspect.Constants.TTipoMovimientoDetCtaCte.Pago);

                            /*
                             * Verificar la Moneda de la Cuenta Bancaria
                             */
                            if (Item.ItemCuentasBancarias.TIPO_CodMND.Equals(Infrastructure.Aspect.Constants.Util.getMoneda(TMoneda.Soles)))
                            {
                                /*
                                 * Si la Moneda de la cuenta bancaria es S/. (Nuevos Soles)
                                 * - Vericar la moneda del documento para realizar la conversión para los campos correspondientes
                                 */
                                if (iDetCtaCte.TIPO_CodMND.Equals(Util.getMoneda(TMoneda.Soles)))
                                {
                                    #region Realizar ajustes si es Diferido - DEBE
                                    /* Cambio - Cheques Diferidos - 02/05/2016 - Por Proceso Incompleto - El diferido debe grabarse igual que un cheque normal */
                                    if (Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.EgresosChequeDiferido)) || Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.IngresosDiferidos)))
                                    {
                                        iDetCtaCte.DCCT_PPago = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                        //iDetCtaCte.DCCT_MontoDebe = 0;
                                        iDetCtaCte.DCCT_PPagoD = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        //iDetCtaCte.DCCT_MontoDebeD = 0;
                                    }
                                    else
                                    {
                                        iDetCtaCte.DCCT_PPago = 0;
                                        //iDetCtaCte.DCCT_MontoDebe = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                        iDetCtaCte.DCCT_PPagoD = 0;
                                        //iDetCtaCte.DCCT_MontoDebeD = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                    }

                                    iDetCtaCte.DCCT_MontoDebe  = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                    iDetCtaCte.DCCT_MontoDebeD = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                    /* Fin de Cambio - Cheques Diferidos - 02/05/2016 */
                                    #endregion
                                }
                                else if (iDetCtaCte.TIPO_CodMND.Equals(Util.getMoneda(TMoneda.Dolares)))
                                {
                                    #region Realizar ajustes si es Diferido - DEBE
                                    /* Cambio - Cheques Diferidos - 02/05/2016 - Por Proceso Incompleto - El diferido debe grabarse igual que un cheque normal */
                                    if (Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.EgresosChequeDiferido)) || Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.IngresosDiferidos)))
                                    {
                                        iDetCtaCte.DCCT_PPago = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        //iDetCtaCte.DCCT_MontoDebe = 0;
                                        iDetCtaCte.DCCT_PPagoD = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                        //iDetCtaCte.DCCT_MontoDebeD = 0;
                                    }
                                    else
                                    {
                                        iDetCtaCte.DCCT_PPago = 0;
                                        //iDetCtaCte.DCCT_MontoDebe = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        iDetCtaCte.DCCT_PPagoD = 0;
                                        //iDetCtaCte.DCCT_MontoDebeD = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                    }
                                    iDetCtaCte.DCCT_MontoDebe  = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                    iDetCtaCte.DCCT_MontoDebeD = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                    /* Fin de Cambio - Cheques Diferidos - 02/05/2016 */
                                    #endregion
                                }
                            }
                            else if (Item.ItemCuentasBancarias.TIPO_CodMND.Equals(Infrastructure.Aspect.Constants.Util.getMoneda(TMoneda.Dolares)))
                            {
                                /*
                                 * Si la Moneda de la cuenta Bancaria es en US$ (Dolares Americanos)
                                 * - Vericar la moneda del documento para realizar la conversión para los campos correspondientes
                                 */
                                if (iDetCtaCte.TIPO_CodMND.Equals(Util.getMoneda(TMoneda.Soles)))
                                {
                                    #region Realizar ajustes si es Diferido - DEBE
                                    /* Cambio - Cheques Diferidos - 02/05/2016 - Por Proceso Incompleto - El diferido debe grabarse igual que un cheque normal */
                                    if (Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.EgresosChequeDiferido)) || Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.IngresosDiferidos)))
                                    {
                                        iDetCtaCte.DCCT_PPago = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                        //iDetCtaCte.DCCT_MontoDebe = 0;
                                        if (iDetCtaCte.CCCT_Pendiente.HasValue)
                                        {
                                            iDetCtaCte.DCCT_PPagoD = Math.Round(iDetCtaCte.CCCT_Pendiente.Value / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                            //iDetCtaCte.DCCT_MontoDebeD = 0;
                                        }
                                    }
                                    else
                                    {
                                        iDetCtaCte.DCCT_PPago = 0;
                                        //iDetCtaCte.DCCT_MontoDebe = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                        if (iDetCtaCte.CCCT_Pendiente.HasValue)
                                        {
                                            iDetCtaCte.DCCT_PPagoD = 0;
                                            //iDetCtaCte.DCCT_MontoDebeD = Math.Round(iDetCtaCte.CCCT_Pendiente.Value / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        }
                                    }
                                    iDetCtaCte.DCCT_MontoDebe = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                    if (iDetCtaCte.CCCT_Pendiente.HasValue)
                                    {
                                        iDetCtaCte.DCCT_MontoDebeD = Math.Round(iDetCtaCte.CCCT_Pendiente.Value / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                    }
                                    /* Fin de Cambio - Cheques Diferidos - 02/05/2016 */
                                    #endregion
                                }
                                else if (iDetCtaCte.TIPO_CodMND.Equals(Util.getMoneda(TMoneda.Dolares)))
                                {
                                    #region Realizar ajustes si es Diferido - DEBE
                                    /* Cambio - Cheques Diferidos - 02/05/2016 - Por Proceso Incompleto - El diferido debe grabarse igual que un cheque normal */
                                    if (Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.EgresosChequeDiferido)) || Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.IngresosDiferidos)))
                                    {
                                        iDetCtaCte.DCCT_PPago = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        //iDetCtaCte.DCCT_MontoDebe = 0;
                                        iDetCtaCte.DCCT_PPagoD = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                        //iDetCtaCte.DCCT_MontoDebeD = 0;
                                    }
                                    else
                                    {
                                        iDetCtaCte.DCCT_PPago = 0;
                                        //iDetCtaCte.DCCT_MontoDebe = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        iDetCtaCte.DCCT_PPagoD = 0;
                                        //iDetCtaCte.DCCT_MontoDebeD = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                    }
                                    iDetCtaCte.DCCT_MontoDebe  = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                    iDetCtaCte.DCCT_MontoDebeD = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                    /* Fin de Cambio - Cheques Diferidos - 02/05/2016 */
                                    #endregion
                                }
                            }
                            #endregion
                        }
                        else if (Item.TIPO_Movimiento.TIPO_Desc2.Equals("I"))
                        {
                            #region Movimiento de Ingreso

                            /*
                             * Realizar las operaciones correspondientes para un Ingreso
                             */
                            iDetCtaCte.DCCT_MontoDebe  = 0;
                            iDetCtaCte.DCCT_MontoDebeD = 0;
                            iDetCtaCte.CONS_TabTDC     = Infrastructure.Aspect.Constants.Util.GetTTipoMovimientoDetCtaCte();
                            iDetCtaCte.CONS_CodTDC     = Infrastructure.Aspect.Constants.Util.GetTTipoMovimientoDetCtaCte(Infrastructure.Aspect.Constants.TTipoMovimientoDetCtaCte.Provision);

                            /*
                             * Verificar la Moneda de la Cuenta Bancaria
                             */
                            if (Item.ItemCuentasBancarias.TIPO_CodMND.Equals(Infrastructure.Aspect.Constants.Util.getMoneda(TMoneda.Soles)))
                            {
                                /*
                                 * Si la Moneda de la cuenta bancaria es S/. (Nuevos Soles)
                                 * - Vericar la moneda del documento para realizar la conversión para los campos correspondientes
                                 */
                                if (iDetCtaCte.TIPO_CodMND.Equals(Util.getMoneda(TMoneda.Soles)))
                                {
                                    TipoCambio = iDetCtaCte.DCCT_TipoCambio;

                                    #region Realizar ajustes si es Diferido - HABER
                                    /* Cambio - Cheques Diferidos - 02/05/2016 - Por Proceso Incompleto */
                                    if (Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.IngresosDiferidos)) || Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.EgresosChequeDiferido)))
                                    {
                                        iDetCtaCte.DCCT_PPago = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                        //iDetCtaCte.DCCT_MontoHaber = 0;
                                    }
                                    else
                                    {
                                        iDetCtaCte.DCCT_PPago = 0;
                                        //iDetCtaCte.DCCT_MontoHaber = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                    }
                                    iDetCtaCte.DCCT_MontoHaber = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                    /* Fin de Cambio - Cheques Diferidos - 02/05/2016 */
                                    #endregion

                                    if (iDetCtaCte.CCCT_Pendiente.HasValue)
                                    {
                                        #region Realizar ajustes si es Diferido - HABER
                                        /* Cambio - Cheques Diferidos - 02/05/2016 - Por Proceso Incompleto - El diferido debe grabarse igual que un cheque normal */
                                        if (Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.IngresosDiferidos)) || Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.EgresosChequeDiferido)))
                                        {
                                            iDetCtaCte.DCCT_PPagoD = Math.Round(iDetCtaCte.CCCT_Pendiente.Value / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                            //iDetCtaCte.DCCT_MontoHaberD = 0;
                                        }
                                        else
                                        {
                                            iDetCtaCte.DCCT_PPagoD = 0;
                                            //iDetCtaCte.DCCT_MontoHaberD = Math.Round(iDetCtaCte.CCCT_Pendiente.Value / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        }
                                        iDetCtaCte.DCCT_MontoHaberD = Math.Round(iDetCtaCte.CCCT_Pendiente.Value / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        /* Fin de Cambio - Cheques Diferidos - 02/05/2016 */
                                        #endregion
                                    }
                                }
                                else if (iDetCtaCte.TIPO_CodMND.Equals(Util.getMoneda(TMoneda.Dolares)))
                                {
                                    TipoCambio = iDetCtaCte.DCCT_TipoCambio;
                                    #region Realizar ajustes si es Diferido - HABER
                                    /* Cambio - Cheques Diferidos - 02/05/2016 - Por Proceso Incompleto - El diferido debe grabarse igual que un cheque normal */
                                    if (Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.IngresosDiferidos)) || Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.EgresosChequeDiferido)))
                                    {
                                        //iDetCtaCte.DCCT_MontoHaber = 0;
                                        //iDetCtaCte.DCCT_MontoHaberD = 0;
                                        iDetCtaCte.DCCT_PPago  = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        iDetCtaCte.DCCT_PPagoD = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                    }
                                    else
                                    {
                                        //iDetCtaCte.DCCT_MontoHaber = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        //iDetCtaCte.DCCT_MontoHaberD = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                        iDetCtaCte.DCCT_PPago  = 0;
                                        iDetCtaCte.DCCT_PPagoD = 0;
                                    }
                                    iDetCtaCte.DCCT_MontoHaber  = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                    iDetCtaCte.DCCT_MontoHaberD = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                    /* Fin de Cambio - Cheques Diferidos - 02/05/2016 */
                                    #endregion
                                }
                            }
                            else if (Item.ItemCuentasBancarias.TIPO_CodMND.Equals(Infrastructure.Aspect.Constants.Util.getMoneda(TMoneda.Dolares)))
                            {
                                /*
                                 * Si la Moneda de la cuenta Bancaria es en US$ (Dolares Americanos)
                                 * - Vericar la moneda del documento para realizar la conversión para los campos correspondientes
                                 */
                                if (iDetCtaCte.TIPO_CodMND.Equals(Util.getMoneda(TMoneda.Soles)))
                                {
                                    TipoCambio = iDetCtaCte.DCCT_TipoCambio;
                                    #region Realizar ajustes si es Diferido - HABER
                                    /* Cambio - Cheques Diferidos - 02/05/2016 - Por Proceso Incompleto - El diferido debe grabarse igual que un cheque normal */
                                    if (Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.IngresosDiferidos)) || Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.EgresosChequeDiferido)))
                                    {
                                        iDetCtaCte.DCCT_PPago = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                        //iDetCtaCte.DCCT_MontoHaber = 0;
                                        if (iDetCtaCte.CCCT_Pendiente.HasValue)
                                        {
                                            iDetCtaCte.DCCT_PPagoD = Math.Round(iDetCtaCte.CCCT_Pendiente.Value / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                            //iDetCtaCte.DCCT_MontoHaberD = 0;
                                        }
                                    }
                                    else
                                    {
                                        iDetCtaCte.DCCT_PPago = 0;
                                        //iDetCtaCte.DCCT_MontoHaber = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                        if (iDetCtaCte.CCCT_Pendiente.HasValue)
                                        {
                                            iDetCtaCte.DCCT_PPagoD = 0;
                                            //iDetCtaCte.DCCT_MontoHaberD = Math.Round(iDetCtaCte.CCCT_Pendiente.Value / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        }
                                    }
                                    iDetCtaCte.DCCT_MontoHaber = (iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0);
                                    if (iDetCtaCte.CCCT_Pendiente.HasValue)
                                    {
                                        iDetCtaCte.DCCT_MontoHaberD = Math.Round(iDetCtaCte.CCCT_Pendiente.Value / TipoCambio, 2, MidpointRounding.AwayFromZero);
                                    }
                                    /* Fin de Cambio - Cheques Diferidos - 02/05/2016 */
                                    #endregion
                                }
                                else if (iDetCtaCte.TIPO_CodMND.Equals(Util.getMoneda(TMoneda.Dolares)))
                                {
                                    TipoCambio = iDetCtaCte.DCCT_TipoCambio;
                                    #region Realizar ajustes si es Diferido - HABER
                                    /* Cambio - Cheques Diferidos - 02/05/2016 - Por Proceso Incompleto - El diferido debe grabarse igual que un cheque normal */
                                    if (Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.IngresosDiferidos)) || Item.TIPO_CodMOV.Equals(Item.GetTipoMovimiento(Entities.Movimiento.TipoMovimiento.EgresosChequeDiferido)))
                                    {
                                        iDetCtaCte.DCCT_PPago = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        //iDetCtaCte.DCCT_MontoHaber = 0;
                                        if (iDetCtaCte.CCCT_Pendiente.HasValue)
                                        {
                                            iDetCtaCte.DCCT_PPagoD = iDetCtaCte.CCCT_Pendiente.Value;
                                            //iDetCtaCte.DCCT_MontoHaberD = 0;
                                        }
                                    }
                                    else
                                    {
                                        iDetCtaCte.DCCT_PPago = 0;
                                        //iDetCtaCte.DCCT_MontoHaber = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                        if (iDetCtaCte.CCCT_Pendiente.HasValue)
                                        {
                                            iDetCtaCte.DCCT_PPagoD = 0;
                                            //iDetCtaCte.DCCT_MontoHaberD = iDetCtaCte.CCCT_Pendiente.Value;
                                        }
                                    }
                                    iDetCtaCte.DCCT_MontoHaber = Math.Round((iDetCtaCte.CCCT_Pendiente.HasValue ? iDetCtaCte.CCCT_Pendiente.Value : 0) * TipoCambio, 2, MidpointRounding.AwayFromZero);
                                    if (iDetCtaCte.CCCT_Pendiente.HasValue)
                                    {
                                        iDetCtaCte.DCCT_MontoHaberD = iDetCtaCte.CCCT_Pendiente.Value;
                                    }
                                    /* Fin de Cambio - Cheques Diferidos - 02/05/2016 */
                                    #endregion
                                }
                            }
                            #endregion
                        }

                        /*
                         * Realizar la Operación de Grabado en la Base de datosm según la Instancia de la Clase
                         */
                        Entities.DetCtaCte _idetctacte = iDetCtaCte;
                        BL_DetCtaCte.Save(ref _idetctacte);
                        Item.TIPO_Movimiento.TIPO_Desc2 = TipoMovimiento;
                        #endregion
                    }
                    #region Liquidacion - Terminar

                    if (Item.EsLiquidacion)
                    {
                        Entities.Liquidacion _itemLiquidacion = new Liquidacion();
                        _itemLiquidacion.EMPR_Codigo = Item.EMPR_Codigo;
                        _itemLiquidacion.LIQU_Codigo = Item.Liquidacion.LIQU_Codigo;
                        _itemLiquidacion.AUDI_UsrMod = x_Usuario;
                        _itemLiquidacion.SetEstado(Liquidacion.Estado.Liquidado);
                        m_isCorrect = BL_Liquidacion.Save(ref _itemLiquidacion, Liquidacion.TOperacion.Liquidar);
                    }

                    #endregion
                }

                #region Guardar Si existe un Descuadre

                m_isCorrect = GuardarDescuadre(ref Item, x_Usuario);

                #endregion

                #endregion

                #region Grabar Flujos

                #endregion

                #region [ Generar Asiento Contable ]

                if (m_isCorrect)
                {
                    genAsientos.ItemMovimiento = Item;
                    switch (Item.Instance)
                    {
                    case InstanceEntity.Unchanged:
                        break;

                    case InstanceEntity.Added:
                        genAsientos.GenerarAsientoBD(x_Usuario);
                        //m_isCorrect = genAsientos.GenerarAsiento(x_Usuario, Item.SUCR_Codigo);
                        //if (m_isCorrect)
                        //{ genAsientos.ActualizarMovimiento(x_Usuario); }
                        break;

                    case InstanceEntity.Modified:
                        genAsientos.GenerarAsientoBD(x_Usuario);
                        //m_isCorrect = genAsientos.ActualizarAsiento(Item.AUDI_UsrMod, Item.SUCR_Codigo);
                        break;

                    case InstanceEntity.Deleted:
                        break;

                    default:
                        break;
                    }
                }

                #endregion

                if (m_isCorrect)
                {
                    DataAccessEnterpriseSQL.DACommitTransaction();
                }
                else
                {
                    DataAccessEnterpriseSQL.DARollbackTransaction();
                }
                return(m_isCorrect);
            }
            catch (Exception)
            {
                DataAccessEnterpriseSQL.DARollbackTransaction();
                throw;
            }
        }