Пример #1
0
        //-----------------------------------
        //Genera Cargo Solicitud Colegiado
        //-----------------------------------
        public bool Ins_GenerarCargoSolicitud(string CodEmpresa, long TipoPrograma, long TipoSolicitud, string cPerCodigo, int nPeriodo, DateTime dFechaSys, string NroSolicitud)
        {
            bool exito = false;

            string NroRecibo = "";
            long   nLinea    = 0;
            //double nImporte = 0;

            //para Tipo de cambio
            double     nTC  = 0;
            BL_Sistema daTC = new BL_Sistema();

            //para CtaCteItem
            BL_CtaCteItem            blCCItem      = new BL_CtaCteItem();
            BL_CtaCteIteLine         blCCItemLine  = new BL_CtaCteIteLine();
            BL_CtaCteIteLinRetencion blCCRetencion = new BL_CtaCteIteLinRetencion();
            BL_ImpuestoServicio      blImpServ     = new BL_ImpuestoServicio();

            //para Obtener Serv. Configurado
            BE_ReqCtaCteSysConfigParamterServicio ReqServConfig = new BE_ReqCtaCteSysConfigParamterServicio();
            BL_CtaCteSysConfigParamterServicio    daServConfig  = new BL_CtaCteSysConfigParamterServicio();

            //actuliza solicitud con el recibo de cargo
            BL_Solicitud DaSolAdm = new BL_Solicitud();

            //----------------------
            //CommittableTransaction
            //----------------------
            Transaction            oldAmbient = Transaction.Current;
            CommittableTransaction committableTransaction;

            committableTransaction = oldAmbient as CommittableTransaction;

            if (committableTransaction == null)
            {
                committableTransaction = new CommittableTransaction();
                Transaction.Current    = committableTransaction;
            }

            try
            {
                //using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Required))
                //{
                //
                ReqServConfig.cPerJurCodigo         = CodEmpresa;
                ReqServConfig.nSisModulo            = 7001;          //default aun falta definir interface
                ReqServConfig.nParCodigo_nProCodigo = TipoSolicitud; //CLng(CboPrograma.SelectedValue)
                ReqServConfig.cFLag = "FEC";

                if (daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows.Count > 0)
                {
                    DataRow row = daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows[0];
                    //--------------
                    //Tipo de cambio
                    //--------------
                    if (Convert.ToInt32(row["nMonCodigo"]) == 2) //Dolar
                    {
                        if (daTC.Get_TipodeCambio(Convert.ToInt32(row["nMonCodigo"]), "TCD", String.Format("{0:dd/MM/yyyy}", dFechaSys), 0, 0).Rows.Count > 0)
                        {
                            //DataRow row = daTC.Get_TipodeCambio(ReqTC).Rows[0];
                            nTC = Convert.ToDouble(daTC.Get_TipodeCambio(Convert.ToInt32(row["nMonCodigo"]), "TCD", String.Format("{0:dd/MM/yyyy}", dFechaSys), 0, 0).Rows[0]["nCompra"]);
                        }
                        else
                        {
                            throw new ApplicationException("No se ha registrado el Tipo de Cambio del dia: " + String.Format("{0:ddd, MMM d, yyyy}", dFechaSys));
                        }
                    }
                    else
                    {
                        nTC = 1.0;
                    }

                    //----------
                    //CtaCteItem
                    //----------
                    //se comente esto porque la Actualizacion 28/01/2014 no se necesita esta variable
                    //foreach (DataRow fila in daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows)
                    //{
                    //    //Obteniendo el total del importe de recibo (cabezera)
                    //    nImporte = nImporte + Convert.ToDouble(fila["nSysValor"]);
                    //}

                    //Actualizacion 28/01/2014:
                    //porque necesitan que cada concepto salga en diferente recibo
                    //NroRecibo = blCCItem.Ins_CtaCteItem(CodEmpresa, cPerCodigo, nPeriodo, row["nCtaCteTipoCta"].ToString(), dFechaSys.Year, nImporte, dFechaSys, 1);

                    //--------------
                    //CtaCteIteLine
                    //--------------
                    //Recorro SysConfParametrosServ
                    foreach (DataRow fila in daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows)
                    {
                        //aqui se cambio Actualizacion 28/01/2014:
                        NroRecibo = blCCItem.Ins_CtaCteItem(CodEmpresa, cPerCodigo, nPeriodo, row["nCtaCteTipoCta"].ToString(), dFechaSys.Year, Convert.ToDouble(fila["nSysValor"]), dFechaSys, 1);

                        nLinea = blCCItemLine.Ins_CtaCteIteLine(CodEmpresa, cPerCodigo, NroRecibo, Convert.ToInt32(fila["nParCodigo_nCtaCteSerCodigo"]), Convert.ToInt32(fila["nMonCodigo"]), 1, Convert.ToDouble(fila["nSysValor"]), Convert.ToDouble(fila["nSysValor"]), nTC, 1);

                        if (nLinea != 0)
                        {
                            //---------------------
                            //CtaCteIteLinRetencion
                            //---------------------
                            foreach (DataRow posicion in blImpServ.Get_ImpuestoServicio(CodEmpresa, cPerCodigo, NroRecibo, Convert.ToInt32(fila["nParCodigo_nCtaCteSerCodigo"]), 9256).Rows) //9256.- Perú
                            {
                                if (!blCCRetencion.Ins_CtaCteIteLinRetencion(CodEmpresa, cPerCodigo, NroRecibo, nLinea, Convert.ToInt32(posicion["nSysTasCodigo"]), Convert.ToDouble(fila["nSysValor"]), Convert.ToInt32(posicion["fSysTasValor"]), dFechaSys))
                                {
                                    throw new ApplicationException("Se encontraron errores en la transaccion: Ins_CtaCteIteLinRetencion.!");
                                }
                            }
                        }
                        else
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: Ins_CtaCteIteLine.!");
                        }
                    }

                    //------------------------------------------------------------------------------
                    //update AdmSolicitud (cCtaCteRecibo) - Referenciando recibo en "AdmSolicitud" ?
                    //------------------------------------------------------------------------------
                    if (!DaSolAdm.Upd_AdmSol_cCtaCteRecibo(CodEmpresa, TipoPrograma, NroSolicitud, NroRecibo))
                    {
                        throw new ApplicationException("Se encontraron errores en la transaccion: AdmSolicitud.! " + CodEmpresa + ' ' + TipoPrograma + ' ' + NroSolicitud + ' ' + NroRecibo);
                    }

                    //exito = true;
                    //tx.Complete();

                    /* Perform transactional work here */
                    //No errors - commit transaction
                    committableTransaction.Commit();
                    exito = true;
                }

                else
                {
                    throw new ApplicationException("Configuracion de parametros no establecida.!");
                }
            }
            //}
            catch (Exception)
            {
                committableTransaction.Rollback();
                throw;
            }
            finally
            {
                committableTransaction.Dispose();
                //Restore the ambient transaction
                Transaction.Current = oldAmbient;
            }

            return(exito);
        }
Пример #2
0
        //----------------------
        //Agregar Item Recibo
        //----------------------
        public bool Ins_AgregarItemRecibo(string cPerJurCodigo, string cPerCodigo, string NroRecibo, long nCtaCteSerCodigo, DateTime dFechaSys, long nCantidad, double nPrecioUnit, double nImporte)
        {
            bool exito  = false;
            long nLinea = 0;
            //para Tipo de cambio
            double     nTC  = 0;
            BL_Sistema daTC = new BL_Sistema();

            //para CtaCteIteLIne
            BL_CtaCteIteLine blCCItemLine = new BL_CtaCteIteLine();

            //para Obtener Serv.
            BE_ReqCtaCteServBusca ReqServ = new BE_ReqCtaCteServBusca();
            BL_CtaCtaServicio     daServ  = new BL_CtaCtaServicio();

            BL_ImpuestoServicio      blImpServ     = new BL_ImpuestoServicio();
            BL_CtaCteIteLinRetencion blCCRetencion = new BL_CtaCteIteLinRetencion();

            //Update CtaCteItem
            BL_CtaCteItem daCCItem = new BL_CtaCteItem();

            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Required))
                {
                    ReqServ.cPerJurCodigo    = cPerJurCodigo;
                    ReqServ.nCtaCteSerCodigo = nCtaCteSerCodigo;
                    ReqServ.nFlag            = "SERV";

                    //
                    if (daServ.Get_CtaCteServicio(ReqServ).Rows.Count > 0)
                    {
                        DataRow row = daServ.Get_CtaCteServicio(ReqServ).Rows[0];
                        //--------------
                        //Tipo de cambio
                        //--------------
                        if (Convert.ToInt32(row["nMonCodigo"]) == 2) //Dolar
                        {
                            if (daTC.Get_TipodeCambio(Convert.ToInt32(row["nMonCodigo"]), "TCD", String.Format("{0:dd/MM/yyyy}", dFechaSys), 0, 0).Rows.Count > 0)
                            {
                                //DataRow row = daTC.Get_TipodeCambio(ReqTC).Rows[0];
                                nTC = Convert.ToDouble(daTC.Get_TipodeCambio(Convert.ToInt32(row["nMonCodigo"]), "TCD", String.Format("{0:dd/MM/yyyy}", dFechaSys), 0, 0).Rows[0]["nCompra"]);
                            }
                            else
                            {
                                throw new ApplicationException("No se ha registrado el Tipo de Cambio del dia: " + String.Format("{0:ddd, MMM d, yyyy}", dFechaSys));
                            }
                        }
                        else
                        {
                            nTC = 1.0;
                        }

                        //--------------
                        //CtaCteIteLine
                        //--------------
                        nLinea = blCCItemLine.Ins_CtaCteIteLine(cPerJurCodigo, cPerCodigo, NroRecibo, Convert.ToInt32(row["nCtaCteSerCodigo"]), Convert.ToInt32(row["nMonCodigo"]), nCantidad, nPrecioUnit, nImporte, nTC, 1);
                        if (nLinea != 0)
                        {
                            //---------------------
                            //CtaCteIteLinRetencion
                            //---------------------
                            foreach (DataRow posicion in blImpServ.Get_ImpuestoServicio(cPerJurCodigo, cPerCodigo, NroRecibo, Convert.ToInt32(row["nCtaCteSerCodigo"]), 9256).Rows) //9256.- Perú
                            {
                                if (!blCCRetencion.Ins_CtaCteIteLinRetencion(cPerJurCodigo, cPerCodigo, NroRecibo, nLinea, Convert.ToInt32(posicion["nSysTasCodigo"]), Convert.ToDouble(row["nCtaCteSerImpDef"]), Convert.ToInt32(posicion["fSysTasValor"]), dFechaSys))
                                {
                                    throw new ApplicationException("Se encontraron errores en la transaccion: Ins_CtaCteIteLinRetencion.!");
                                }
                            }
                        }
                        else
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: Ins_CtaCteIteLine.!");
                        }

                        //-----------------------------------
                        // Actulizar campo "nCtaCteImporte"
                        //-----------------------------------
                        if (!daCCItem.Upd_CtaCteItem_nCtaCteImpAplicado(cPerJurCodigo, NroRecibo, nImporte, "ADDITEM"))
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Upd_CtaCteItem_nCtaCteImpAplicado].!");
                        }

                        exito = true;
                        tx.Complete();
                    }
                    else
                    {
                        throw new ApplicationException("Configuracion de parametros no establecida.!");
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }

            return(exito);
        }
Пример #3
0
        //--------------
        //Realizar Pago
        //---------------
        public bool Ins_RealizarPago(string cPerJurCodigo, string cPerCodigo, long nPrdCodigo, string cTipCtaCodigo, string cCtaCteRecCargo, Dictionary <string, double> ListRecibo, string cPerUserCodigo, long nCajCodigo, long nCtaCteComCodigo, string cCtaCteComNumero, DateTime dFecRegistro, double ImporteTotal, double ImportePago, double ImporteAmortizado, string cCtaCteObserv, List <BE_ReqCtaCteDetalle> ReqCCDetalle)
        {
            bool   exito            = false;
            long   nCtaCtaPagCodigo = 0;
            string cCtaCteRecAbono  = "";
            //double PagImporte=0;
            //DateTime sFecTrans = new DateTime() ;

            //CtaCtePago
            BL_CtaCtePago blCCPago = new BL_CtaCtePago();

            //CtaCteComprobante
            BL_CtaCteComprobante BLComp = new BL_CtaCteComprobante();

            //CtaCteDetalle
            DA_CtaCteDetalle daCCDet = new DA_CtaCteDetalle();

            //CtaCteItem
            BL_CtaCteItem blCCItem = new BL_CtaCteItem();

            //CtaCteIteLine
            BL_CtaCteIteLine blCCIteLine = new BL_CtaCteIteLine();

            //CtaCteReferencia
            BL_CtaCteReferencia blCCRefe = new BL_CtaCteReferencia();

            //Update CtaCteItem
            BL_CtaCteItem daCCItem = new BL_CtaCteItem();

            //Update Correlativo
            BL_CtaCteNumeracion blCCNumeracion = new BL_CtaCteNumeracion();

            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Required))
                {
                    //Genera nuevo recibo pero en Negativo(-) en la tabla [CtaCteItem]
                    cCtaCteRecAbono = blCCItem.Ins_CtaCteItem(cPerJurCodigo, cPerCodigo, nPrdCodigo, cTipCtaCodigo, dFecRegistro.Year, -ImportePago, dFecRegistro, 1);
                    if (cCtaCteRecAbono == null)
                    {
                        throw new ApplicationException("Se encontro Nro. Recibo que va a cancelar: [Get_CtaCteItem].!");
                    }

                    //-----------------/
                    //CtaCteComprobante
                    //-----------------/
                    if (ImporteAmortizado == 0)
                    {
                        if (nCtaCteComCodigo == 3005) //Recibo Ingreso
                        {
                            long   nCtaCteComCodigoComp = 0;
                            string cCtaCteComNumeroComp = "";

                            BL_CtaCteNumeracion BLCorrelativo = new BL_CtaCteNumeracion();

                            //Genera Recibo (99) en CtaCteComprobante
                            nCtaCteComCodigoComp = 3006; //RECIBO (REC)
                            cCtaCteComNumeroComp = BLCorrelativo.Get_CtaCteNumCorrelativo(cPerJurCodigo, 0, nCtaCteComCodigoComp);

                            if (!BLComp.Ins_CtaCteComprobante(cPerJurCodigo, cPerCodigo, cCtaCteRecAbono, nCajCodigo, nCtaCteComCodigoComp, cCtaCteComNumeroComp, dFecRegistro, ImporteTotal, cPerUserCodigo))
                            {
                                throw new ApplicationException("Se encontraron errores en la transaccion: [Ins_CtaCteComprobante].!");
                            }

                            //Update Correlativo si pasa por este bucle Recibo 3006
                            BL_CtaCteNumeracion BLUpdCorrelativo = new BL_CtaCteNumeracion();

                            int    valor       = cCtaCteComNumeroComp.Length - 8;
                            string resultCorre = cCtaCteComNumeroComp.Substring(valor, 8);

                            long NumeroNew = 0;
                            NumeroNew = Convert.ToInt32(resultCorre);

                            if (!BLUpdCorrelativo.Upd_CtaCteNumeracion_nCtaCteNumero(cPerJurCodigo, 0, nCtaCteComCodigoComp, NumeroNew))
                            {
                                throw new ApplicationException("Se encontraron errores en la transaccion a Update nCtaCteComCodigo-3006: [Upd_CtaCteNumeracion_nCtaCteNumero].!");
                            }
                        }
                        else
                        {
                            if (!BLComp.Ins_CtaCteComprobante(cPerJurCodigo, cPerCodigo, cCtaCteRecAbono, nCajCodigo, nCtaCteComCodigo, cCtaCteComNumero, dFecRegistro, ImporteTotal, cPerUserCodigo))
                            {
                                throw new ApplicationException("Se encontraron errores en la transaccion: [Ins_CtaCteComprobante].!");
                            }
                        }
                    }
                    //<-


                    //--------------
                    //Ins_CtaCtePago
                    //--------------
                    nCtaCtaPagCodigo = blCCPago.Ins_CtaCtePago(cPerJurCodigo, cPerCodigo, cCtaCteRecAbono, nCajCodigo, nCtaCteComCodigo, cCtaCteComNumero, cPerUserCodigo, cCtaCteObserv); //OUTPUT inserted.nCtaCtaPagCodigo (cm.ExecuteScalar())

                    //-----------------
                    //Ins_CtaCteDetalle
                    //-----------------
                    foreach (BE_ReqCtaCteDetalle Item in ReqCCDetalle)
                    {
                        Item.nCtaCtePagCodigo = nCtaCtaPagCodigo; //paso el autogenerado de CtaCtePago(nCtaCtePagCodigo)
                        exito = daCCDet.Ins_CtaCteDetalle(Item);
                        //PagImporte = PagImporte + Item.nCtaCtePagImporte;
                        //sFecTrans = Item.dCtaCteFecTransacion;
                        if (!exito)
                        {
                            break;
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Ins_CtaCteDetalle].!");
                        }
                    }

                    //Nuevo Cambio
                    if (ListRecibo.Count == 0) /*Pago Simple*/
                    {
                        //----------------
                        //CtaCteReferencia
                        //----------------
                        if (!blCCRefe.Ins_CtaCteReferencia(cPerJurCodigo, cPerCodigo, cCtaCteRecCargo, cCtaCteRecAbono, nCtaCtaPagCodigo, ImportePago, "", dFecRegistro)) //PagImporte
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Ins_CtaCteReferencia].!");
                        }

                        //------------------------------------
                        // Actualizar campo nCtaCteImpAplicado
                        //------------------------------------
                        if (!daCCItem.Upd_CtaCteItem_nCtaCteImpAplicado(cPerJurCodigo, cCtaCteRecCargo, ImportePago, "CANCELA")) //PagImporte
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Upd_CtaCteItem_nCtaCteImpAplicado].!");
                        }
                    }
                    else
                    {
                        //Aqui tengo que recorrer los recibos seleccionados *Pago Multiple*
                        foreach (KeyValuePair <string, double> pair in ListRecibo)
                        {
                            //----------------
                            //CtaCteReferencia
                            //----------------

                            if (!blCCRefe.Ins_CtaCteReferencia(cPerJurCodigo, cPerCodigo, pair.Key, cCtaCteRecAbono, nCtaCtaPagCodigo, pair.Value, "", dFecRegistro)) //PagImporte
                            {
                                throw new ApplicationException("Se encontraron errores en la transaccion: [Ins_CtaCteReferencia].!");
                            }

                            //------------------------------------
                            // Actualizar campo nCtaCteImpAplicado
                            //------------------------------------
                            //if (!daCCItem.Upd_CtaCteItem_nCtaCteImpAplicado(cPerJurCodigo, cCtaCteRecCargo, ImportePago, "CANCELA")) //PagImporte
                            if (!daCCItem.Upd_CtaCteItem_nCtaCteImpAplicado(cPerJurCodigo, pair.Key, pair.Value, "CANCELA")) //PagImporte
                            {
                                throw new ApplicationException("Se encontraron errores en la transaccion: [Upd_CtaCteItem_nCtaCteImpAplicado].!");
                            }
                        }
                        ListRecibo.Clear();
                    }

                    //-------------------------------------------
                    // Actualizar CtaCteNumeracion(nCtaCteNumero)
                    //-------------------------------------------
                    int    value  = cCtaCteComNumero.Length - 8;
                    string result = cCtaCteComNumero.Substring(value, 8);

                    long Numeracion = 0;
                    Numeracion = Convert.ToInt32(result);

                    if (!blCCNumeracion.Upd_CtaCteNumeracion_nCtaCteNumero(cPerJurCodigo, nCajCodigo, nCtaCteComCodigo, Numeracion))
                    {
                        throw new ApplicationException("Se encontraron errores en la transaccion: [Upd_CtaCteItem_nCtaCteImpAplicado].!");
                    }

                    tx.Complete();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return(exito);
        }
        //----------------------
        //Agregar Item Recibo
        //----------------------
        public bool Ins_AgregarItemRecibo(string cPerJurCodigo, string cPerCodigo, string NroRecibo, long nCtaCteSerCodigo, DateTime dFechaSys, long nCantidad, double nPrecioUnit, double nImporte)
        {
            bool exito = false;
            long nLinea = 0;
            //para Tipo de cambio
            double nTC = 0;
            BL_Sistema daTC = new BL_Sistema();

            //para CtaCteIteLIne
            BL_CtaCteIteLine blCCItemLine = new BL_CtaCteIteLine();

            //para Obtener Serv.
            BE_ReqCtaCteServBusca ReqServ = new BE_ReqCtaCteServBusca();
            BL_CtaCtaServicio daServ = new BL_CtaCtaServicio();

            BL_ImpuestoServicio blImpServ = new BL_ImpuestoServicio();
            BL_CtaCteIteLinRetencion blCCRetencion = new BL_CtaCteIteLinRetencion();

            //Update CtaCteItem
            BL_CtaCteItem daCCItem = new BL_CtaCteItem();

            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Required))
                {
                    ReqServ.cPerJurCodigo = cPerJurCodigo;
                    ReqServ.nCtaCteSerCodigo = nCtaCteSerCodigo;
                    ReqServ.nFlag = "SERV";

                    //
                    if (daServ.Get_CtaCteServicio(ReqServ).Rows.Count > 0)
                    {
                        DataRow row = daServ.Get_CtaCteServicio(ReqServ).Rows[0];
                        //--------------
                        //Tipo de cambio
                        //--------------
                        if (Convert.ToInt32(row["nMonCodigo"]) == 2) //Dolar
                        {
                            if (daTC.Get_TipodeCambio(Convert.ToInt32(row["nMonCodigo"]), "TCD", String.Format("{0:dd/MM/yyyy}", dFechaSys), 0, 0).Rows.Count > 0)
                            {
                                //DataRow row = daTC.Get_TipodeCambio(ReqTC).Rows[0];
                                nTC = Convert.ToDouble(daTC.Get_TipodeCambio(Convert.ToInt32(row["nMonCodigo"]), "TCD", String.Format("{0:dd/MM/yyyy}", dFechaSys), 0, 0).Rows[0]["nCompra"]);
                            }
                            else throw new ApplicationException("No se ha registrado el Tipo de Cambio del dia: " + String.Format("{0:ddd, MMM d, yyyy}", dFechaSys));
                        }
                        else nTC = 1.0;

                        //--------------
                        //CtaCteIteLine
                        //--------------
                        nLinea = blCCItemLine.Ins_CtaCteIteLine(cPerJurCodigo, cPerCodigo, NroRecibo, Convert.ToInt32(row["nCtaCteSerCodigo"]), Convert.ToInt32(row["nMonCodigo"]), nCantidad, nPrecioUnit, nImporte, nTC, 1);
                        if (nLinea != 0)
                        {
                            //---------------------
                            //CtaCteIteLinRetencion
                            //---------------------
                            foreach (DataRow posicion in blImpServ.Get_ImpuestoServicio(cPerJurCodigo, cPerCodigo, NroRecibo, Convert.ToInt32(row["nCtaCteSerCodigo"]), 9256).Rows) //9256.- Perú
                            {
                                if (!blCCRetencion.Ins_CtaCteIteLinRetencion(cPerJurCodigo, cPerCodigo, NroRecibo, nLinea, Convert.ToInt32(posicion["nSysTasCodigo"]), Convert.ToDouble(row["nCtaCteSerImpDef"]), Convert.ToInt32(posicion["fSysTasValor"]), dFechaSys))
                                {
                                    throw new ApplicationException("Se encontraron errores en la transaccion: Ins_CtaCteIteLinRetencion.!");
                                }
                            }
                        }
                        else throw new ApplicationException("Se encontraron errores en la transaccion: Ins_CtaCteIteLine.!");

                        //-----------------------------------
                        // Actulizar campo "nCtaCteImporte"
                        //-----------------------------------
                        if (!daCCItem.Upd_CtaCteItem_nCtaCteImpAplicado(cPerJurCodigo, NroRecibo, nImporte, "ADDITEM"))
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Upd_CtaCteItem_nCtaCteImpAplicado].!");
                        }

                        exito = true;
                        tx.Complete();
                    }
                    else throw new ApplicationException("Configuracion de parametros no establecida.!");
                }
            }
            catch (Exception)
            {
                throw;
            }

            return exito;
        }
        //--------------
        //Realizar Pago
        //---------------
        public bool Ins_RealizarPago(string cPerJurCodigo, string cPerCodigo, long nPrdCodigo, string cTipCtaCodigo, string cCtaCteRecCargo, Dictionary<string, double> ListRecibo, string cPerUserCodigo, long nCajCodigo, long nCtaCteComCodigo, string cCtaCteComNumero, DateTime dFecRegistro, double ImporteTotal, double ImportePago, double ImporteAmortizado, string cCtaCteObserv, List<BE_ReqCtaCteDetalle> ReqCCDetalle)
        {
            bool exito = false;
            long nCtaCtaPagCodigo = 0;
            string cCtaCteRecAbono = "";
            //double PagImporte=0;
            //DateTime sFecTrans = new DateTime() ;

            //CtaCtePago
            BL_CtaCtePago blCCPago = new BL_CtaCtePago();

            //CtaCteComprobante
            BL_CtaCteComprobante BLComp = new BL_CtaCteComprobante();

            //CtaCteDetalle
            DA_CtaCteDetalle daCCDet = new DA_CtaCteDetalle();

            //CtaCteItem
            BL_CtaCteItem blCCItem = new BL_CtaCteItem();

            //CtaCteIteLine
            BL_CtaCteIteLine blCCIteLine = new BL_CtaCteIteLine();

            //CtaCteReferencia
            BL_CtaCteReferencia blCCRefe = new BL_CtaCteReferencia();

            //Update CtaCteItem
            BL_CtaCteItem daCCItem = new BL_CtaCteItem();

            //Update Correlativo
            BL_CtaCteNumeracion blCCNumeracion = new BL_CtaCteNumeracion();

            try
            {
                using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Required))
                {
                    //Genera nuevo recibo pero en Negativo(-) en la tabla [CtaCteItem]
                    cCtaCteRecAbono = blCCItem.Ins_CtaCteItem(cPerJurCodigo, cPerCodigo, nPrdCodigo, cTipCtaCodigo, dFecRegistro.Year, -ImportePago, dFecRegistro, 1);
                    if (cCtaCteRecAbono == null)
                    {
                        throw new ApplicationException("Se encontro Nro. Recibo que va a cancelar: [Get_CtaCteItem].!");
                    }

                    //-----------------/
                    //CtaCteComprobante
                    //-----------------/
                    if (ImporteAmortizado == 0)
                    {
                        if (nCtaCteComCodigo == 3005) //Recibo Ingreso
                        {
                            long nCtaCteComCodigoComp = 0;
                            string cCtaCteComNumeroComp = "";

                            BL_CtaCteNumeracion BLCorrelativo = new BL_CtaCteNumeracion();

                            //Genera Recibo (99) en CtaCteComprobante
                            nCtaCteComCodigoComp = 3006; //RECIBO (REC)
                            cCtaCteComNumeroComp = BLCorrelativo.Get_CtaCteNumCorrelativo(cPerJurCodigo, 0, nCtaCteComCodigoComp);

                            if (!BLComp.Ins_CtaCteComprobante(cPerJurCodigo, cPerCodigo, cCtaCteRecAbono, nCajCodigo, nCtaCteComCodigoComp, cCtaCteComNumeroComp, dFecRegistro, ImporteTotal, cPerUserCodigo))
                            {
                                throw new ApplicationException("Se encontraron errores en la transaccion: [Ins_CtaCteComprobante].!");
                            }

                            //Update Correlativo si pasa por este bucle Recibo 3006
                            BL_CtaCteNumeracion BLUpdCorrelativo = new BL_CtaCteNumeracion();

                            int valor = cCtaCteComNumeroComp.Length - 8;
                            string resultCorre = cCtaCteComNumeroComp.Substring(valor, 8);

                            long NumeroNew = 0;
                            NumeroNew = Convert.ToInt32(resultCorre);

                            if (!BLUpdCorrelativo.Upd_CtaCteNumeracion_nCtaCteNumero(cPerJurCodigo, 0, nCtaCteComCodigoComp, NumeroNew))
                            {
                                throw new ApplicationException("Se encontraron errores en la transaccion a Update nCtaCteComCodigo-3006: [Upd_CtaCteNumeracion_nCtaCteNumero].!");
                            }
                        }
                        else
                        {
                            if (!BLComp.Ins_CtaCteComprobante(cPerJurCodigo, cPerCodigo, cCtaCteRecAbono, nCajCodigo, nCtaCteComCodigo, cCtaCteComNumero, dFecRegistro, ImporteTotal, cPerUserCodigo))
                            {
                                throw new ApplicationException("Se encontraron errores en la transaccion: [Ins_CtaCteComprobante].!");
                            }
                        }
                    }
                    //<-

                    //--------------
                    //Ins_CtaCtePago
                    //--------------
                    nCtaCtaPagCodigo = blCCPago.Ins_CtaCtePago(cPerJurCodigo, cPerCodigo, cCtaCteRecAbono, nCajCodigo, nCtaCteComCodigo, cCtaCteComNumero, cPerUserCodigo, cCtaCteObserv); //OUTPUT inserted.nCtaCtaPagCodigo (cm.ExecuteScalar())

                    //-----------------
                    //Ins_CtaCteDetalle
                    //-----------------
                    foreach (BE_ReqCtaCteDetalle Item in ReqCCDetalle)
                    {
                        Item.nCtaCtePagCodigo = nCtaCtaPagCodigo; //paso el autogenerado de CtaCtePago(nCtaCtePagCodigo)
                        exito = daCCDet.Ins_CtaCteDetalle(Item);
                        //PagImporte = PagImporte + Item.nCtaCtePagImporte;
                        //sFecTrans = Item.dCtaCteFecTransacion;
                        if (!exito)
                        {
                            break;
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Ins_CtaCteDetalle].!");
                        }
                    }

                    //Nuevo Cambio
                    if (ListRecibo.Count == 0) /*Pago Simple*/
                    {
                        //----------------
                        //CtaCteReferencia
                        //----------------
                        if (!blCCRefe.Ins_CtaCteReferencia(cPerJurCodigo, cPerCodigo, cCtaCteRecCargo, cCtaCteRecAbono, nCtaCtaPagCodigo, ImportePago, "", dFecRegistro)) //PagImporte
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Ins_CtaCteReferencia].!");
                        }

                        //------------------------------------
                        // Actualizar campo nCtaCteImpAplicado
                        //------------------------------------
                        if (!daCCItem.Upd_CtaCteItem_nCtaCteImpAplicado(cPerJurCodigo, cCtaCteRecCargo, ImportePago, "CANCELA")) //PagImporte
                        {
                            throw new ApplicationException("Se encontraron errores en la transaccion: [Upd_CtaCteItem_nCtaCteImpAplicado].!");
                        }
                    }
                    else
                    {
                        //Aqui tengo que recorrer los recibos seleccionados *Pago Multiple*
                        foreach (KeyValuePair<string, double> pair in ListRecibo)
                        {
                            //----------------
                            //CtaCteReferencia
                            //----------------

                            if (!blCCRefe.Ins_CtaCteReferencia(cPerJurCodigo, cPerCodigo, pair.Key, cCtaCteRecAbono, nCtaCtaPagCodigo, pair.Value, "", dFecRegistro)) //PagImporte
                            {
                                throw new ApplicationException("Se encontraron errores en la transaccion: [Ins_CtaCteReferencia].!");
                            }

                            //------------------------------------
                            // Actualizar campo nCtaCteImpAplicado
                            //------------------------------------
                            //if (!daCCItem.Upd_CtaCteItem_nCtaCteImpAplicado(cPerJurCodigo, cCtaCteRecCargo, ImportePago, "CANCELA")) //PagImporte
                            if (!daCCItem.Upd_CtaCteItem_nCtaCteImpAplicado(cPerJurCodigo, pair.Key, pair.Value, "CANCELA")) //PagImporte
                            {
                                throw new ApplicationException("Se encontraron errores en la transaccion: [Upd_CtaCteItem_nCtaCteImpAplicado].!");
                            }
                        }
                        ListRecibo.Clear();
                    }

                    //-------------------------------------------
                    // Actualizar CtaCteNumeracion(nCtaCteNumero)
                    //-------------------------------------------
                    int value = cCtaCteComNumero.Length - 8;
                    string result = cCtaCteComNumero.Substring(value, 8);

                    long Numeracion = 0;
                    Numeracion = Convert.ToInt32(result);

                    if (!blCCNumeracion.Upd_CtaCteNumeracion_nCtaCteNumero(cPerJurCodigo, nCajCodigo, nCtaCteComCodigo, Numeracion))
                    {
                        throw new ApplicationException("Se encontraron errores en la transaccion: [Upd_CtaCteItem_nCtaCteImpAplicado].!");
                    }

                    tx.Complete();
                }
            }
            catch (Exception)
            {
                throw;
            }
            return exito;
        }
        //-----------------------------------
        //Genera Cargo Solicitud Colegiado
        //-----------------------------------
        public bool Ins_GenerarCargoSolicitud(string CodEmpresa, long TipoPrograma, long TipoSolicitud, string cPerCodigo, int nPeriodo, DateTime dFechaSys, string NroSolicitud)
        {
            bool exito = false;

            string NroRecibo = "";
            long nLinea = 0;
            //double nImporte = 0;

            //para Tipo de cambio
            double nTC = 0;
            BL_Sistema daTC = new BL_Sistema();

            //para CtaCteItem
            BL_CtaCteItem blCCItem = new BL_CtaCteItem();
            BL_CtaCteIteLine blCCItemLine = new BL_CtaCteIteLine();
            BL_CtaCteIteLinRetencion blCCRetencion = new BL_CtaCteIteLinRetencion();
            BL_ImpuestoServicio blImpServ = new BL_ImpuestoServicio();

            //para Obtener Serv. Configurado
            BE_ReqCtaCteSysConfigParamterServicio ReqServConfig = new BE_ReqCtaCteSysConfigParamterServicio();
            BL_CtaCteSysConfigParamterServicio daServConfig = new BL_CtaCteSysConfigParamterServicio();

            //actuliza solicitud con el recibo de cargo
            BL_Solicitud DaSolAdm = new BL_Solicitud();

            //----------------------
            //CommittableTransaction
            //----------------------
            Transaction oldAmbient = Transaction.Current;
            CommittableTransaction committableTransaction;
            committableTransaction = oldAmbient as CommittableTransaction;

            if (committableTransaction == null)
            {
                committableTransaction = new CommittableTransaction();
                Transaction.Current = committableTransaction;
            }

            try
            {
                //using (TransactionScope tx = new TransactionScope(TransactionScopeOption.Required))
                //{
                //
                ReqServConfig.cPerJurCodigo = CodEmpresa;
                ReqServConfig.nSisModulo = 7001; //default aun falta definir interface
                ReqServConfig.nParCodigo_nProCodigo = TipoSolicitud; //CLng(CboPrograma.SelectedValue)
                ReqServConfig.cFLag = "FEC";

                if (daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows.Count > 0)
                {
                    DataRow row = daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows[0];
                    //--------------
                    //Tipo de cambio
                    //--------------
                    if (Convert.ToInt32(row["nMonCodigo"]) == 2) //Dolar
                    {
                        if (daTC.Get_TipodeCambio(Convert.ToInt32(row["nMonCodigo"]), "TCD", String.Format("{0:dd/MM/yyyy}", dFechaSys), 0, 0).Rows.Count > 0)
                        {
                            //DataRow row = daTC.Get_TipodeCambio(ReqTC).Rows[0];
                            nTC = Convert.ToDouble(daTC.Get_TipodeCambio(Convert.ToInt32(row["nMonCodigo"]), "TCD", String.Format("{0:dd/MM/yyyy}", dFechaSys), 0, 0).Rows[0]["nCompra"]);
                        }
                        else throw new ApplicationException("No se ha registrado el Tipo de Cambio del dia: " + String.Format("{0:ddd, MMM d, yyyy}", dFechaSys));
                    }
                    else nTC = 1.0;

                    //----------
                    //CtaCteItem
                    //----------
                    //se comente esto porque la Actualizacion 28/01/2014 no se necesita esta variable
                    //foreach (DataRow fila in daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows)
                    //{
                    //    //Obteniendo el total del importe de recibo (cabezera)
                    //    nImporte = nImporte + Convert.ToDouble(fila["nSysValor"]);
                    //}

                    //Actualizacion 28/01/2014:
                    //porque necesitan que cada concepto salga en diferente recibo
                    //NroRecibo = blCCItem.Ins_CtaCteItem(CodEmpresa, cPerCodigo, nPeriodo, row["nCtaCteTipoCta"].ToString(), dFechaSys.Year, nImporte, dFechaSys, 1);

                    //--------------
                    //CtaCteIteLine
                    //--------------
                    //Recorro SysConfParametrosServ
                    foreach (DataRow fila in daServConfig.Get_SysConfParametrosServ(ReqServConfig).Rows)
                    {
                        //aqui se cambio Actualizacion 28/01/2014:
                        NroRecibo = blCCItem.Ins_CtaCteItem(CodEmpresa, cPerCodigo, nPeriodo, row["nCtaCteTipoCta"].ToString(), dFechaSys.Year, Convert.ToDouble(fila["nSysValor"]), dFechaSys, 1);

                        nLinea = blCCItemLine.Ins_CtaCteIteLine(CodEmpresa, cPerCodigo, NroRecibo, Convert.ToInt32(fila["nParCodigo_nCtaCteSerCodigo"]), Convert.ToInt32(fila["nMonCodigo"]), 1, Convert.ToDouble(fila["nSysValor"]), Convert.ToDouble(fila["nSysValor"]), nTC, 1);

                        if (nLinea != 0)
                        {
                            //---------------------
                            //CtaCteIteLinRetencion
                            //---------------------
                            foreach (DataRow posicion in blImpServ.Get_ImpuestoServicio(CodEmpresa, cPerCodigo, NroRecibo, Convert.ToInt32(fila["nParCodigo_nCtaCteSerCodigo"]), 9256).Rows) //9256.- Perú
                            {
                                if (!blCCRetencion.Ins_CtaCteIteLinRetencion(CodEmpresa, cPerCodigo, NroRecibo, nLinea, Convert.ToInt32(posicion["nSysTasCodigo"]), Convert.ToDouble(fila["nSysValor"]), Convert.ToInt32(posicion["fSysTasValor"]), dFechaSys))
                                {
                                    throw new ApplicationException("Se encontraron errores en la transaccion: Ins_CtaCteIteLinRetencion.!");
                                }
                            }
                        }
                        else throw new ApplicationException("Se encontraron errores en la transaccion: Ins_CtaCteIteLine.!");
                    }

                    //------------------------------------------------------------------------------
                    //update AdmSolicitud (cCtaCteRecibo) - Referenciando recibo en "AdmSolicitud" ?
                    //------------------------------------------------------------------------------
                    if (!DaSolAdm.Upd_AdmSol_cCtaCteRecibo(CodEmpresa, TipoPrograma, NroSolicitud, NroRecibo))
                    {
                        throw new ApplicationException("Se encontraron errores en la transaccion: AdmSolicitud.! " + CodEmpresa + ' ' + TipoPrograma + ' ' + NroSolicitud + ' ' + NroRecibo);
                    }

                    //exito = true;
                    //tx.Complete();

                    /* Perform transactional work here */
                    //No errors - commit transaction
                    committableTransaction.Commit();
                    exito = true;
                }
                else throw new ApplicationException("Configuracion de parametros no establecida.!");
            }
            //}
            catch (Exception)
            {
                committableTransaction.Rollback();
                throw;
            }
            finally
            {
                committableTransaction.Dispose();
                //Restore the ambient transaction
                Transaction.Current = oldAmbient;
            }

            return exito;
        }