using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using BE;
using BL;
using Utilitaria;
using DL.Funciones;

public partial class frmAsientosDetalleAjax : System.Web.UI.Page
{
    Validacion oEval = new Validacion();
    BEPlanDeCuentas objBEPlanDeCuentas = new BEPlanDeCuentas();
    BLPlanDeCuentas objBLPlanDeCuentas = new BLPlanDeCuentas();
    BEEmpresas objBEEmpresas = new BEEmpresas();
    BLEmpresas objBLEmpresas = new BLEmpresas();

    //private void Page_Init(object sender, EventArgs e)
    //{
        
    //    Cls_AsientoContable.TempCreaAsientContDetalle.Clear();
    //}

    Int32 dosLetra = 0;

    protected void Page_Load(object sender, EventArgs e)
    {

        // const string strKey = "calendarExtenderPostback";
        //if (!this.ClientScript.IsClientScriptBlockRegistered(this.GetType(), strKey))
        //{
        //    PostBackOptions pbo = new PostBackOptions(this);
        //    pbo.AutoPostBack = true;
        //    pbo.RequiresJavaScriptProtocol = false;
        //    pbo.PerformValidation = true;
        //   string strScript = string.Format("function calendarExtenderPostback(e) {{ {0} }}", this.ClientScript.GetPostBackEventReference(pbo));
        //  this.ClientScript.RegisterClientScriptBlock(this.GetType(), strKey, strScript, true);
        // }

        ViewState["SubDiarioID"] = Request.QueryString["IDS"].ToString().Trim(); // Session["SubDiarioID"];
        ViewState["ID"] = Request.QueryString["ID"].ToString().Trim(); //"161"; 


        if (!Page.IsPostBack && !Page.IsCallback)
        {
            Inhabilitacampos();
            this.txtDia.Text = DateTime.Now.Date.ToString();
            //if (ViewState["Poss"] =="")
            //{
                Cls_AsientoContable.TempCreaAsientContDetalle.Clear();
                Cls_AsientoContable.TempAsientoDetalleAUN.Clear();
                Cls_AsientoContable.PlanDeCuentas.Clear();
                Cls_AsientoContable.RUC_Empresas.Clear();
            //}
            //Session["EmpresaID"] = "1";
            //Session["txtPeriodo"] = "2010";
            //Session["SubDiarioID"] = "136";
            //Session["HotelID"] = "1";
            

            ViewState["EmpresaID"] = Cls_Propiedades.PrivilegiosUsuario[0].EmpresaID;
            ViewState["txtPeriodo"] = Cls_Propiedades.PrivilegiosUsuario[0].Periodo;
            ViewState["HotelID"] = Cls_Propiedades.PrivilegiosUsuario[0].HotelID;
            ViewState["UsuarioID"] = Convert.ToInt32(Cls_Propiedades.PrivilegiosUsuario[0].UsuarioID);

            Combo_Moneda();
            Combo_TipoConversionMoneda("Estado=0");
            Combo_CanalContable();
            Combo_TipoDocumentos();
            Combo_Area();
            Combo_Proyectos();
            Combo_flujoCaja();

            this.Limpia_CajaDetalle(0);

            if (!String.IsNullOrEmpty(ViewState["ID"].ToString()))
            {
                listar_cabecera(ViewState["ID"].ToString());
                listar_Detalle(ViewState["ID"].ToString(), "");
                //ListaAsientos();
            }


        }
    }

    private void listar_cabecera(String SubDiarioID)
    {
        if (!String.IsNullOrEmpty(SubDiarioID))
        {
            BEAsientosContables objet_AsientosContables = new BEAsientosContables();
            BLAsientosContables objlg_AsientosContables = new BLAsientosContables();
            List<BEAsientosContables> Lista_Asientos_Cabecera;

            objet_AsientosContables.Cabecera = Cls_Enums.TablasAsientosDetalle.Cabecera;
            objet_AsientosContables.Detallecabecera = Cls_Enums.TablasAsientosDetalle.Detallecabecera;
            objet_AsientosContables.Empresa = ViewState["EmpresaID"].ToString();
            objet_AsientosContables.Anio = ViewState["txtPeriodo"].ToString();
            objet_AsientosContables.AsientoContableID = SubDiarioID;

            Lista_Asientos_Cabecera = objlg_AsientosContables.fnSelAsientosContables(Cls_Enums.TablasAsientosDetalle.Cabecera, ViewState["EmpresaID"].ToString(), ViewState["txtPeriodo"].ToString(), SubDiarioID);

            if (Lista_Asientos_Cabecera.Count > 0)
            {
                this.txtGlosa.Text = Lista_Asientos_Cabecera[0].Glosa;
                this.txtDia.Text = Lista_Asientos_Cabecera[0].Dia.ToString().Substring(0,10);
   /*FRANCO*/
                //this.cbxMoneda.SelectedValue = Lista_Asientos_Cabecera[0].MonedaID.ToString();
                //this.cbxTipoConversion.SelectedValue = Lista_Asientos_Cabecera[0].TipoConversionMonedaID.ToString().Trim();
                //this.txtTipoCambio.Text = Lista_Asientos_Cabecera[0].TipoCambio.ToString();
                this.txtComprobante.Text = Lista_Asientos_Cabecera[0].Comprobante.Trim();
                this.txtTipoCambio.Enabled = false;

                if (Lista_Asientos_Cabecera[0].Bloqueado == 1)
                {
                    //chkBloqueado.Checked = true;

                    btnGuardarRegresar.Visible = false;
                    btnGuardar.Visible = false;
                    btnAgregar.Visible = false;
                    btnNuevo.Visible = false;

                }
                else if (Lista_Asientos_Cabecera[0].Bloqueado == 0)
                {
                    //chkBloqueado.Checked = false;

                    btnGuardarRegresar.Visible = true;
                    btnGuardar.Visible = true;
                    btnAgregar.Visible = true;
                    btnNuevo.Visible = true;
                }
                else if (Lista_Asientos_Cabecera[0].Bloqueado == 2)
                {
                    //chkBloqueado.Checked = true;
                    btnGuardarRegresar.Visible = false;
                    btnGuardar.Visible = false;
                    btnAgregar.Visible = false;
                    btnNuevo.Visible = false;
                }

            }

            objet_AsientosContables = null;
            objlg_AsientosContables = null;
        }

    }

    private void listar_Detalle(String AsientoContableID, String AsientoContableDetalleID)
    {
        BEAsientosContablesDetalle objet_AsientosContablesDetalle = new BEAsientosContablesDetalle();
        BLAsientosContablesDetalle objlg_AsientosContablesDetalle = new BLAsientosContablesDetalle();

        objet_AsientosContablesDetalle.BEAsientosContables.Detallecabecera = Cls_Enums.TablasAsientosDetalle.Detallecabecera;
        objet_AsientosContablesDetalle.BEAsientosContables.Empresa = ViewState["EmpresaID"].ToString();
        objet_AsientosContablesDetalle.BEAsientosContables.Anio = ViewState["txtPeriodo"].ToString();
        

        objet_AsientosContablesDetalle.AsientoContableID = AsientoContableID.Trim();
        objet_AsientosContablesDetalle.AsientoContableDetalleID = AsientoContableDetalleID.Trim();

        List<BEAsientosContablesDetalle> loList = new List<BEAsientosContablesDetalle>();

        //this.RadGrid1.DataSource = null;
        //this.RadGrid1.DataBind();

        loList = objlg_AsientosContablesDetalle.fnSelAsientosContablesDetalleDin(objet_AsientosContablesDetalle);

        /*FRANCO*/
        this.cbxMoneda.SelectedValue = loList[0].MonedaID.ToString();
        this.cbxTipoConversion.SelectedValue = loList[0].TipoConversionMonedaID.ToString().Trim();
        this.txtTipoCambio.Text = loList[0].TipoCambio.ToString();

        AddDetalleAsiento(loList);
         
        //this.lblDiferenciaSoles.Text = String.Format("{0:N2}", Math.Round(Diferencia((DataTable)Session["DtDetalleAsiento"], "Soles"), 2, MidpointRounding.AwayFromZero).ToString());
        //this.lblDiferenciaDolares.Text = String.Format("{0:N2}", Math.Round(Diferencia((DataTable)Session["DtDetalleAsiento"], "Dolares"), 2, MidpointRounding.AwayFromZero).ToString());
        Diferencia("Soles");
        Diferencia("Dolares");

        ListaAsientos();

        objet_AsientosContablesDetalle = null;
        objlg_AsientosContablesDetalle = null;
    }

    private void AddDetalleAsiento(List<BEAsientosContablesDetalle> loList)
    {
        for (Int32 i = 0; i < loList.Count; i++)
        {

            BEAsientosContablesDetalle blDetalle = new BEAsientosContablesDetalle();
            var _SetDet = blDetalle;

            _SetDet.AsientoContableDetalleIDTemp = Convert.ToInt32(i+1).ToString();
            _SetDet.AsientoContableDetalleID = loList[i].AsientoContableDetalleID;
            _SetDet.AsientoContableID = loList[i].AsientoContableID;

            Int32 TipoMoneda = Convert.ToInt32(cbxMoneda.SelectedValue.ToString());
            if (TipoMoneda == 1)
            {
                _SetDet.MontoDebe = loList[i].MontoDebe;
                _SetDet.MontoHaber = loList[i].MontoHaber;

                if (Convert.ToDecimal(loList[i].MontoDebe.ToString()) != 0)
                {
                    _SetDet.MontoDebeDolares = loList[i].ImporteDolares;
                    _SetDet.MontoHaberDolares = 0;
                }
                else
                {
                    _SetDet.MontoDebeDolares = 0;
                    _SetDet.MontoHaberDolares = loList[i].ImporteDolares;
                }
            }
            else
            {
                _SetDet.MontoDebeDolares = loList[i].MontoDebe;
                _SetDet.MontoHaberDolares = loList[i].MontoHaber;
                if (Convert.ToDecimal(loList[i].MontoDebe.ToString()) != 0)
                {
                    _SetDet.MontoDebe = loList[i].ImporteSoles;
                    _SetDet.MontoHaber = 0;
                }
                else
                {
                    _SetDet.MontoDebe = 0;
                    _SetDet.MontoHaber = loList[i].ImporteSoles;
                }
            }

            _SetDet.CanalContableID = loList[i].CanalContableID;
            _SetDet.EmpresaID = loList[i].EmpresaID;
            _SetDet.EmpresaIDRuc = loList[i].EmpresaIDRuc;

            _SetDet.TipoDocumentoID = loList[i].TipoDocumentoID;
            _SetDet.ProyectoID = loList[i].ProyectoID;
            _SetDet.Dia = loList[i].Dia;
            _SetDet.Referencia = loList[i].Referencia;
            _SetDet.FechaEmision = loList[i].FechaEmision;
            if (loList[i].FechaVencimiento == null)
                _SetDet.FechaVencimiento = oEval.ManageNullDateTime(DBNull.Value);
            else
                _SetDet.FechaVencimiento = loList[i].FechaVencimiento;

            _SetDet.AreaID = loList[i].AreaID;
            _SetDet.NumeroDocumento = loList[i].NumeroDocumento;
            _SetDet.TransaccionDocumentoID = loList[i].TransaccionDocumentoID;
            _SetDet.FlujoCajaID = loList[i].FlujoCajaID;
            _SetDet.PlanCuentaID = loList[i].PlanCuentaID;
            _SetDet.AsientoContableDetalleIDTransferencia = loList[i].AsientoContableDetalleIDTransferencia;
            _SetDet.PeriodoID = loList[i].PeriodoID;

            _SetDet.CanalContableIDNombre = loList[i].CanalContableIDNombre;
            _SetDet.EmpresaIDNombre = loList[i].EmpresaIDRuc;
            _SetDet.TipoDocumentoIDNombre = loList[i].TipoDocumentoIDNombre;
            _SetDet.ProyectoIDNombre = loList[i].ProyectoIDNombre;
            _SetDet.AreaIDNombre = loList[i].AreaIDNombre;
            _SetDet.FlujoCajaIDNombre = loList[i].FlujoCajaIDNombre;
            _SetDet.PlanCuentaIDNombre = loList[i].PlanCuentaIDNombre;
            _SetDet.Transferencia = loList[i].Transferencia;

            _SetDet.BEAsientosContables.TipoCambio = Convert.ToDecimal(txtTipoCambio.Text).ToString();
            _SetDet.BEAsientosContables.MonedaID = Convert.ToInt32(cbxMoneda.SelectedValue);

            _SetDet.EstadoRegTemp = "C";

            _SetDet.ImporteSoles = loList[i].ImporteSoles;
            _SetDet.ImporteDolares = loList[i].ImporteDolares;
            

            //row["ImporteAnteriorSoles"] = loList[i].ImporteSoles;
            //row["ImporteAnteriorDolares"] = loList[i].ImporteDolares;

            //row["UnidadNegocioID_1"] = loList[i].UnidadNegocioID_1;
            //row["ImporteSoles_1"] = loList[i].ImporteSoles_1;
            //row["ImporteDolares_1"] = loList[i].ImporteDolares_1;
            //row["NombreUnidadNegocio_1"] = loList[i].NombreUnidadNegocio_1;
            //row["Participacion_1"] = 100;

            //((DataTable)Session["DtDetalleAsiento"]).Rows.Add(row);



            Cls_AsientoContable.TempCreaAsientContDetalle.Add(_SetDet);

        }
    }

    private void ListaAsientos()
    {
        gvAsientoDetalle.DataSource = Cls_AsientoContable.TempCreaAsientContDetalle;
        gvAsientoDetalle.DataBind();
        ViewState["Poss"] = Cls_AsientoContable.TempCreaAsientContDetalle.Count() ;
        Cant.Text = ViewState["Poss"].ToString();

    }
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        //if (EstaBloqueado())
        //{
        //    showMessage("El diario auxiliar " + lblSubDiario.Text + " se encuentra bloqueado para este mes");
        //    btnGuardarRegresar.Visible = false;
        //    btnGuardar.Visible = false;
        //    btnAgregar.Visible = false;
        //    btnNuevo.Visible = false;
        //}
        //else
        //{
        //    btnGuardarRegresar.Visible = true;
        //    btnGuardar.Visible = true;
        //    btnAgregar.Visible = true;
        //    btnNuevo.Visible = true;
        //}

        this.cbxMoneda.SelectedValue = "0";
        this.cbxTipoConversion.SelectedValue = "0";
        this.txtTipoCambio.Text = "0.00";
        this.txtTipoCambio.ReadOnly = true;
        this.cbxMoneda.Focus();


    }

    private Decimal TotalAUN()
    {
        Decimal Total = 0;
        String ValorAct = "";

        for (int i = 0; i < this.GridDistribucionAreas.Rows.Count; i++)
        {
            ValorAct = ((TextBox)this.GridDistribucionAreas.Rows[i].FindControl("txtImporte")).Text.ToString();
            if (ValorAct != "0.00")
            {
                Total += Convert.ToDecimal(ValorAct);
            }
            else
            {
                Total += 0;
            }
        }
        return Total;
    }
    
    private String Validaciones()
    {
        String msj = "";
        if (txtTipoCambio.Text == "0.00")
        {
            msj += "- Ingrese el Tipo de Cambio\\n";
        }

        if (txtDebe.Text == "0.00" && txtHaber.Text == "0.00")
        {
            msj += "- Ingrese montos en el Debe o Haber\\n";
        }

        if (String.IsNullOrEmpty(ViewState["PCID"].ToString()))
        {
            msj += "- La cuenta contable no existe\\n";
            this.txtPlanCuenta.Focus();
        }
        else
        {
            BLPlanDeCuentas objBLPlanDeCuentas = new BLPlanDeCuentas();
            List<BEPlanDeCuentas> ListPlanDeCuentas = new List<BEPlanDeCuentas> ();

            ListPlanDeCuentas = objBLPlanDeCuentas.fnSelPlanDeCuentasDin("Estado=0" + " and pdc.EstablecimientoID=" + ViewState["EmpresaID"].ToString().Trim() + " and CodigoPlanCuenta LIKE '" + txtPlanCuenta.Text + "%'", "CodigoPlanCuenta", 0);
            ViewState["PCID"] = ListPlanDeCuentas[0].PlanCuentaID.Trim();
            ViewState["NombrePlanCuenta"] = ListPlanDeCuentas[0].CodigoPlanCuenta;
            if (String.IsNullOrEmpty(ViewState["PCID"].ToString()))
            {
                msj += "- El plan de Cuenta que ingreso no existe\\n";
                this.txtPlanCuenta.Focus();
            }
        }

        if (Convert.ToInt32(ViewState["dosLetra"].ToString().Trim()) > 9 && Convert.ToInt32(ViewState["dosLetra"].ToString().Trim()) < 11)
        {
            if (this.cbxFlujoCaja.SelectedValue == "")
            {
                msj += "- Seleccionee el Flujo de Caja\\n";
                this.cbxFlujoCaja.Focus();
            }
        }
        if (ViewState["rqArea"].ToString().Trim() == "1")
        {
            Decimal Importe = 0;
            if (String.IsNullOrEmpty(txtDebe.Text.ToString().Trim()) || txtDebe.Text.Trim() == "0.00")
            {
                Importe = Convert.ToDecimal(txtHaber.Text);
                if (Importe != TotalAUN())
                {
                    msj += "- La Distribucion de la Unidad de Negocio debe ser igual al HABER\\n";
                }
            }
            else
            {
                Importe = Convert.ToDecimal(txtDebe.Text);
                if (Importe != TotalAUN())
                {
                    msj += "- La Distribucion de la Unidad de Negocio debe ser igual al DEBE\\n";
                }
            }
        }

        if (ViewState["rqTipo"].ToString().Trim() == "1")
        {
            if (this.cbxTDocumento.SelectedValue.ToString().Trim() == "0")
            {
                msj += "- El Tipo Documento es un campo obligatorio\\n";
            }
            if (String.IsNullOrEmpty(txtDocumento.Text))
            {
                msj += "- El Documento es un campo obligatorio\\n";
                this.txtDocumento.Focus();
            }

            if (String.IsNullOrEmpty(txtRucEmpresa.Text))
            {
                msj += "- EL Ruc de la Empresa es un campo obligatorio\\n";
            }
            else if (String.IsNullOrEmpty(ViewState["EMPID"].ToString().Trim()))
            {
                msj += "- EL Ruc de la Empresa que ingreso no existe\\n";
                this.txtRucEmpresa.Focus();
            }
        }
        if (ViewState["rqFecha"].ToString().Trim() == "1" && this.txtFVencimiento.Text.ToString() == "")
        {
            msj += "- Fecha de Vencimiento es un campo obligatorio\\n";
        }
        if (ViewState["rqArea"].ToString().Trim() == "1" && this.cbxArea.SelectedValue.ToString() == "0")
        {
            msj += "- El area es un campo obligatorio\\n";
        }
        if (ViewState["rqProyect"].ToString().Trim() == "1" && this.cbxProyecto.SelectedValue.ToString() == "0")
        {
            msj += "El Proyecto es un campo obligatorio\\n";
        }
        if (Session["rqCanal"].ToString().Trim() == "1" && this.cbxCanalContable.SelectedValue.ToString() == "0")
        {
            msj += "- El Canal Contable es un campo obligatorio\\n";
        }
        if ( ViewState["AsientoDetalleID"] == null)
        {
            ViewState["AsientoDetalleID"] = "0";
        }
        else
        {
            ViewState["AsientoDetalleID"] = ViewState["AsientoDetalleID"].ToString().Trim();
        };

        return msj;
    }
    
    protected void btnAgregar_Click(object sender, EventArgs e)
    {
        String Valida = Validaciones();
        
        if (Valida != "")
        {
            showMessage(Valida);
            return;
        }

        BEAsientosContables bl = new BEAsientosContables();
        //bl.Glosa = txtGlosa.Text;
        //bl.MonedaID = Convert.ToInt32(cbxMoneda.SelectedValue);
        //bl.TipoConversionMonedaID =  cbxMoneda.SelectedValue;
        //bl.Dia = Convert.ToDateTime(txtDia.Text);
        //bl.TipoCambio = txtTipoCambio.Text;
        //bl.Comprobante = txtComprobante.Text;

        
        
       if (string.IsNullOrEmpty(ViewState["CodigoTablaID"].ToString()))
        {
            ViewState["ID"] = 0;
            AddDetalleAsiento();
        }
        else 
        {
            UpdDetalleAsiento(ViewState["CodigoTablaID"].ToString());
        }
        ListaAsientos();
        bl = null;
        //this.Limpia_CajaDetalle(0);
        // = Cls_AsientoContable.TempCreaAsientContDetalle.Count.ToString();
        LabelDiferencias();
        this.Limpia_CajaDetalle(0);


    }

    private void LabelDiferencias()
    {
        this.lblDiferenciaSoles.Text = String.Format("{0:N2}", Math.Round(Diferencia("Soles"), 2, MidpointRounding.AwayFromZero).ToString());
        this.lblDiferenciaDolares.Text = String.Format("{0:N2}", Math.Round(Diferencia("Dolares"), 2, MidpointRounding.AwayFromZero).ToString());
    }

    private Decimal Diferencia(string Moneda)
    {
        decimal Debe = 0;
        decimal Haber = 0;

        List<BEAsientosContablesDetalle> Lista = Cls_AsientoContable.TempCreaAsientContDetalle;

        for (Int32 i = 0; i < Lista.Count(); i++)
        {
            if (Moneda == "Soles")
            {
                Debe = Debe + Convert.ToDecimal(Lista[i].MontoDebe);
                Haber = Haber + Convert.ToDecimal(Lista[i].MontoHaber);
            }
            else {
                Debe = Debe + Convert.ToDecimal(Lista[i].MontoDebeDolares);
                Haber = Haber + Convert.ToDecimal(Lista[i].MontoHaberDolares);
            }
        }
        if (Moneda == "Soles")
        {
            this.lblDebeSoles.Text = String.Format("{0:N2}", Math.Round(Debe, 2, MidpointRounding.AwayFromZero).ToString());
            this.lblHaberSoles.Text = String.Format("{0:N2}", Math.Round(Haber, 2, MidpointRounding.AwayFromZero).ToString());
        }
        else {
            this.lblDebeDolares.Text = String.Format("{0:N2}", Math.Round(Debe, 2, MidpointRounding.AwayFromZero).ToString());
            this.lblHaberDolares.Text = String.Format("{0:N2}", Math.Round(Haber, 2, MidpointRounding.AwayFromZero).ToString());
        }
        
        return Debe - Haber;

    }


    private void AddDetalleAsiento()
    {
        //DataRow row = ((DataTable)Session["DtDetalleAsiento"]).NewRow();
        Int32 IndexPX;
        if (Cls_AsientoContable.TempCreaAsientContDetalle.Count == 0)
        {
            ViewState["IndexPX"] = "1";
            IndexPX = Convert.ToInt16(ViewState["IndexPX"]);
        }
        else
        {
            IndexPX = Convert.ToInt16(ViewState["IndexPX"]) + 1;
            ViewState["IndexPX"] = IndexPX;
        }

        BEAsientosContablesDetalle blDetalle = new BEAsientosContablesDetalle();
        var _SetDet = blDetalle;
        _SetDet.PlanCuentaID = txtPlanCuenta.Text;
        _SetDet.PlanCuentaIDNombre = txtPlanCuenta.Text;
        _SetDet.MontoDebe = Convert.ToDecimal(txtDebe.Text);
        _SetDet.MontoHaber = 0;

        
        _SetDet.AsientoContableDetalleIDTemp = ViewState["IndexPX"].ToString();
        _SetDet.AsientoContableDetalleID = ViewState["AsientoDetalleID"].ToString().Trim();


        _SetDet.AsientoContableID = ViewState["ID"].ToString().Trim();

        Int32 TipoMoneda = Convert.ToInt32(cbxMoneda.SelectedValue);
        Decimal TipoCambio = Convert.ToDecimal(txtTipoCambio.Text);
        if (TipoMoneda == 1)
        {
            if (String.IsNullOrEmpty(txtDebe.Text.ToString().Trim())  || txtDebe.Text.Trim() == "0.00" )
            {
                _SetDet.MontoDebe = Convert.ToDecimal("0.00");
                _SetDet.MontoDebeDolares = Convert.ToDecimal("0.00");
            }
            else
            {
                _SetDet.MontoDebe = Convert.ToDecimal(txtDebe.Text.ToString().Trim());
                _SetDet.MontoDebeDolares = Convert.ToDecimal(Math.Round(Convert.ToDecimal(txtDebe.Text.ToString().Trim()) / TipoCambio, 2, MidpointRounding.AwayFromZero).ToString());
            };

            if (String.IsNullOrEmpty(txtHaber.Text.ToString().Trim()))
            {
                _SetDet.MontoHaber = Convert.ToDecimal("0.00");
                _SetDet.MontoHaberDolares = Convert.ToDecimal("0.00");
            }
            else
            {
                _SetDet.MontoHaber = Convert.ToDecimal(txtHaber.Text.ToString().Trim());
                _SetDet.MontoHaberDolares = Convert.ToDecimal(Math.Round(Convert.ToDecimal(txtHaber.Text.ToString().Trim()) / TipoCambio, 2, MidpointRounding.AwayFromZero).ToString());
            };
        }
        else
        {
            if (String.IsNullOrEmpty(txtDebe.Text.ToString().Trim()))
            {
                _SetDet.MontoDebeDolares = Convert.ToDecimal("0.00");
                _SetDet.MontoDebe = Convert.ToDecimal("0.00");
            }
            else
            {
                _SetDet.MontoDebeDolares = Convert.ToDecimal(txtDebe.Text.ToString().Trim());
                _SetDet.MontoDebe = Convert.ToDecimal(txtDebe.Text.ToString().Trim()) * TipoCambio;
            };
            if (String.IsNullOrEmpty(txtHaber.Text.ToString().Trim()))
            {
                _SetDet.MontoHaberDolares = Convert.ToDecimal("0.00");
                _SetDet.MontoHaber = Convert.ToDecimal("0.00");
            }
            else
            {
                _SetDet.MontoHaberDolares = Convert.ToDecimal(txtHaber.Text.ToString().Trim());
                _SetDet.MontoHaber  = Convert.ToDecimal(txtHaber.Text.ToString().Trim()) * TipoCambio;
            }
        }

        if (TipoMoneda == 1)
        {
            //row["ImporteSoles"] = (Convert.ToDecimal(row["MontoDebe"]) + Convert.ToDecimal(row["MontoHaber"])).ToString();
            //row["ImporteDolares"] = Math.Round(Convert.ToDecimal(row["ImporteSoles"]) / TipoCambio, 2, MidpointRounding.AwayFromZero).ToString();

            _SetDet.ImporteSoles = (_SetDet.MontoDebe + _SetDet.MontoHaber);
            _SetDet.ImporteDolares = Math.Round((_SetDet.ImporteSoles / TipoCambio), 2, MidpointRounding.AwayFromZero);
        }
        else
        {
            _SetDet.ImporteDolares = (_SetDet.MontoDebeDolares + _SetDet.MontoHaberDolares);
            _SetDet.ImporteSoles = Math.Round(_SetDet.ImporteDolares * TipoCambio, 2, MidpointRounding.AwayFromZero);
        }

        _SetDet.CanalContableID = cbxCanalContable.SelectedValue.ToString().Trim();//Canal contable

        if (String.IsNullOrEmpty(ViewState["EMPID"].ToString())) { 
          _SetDet.EmpresaID = 0; } else { 
          _SetDet.EmpresaID = Convert.ToInt32(ViewState["EMPID"].ToString()); 
        };//Empresa

        _SetDet.EmpresaIDRuc = txtRucEmpresa.Text.ToString().Trim();

        
        _SetDet.TipoDocumentoID = Convert.ToInt32(cbxTDocumento.SelectedValue.ToString());
        _SetDet.ProyectoID = Convert.ToInt32(cbxProyecto.SelectedValue.ToString());

        if (txtDia.Text.ToString() == null) { _SetDet.Dia = Convert.ToDateTime(DBNull.Value); } else { _SetDet.Dia = Convert.ToDateTime(txtDia.Text.ToString().Substring(0, 10)); }

        _SetDet.Referencia = txtReferencia.Text.ToString();

        if (String.IsNullOrEmpty(txtFEmision.Text.ToString()))
            _SetDet.FechaEmision = oEval.ManageNullDateTime(DBNull.Value);
        else
            _SetDet.FechaEmision = Convert.ToDateTime(txtFEmision.Text.ToString().Substring(0, 10));

        if (txtFVencimiento.Text.ToString().Length.Equals(0))
            _SetDet.FechaVencimiento = oEval.ManageNullDateTime(DBNull.Value);
        else
            _SetDet.FechaVencimiento = Convert.ToDateTime(txtFVencimiento.Text.ToString().Substring(0, 10));

        _SetDet.AreaID = Convert.ToInt32(cbxArea.SelectedValue.ToString().Trim());
        _SetDet.NumeroDocumento = txtDocumento.Text.ToString();
        _SetDet.TransaccionDocumentoID= ""; // no se de donde llama este parametro ParametrosDetalle[15];
        _SetDet.FlujoCajaID = Convert.ToInt32(cbxFlujoCaja.SelectedValue.Trim());
        _SetDet.PlanCuentaID = ViewState["PCID"].ToString();
        _SetDet.AsientoContableDetalleIDTransferencia = "0"; // cuando aya cambios ParametrosDetalle[18];
        _SetDet.PeriodoID = Convert.ToDateTime(txtDia.Text).Month.ToString();

        _SetDet.CanalContableIDNombre = cbxCanalContable.SelectedItem.Text.ToString().Trim();
        _SetDet.EmpresaIDNombre = txtRucEmpresa.Text;//cbxEmpresa.Text.ToString();
        _SetDet.TipoDocumentoIDNombre = cbxTDocumento.SelectedItem.Text.ToString();
        _SetDet.ProyectoIDNombre = cbxProyecto.SelectedItem.Text.ToString();
        _SetDet.AreaIDNombre = cbxArea.SelectedItem.Text.ToString().Trim();
        _SetDet.FlujoCajaIDNombre = cbxFlujoCaja.SelectedItem.Text.ToString();
        _SetDet.PlanCuentaIDNombre = ViewState["NombrePlanCuenta"].ToString();
        _SetDet.Transferencia = "0";

        _SetDet.BEAsientosContables.TipoCambio = txtTipoCambio.Text;
        _SetDet.BEAsientosContables.MonedaID = Convert.ToInt32(cbxMoneda.SelectedValue);
        _SetDet.EstadoRegTemp = "N";

        //row["ImporteAnteriorSoles"] = "0";
        //row["ImporteAnteriorDolares"] = "0";

        if (!String.IsNullOrEmpty(ViewState["rqArea"].ToString()))
        {
            if (ViewState["rqArea"].ToString() == "1")
            {
                Int32 Cont1 = 0;
                for (Int32 i = 0; i < GridDistribucionAreas.Rows.Count; i++)
                {
                    Decimal ImporteActual = Convert.ToDecimal(((TextBox)this.GridDistribucionAreas.Rows[i].FindControl("txtImporte")).Text);
                    Decimal ImporteSoles, ImporteDolares;
                    //if (ImporteActual > 0)
                    //{
                        if (TipoMoneda == 1)
                        {
                            ImporteSoles = ImporteActual;
                            ImporteDolares = Math.Round(Convert.ToDecimal(ImporteActual / TipoCambio), 2, MidpointRounding.AwayFromZero);
                        }
                        else
                        {
                            ImporteSoles = Math.Round(Convert.ToDecimal(ImporteActual * TipoCambio), 2, MidpointRounding.AwayFromZero);
                            ImporteDolares = ImporteActual;
                        }

                        BEAsientosDetalleUnidadNegocio BEAUN = new BEAsientosDetalleUnidadNegocio();
                        BEAUN.AsientoContableDetalleIDTemp =  _SetDet.AsientoContableDetalleIDTemp;
                        BEAUN.AsientoContableDetalleID=_SetDet.AsientoContableDetalleID;
                        BEAUN.BEAreas.AreaId = _SetDet.AreaID;
                        BEAUN.UnidadNegocioID = Convert.ToInt32(((Label)this.GridDistribucionAreas.Rows[i].FindControl("lblUnidadNegocioID")).Text);
                        BEAUN.BEUnidadesDeNegocio.NombreUnidadNegocio = (((Label)this.GridDistribucionAreas.Rows[i].FindControl("txtNomUnidadNego")).Text.Trim());
                        BEAUN.BEUnidadesDeNegocio_Areas.Participacion = Convert.ToDecimal(((Label)this.GridDistribucionAreas.Rows[i].FindControl("lblParticipacion")).Text);
                        BEAUN.ImporteSoles = ImporteSoles;
                        BEAUN.ImporteDolares =ImporteDolares; 
                        BEAUN.Importe =ImporteActual;

                        Cls_AsientoContable.TempAsientoDetalleAUN.Add(BEAUN);
                }
         }
        }

        //((DataTable)Session["DtDetalleAsiento"]).Rows.Add(row);
        Cls_AsientoContable.TempCreaAsientContDetalle.Add(blDetalle);
        blDetalle = null;
        //Limpia_CajaDetalle(0);
    }
    private void UpdDetalleAsiento(String CodigoTemp)
    {
        //Int32 Index = (CodigoTemp - 1);
        Int32 Index = BuscaIndex(CodigoTemp);
        ///Cls_AsientoContable.TempCreaAsientContDetalle[Index].MontoDebe = 987;

        var _setUpDetalle = Cls_AsientoContable.TempCreaAsientContDetalle[Index];

        _setUpDetalle.AsientoContableDetalleID = ViewState["AsientoDetalleID"].ToString();
        _setUpDetalle.AsientoContableID = ViewState["ID"].ToString();

        Int32 TipoMoneda = Convert.ToInt32(cbxMoneda.SelectedValue);
        Decimal TipoCambio = Convert.ToDecimal(txtTipoCambio.Text);

        if (TipoMoneda == 1)
        {
            if (String.IsNullOrEmpty(txtDebe.Text.ToString().Trim()) || txtDebe.Text.Trim() == "0.00")
            {
                _setUpDetalle.MontoDebe = Convert.ToDecimal("0.00");
                _setUpDetalle.MontoDebeDolares = Convert.ToDecimal("0.00");
            }
            else
            {
                _setUpDetalle.MontoDebe = Convert.ToDecimal(txtDebe.Text.ToString().Trim());
                _setUpDetalle.MontoDebeDolares = Convert.ToDecimal(Math.Round(Convert.ToDecimal(txtDebe.Text.ToString().Trim()) / TipoCambio, 2, MidpointRounding.AwayFromZero).ToString());
            };

            if (String.IsNullOrEmpty(txtHaber.Text.ToString().Trim()))
            {
                _setUpDetalle.MontoHaber = Convert.ToDecimal("0.00");
                _setUpDetalle.MontoHaberDolares = Convert.ToDecimal("0.00");
            }
            else
            {
                _setUpDetalle.MontoHaber = Convert.ToDecimal(txtHaber.Text.ToString().Trim());
                _setUpDetalle.MontoHaberDolares = Convert.ToDecimal(Math.Round(Convert.ToDecimal(txtHaber.Text.ToString().Trim()) / TipoCambio, 2, MidpointRounding.AwayFromZero).ToString());
            };
        }
        else
        {
            if (String.IsNullOrEmpty(txtDebe.Text.ToString().Trim()))
            {
                _setUpDetalle.MontoDebeDolares = Convert.ToDecimal("0.00");
                _setUpDetalle.MontoDebe = Convert.ToDecimal("0.00");
            }
            else
            {
                _setUpDetalle.MontoDebeDolares = Convert.ToDecimal(txtDebe.Text.ToString().Trim());
                _setUpDetalle.MontoDebe = Convert.ToDecimal(txtDebe.Text.ToString().Trim()) * TipoCambio;
            };
            if (String.IsNullOrEmpty(txtHaber.Text.ToString().Trim()))
            {
                _setUpDetalle.MontoHaberDolares = Convert.ToDecimal("0.00");
                _setUpDetalle.MontoHaber = Convert.ToDecimal("0.00");
            }
            else
            {
                _setUpDetalle.MontoHaberDolares = Convert.ToDecimal(txtHaber.Text.ToString().Trim());
                _setUpDetalle.MontoHaber = Convert.ToDecimal(txtHaber.Text.ToString().Trim()) * TipoCambio;
            }
        }

        if (TipoMoneda == 1)
        {
            _setUpDetalle.ImporteSoles = (_setUpDetalle.MontoDebe + _setUpDetalle.MontoHaber);
            _setUpDetalle.ImporteDolares = Math.Round((_setUpDetalle.ImporteSoles / TipoCambio), 2, MidpointRounding.AwayFromZero);
        }
        else
        {
            _setUpDetalle.ImporteDolares = (_setUpDetalle.MontoDebeDolares + _setUpDetalle.MontoHaberDolares);
            _setUpDetalle.ImporteSoles = Math.Round(_setUpDetalle.ImporteDolares * TipoCambio, 2, MidpointRounding.AwayFromZero);
        }

        _setUpDetalle.CanalContableID = cbxCanalContable.SelectedValue.ToString().Trim();//Canal contable
        _setUpDetalle.EmpresaID = Convert.ToInt32(ViewState["EMPID"].ToString());//Empresa
        _setUpDetalle.EmpresaIDRuc = txtRucEmpresa.Text.Trim();

      _setUpDetalle.TipoDocumentoID = Convert.ToInt32(cbxTDocumento.SelectedValue.ToString());
        _setUpDetalle.ProyectoID  = Convert.ToInt32(cbxProyecto.SelectedValue.ToString());

        if (txtDia.Text.ToString() == null) { _setUpDetalle.Dia = Convert.ToDateTime(DBNull.Value); } else { _setUpDetalle.Dia = Convert.ToDateTime(txtDia.Text.ToString().Substring(0, 10)); }

        _setUpDetalle.Referencia = txtReferencia.Text.ToString();

        if (String.IsNullOrEmpty(txtFEmision.Text.ToString()))
            _setUpDetalle.FechaEmision = oEval.ManageNullDateTime(DBNull.Value);
        else
            _setUpDetalle.FechaEmision = Convert.ToDateTime(txtFEmision.Text.ToString().Substring(0, 10));


        if (txtFVencimiento.Text.ToString().Length.Equals(0))
            _setUpDetalle.FechaVencimiento = oEval.ManageNullDateTime(DBNull.Value);
        else
            _setUpDetalle.FechaVencimiento = Convert.ToDateTime(txtFVencimiento.Text.ToString().Substring(0, 10));

        _setUpDetalle.AreaID = Convert.ToInt32(cbxArea.SelectedValue.ToString().Trim());
        _setUpDetalle.NumeroDocumento = txtDocumento.Text.ToString();
        _setUpDetalle.TransaccionDocumentoID = ""; // no se de donde llama este parametro ParametrosDetalle[15];
        _setUpDetalle.FlujoCajaID = Convert.ToInt32(cbxFlujoCaja.SelectedValue.Trim());
        _setUpDetalle.PlanCuentaID = ViewState["PCID"].ToString();
        _setUpDetalle.AsientoContableDetalleIDTransferencia = "0"; // cuando aya cambios ParametrosDetalle[18];
        _setUpDetalle.PeriodoID = Convert.ToDateTime(txtDia.Text).Month.ToString();

        _setUpDetalle.CanalContableIDNombre = cbxCanalContable.SelectedItem.Text.ToString().Trim();
        _setUpDetalle.EmpresaIDNombre = txtRucEmpresa.Text;//cbxEmpresa.Text.ToString();
        _setUpDetalle.TipoDocumentoIDNombre = cbxTDocumento.SelectedItem.Text.ToString();
        _setUpDetalle.ProyectoIDNombre = cbxProyecto.SelectedItem.Text.ToString();
        _setUpDetalle.AreaIDNombre = cbxArea.SelectedItem.Text.ToString().Trim();
        _setUpDetalle.FlujoCajaIDNombre = cbxFlujoCaja.SelectedItem.Text.ToString();
        _setUpDetalle.PlanCuentaIDNombre = ViewState["NombrePlanCuenta"].ToString();
        _setUpDetalle.Transferencia = "0";

        _setUpDetalle.BEAsientosContables.TipoCambio = txtTipoCambio.Text;
        _setUpDetalle.BEAsientosContables.MonedaID = Convert.ToInt32(cbxMoneda.SelectedValue);

        if (ViewState["AsientoDetalleID"].ToString() == "0")
            _setUpDetalle.EstadoRegTemp = "N";
            //row["Estado"] = "N";
        else
            _setUpDetalle.EstadoRegTemp = "M";
            //row["Estado"] = "M";


        if (!String.IsNullOrEmpty(ViewState["rqArea"].ToString()))
        {
            if (ViewState["rqArea"].ToString() == "1")
            {
                
               EliminaAsientoDetalleAUN(_setUpDetalle.AsientoContableDetalleIDTemp);

                for (Int32 i = 0; i < GridDistribucionAreas.Rows.Count; i++)
                {
                    Decimal ImporteActual = Convert.ToDecimal(((TextBox)this.GridDistribucionAreas.Rows[i].FindControl("txtImporte")).Text);
                    Decimal ImporteSoles, ImporteDolares;
                    //if (ImporteActual > 0)
                    //{
                    if (TipoMoneda == 1)
                    {
                        ImporteSoles = ImporteActual;
                        ImporteDolares = Math.Round(Convert.ToDecimal(ImporteActual / TipoCambio), 2, MidpointRounding.AwayFromZero);
                    }
                    else
                    {
                        ImporteSoles = Math.Round(Convert.ToDecimal(ImporteActual * TipoCambio), 2, MidpointRounding.AwayFromZero);
                        ImporteDolares = ImporteActual;
                    }

                    BEAsientosDetalleUnidadNegocio BEAUN = new BEAsientosDetalleUnidadNegocio();
                    BEAUN.AsientoContableDetalleIDTemp = _setUpDetalle.AsientoContableDetalleIDTemp;
                    BEAUN.AsientoContableDetalleID = _setUpDetalle.AsientoContableDetalleID;
                    BEAUN.BEAreas.AreaId = _setUpDetalle.AreaID;
                    BEAUN.UnidadNegocioID = Convert.ToInt32(((Label)this.GridDistribucionAreas.Rows[i].FindControl("lblUnidadNegocioID")).Text);
                    BEAUN.BEUnidadesDeNegocio.NombreUnidadNegocio = (((Label)this.GridDistribucionAreas.Rows[i].FindControl("txtNomUnidadNego")).Text.Trim());
                    BEAUN.BEUnidadesDeNegocio_Areas.Participacion = Convert.ToDecimal(((Label)this.GridDistribucionAreas.Rows[i].FindControl("lblParticipacion")).Text);
                    BEAUN.ImporteSoles = ImporteSoles;
                    BEAUN.ImporteDolares = ImporteDolares;
                    BEAUN.Importe = ImporteActual;

                    Cls_AsientoContable.TempAsientoDetalleAUN.Add(BEAUN);
                }
            }
        }

        //Cls_AsientoContable.TempCreaAsientContDetalle.ElementAt .Insert(1,_setUpDetalle);
        //Limpia_CajaDetalle(1);
    }
    private Int32 f_guardar(Int32 intOpcGuardar)
    {
        Int32 intRetornar = 0;

        Int32 TipoMoneda = Convert.ToInt32(cbxMoneda.SelectedValue.ToString());

        Decimal xSoles = Convert.ToDecimal(lblDiferenciaSoles.Text);
        Decimal xDolares = Convert.ToDecimal(lblDiferenciaDolares.Text);
        if (xSoles == 0 && xDolares == 0)
        {
            /////////INICIO GRABA CABECERA//////////
            BEAsientosContables objet_AsientosContables = new BEAsientosContables();
            BLAsientosContables objlg_AsientosContables = new BLAsientosContables();

            objet_AsientosContables.Cabecera = Cls_Enums.TablasAsientosDetalle.Cabecera;
            objet_AsientosContables.Empresa = ViewState["EmpresaID"].ToString();
            objet_AsientosContables.Anio = ViewState["txtPeriodo"].ToString();

            objet_AsientosContables.AsientoContableID = ViewState["ID"].ToString();
            objet_AsientosContables.SubDiarioID = ViewState["SubDiarioID"].ToString();
            objet_AsientosContables.HotelID = Convert.ToInt32(ViewState["HotelID"].ToString());
            objet_AsientosContables.TipoConversionMonedaID = cbxTipoConversion.SelectedValue.ToString();
            objet_AsientosContables.Glosa = txtGlosa.Text.ToString().Trim().Replace("'", "´");
            objet_AsientosContables.Comprobante = "";
            objet_AsientosContables.Dia = Convert.ToDateTime(txtDia.Text.ToString());
            objet_AsientosContables.MonedaID = Convert.ToInt32(cbxMoneda.SelectedValue.ToString());
            objet_AsientosContables.TipoCambio = txtTipoCambio.Text.ToString();

            ////////// Inicio Campos Auditores. //////////
            objet_AsientosContables.BEAuditores.UsuarioID = Convert.ToInt32(ViewState["UsuarioID"].ToString());
            objet_AsientosContables.BEAuditores.UsuarioIdAutorizado = 0;
            objet_AsientosContables.BEAuditores.IPEquipo = Cls_Enums.f_DatosPC.IPPC;
            objet_AsientosContables.BEAuditores.UsuarioActualEquipo = Cls_Enums.f_DatosPC.UsuarioPC;
            objet_AsientosContables.BEAuditores.NombreEquipo = Cls_Enums.f_DatosPC.NombrePC;
            objet_AsientosContables.BEAuditores.TablaMovimientoID = Cls_Enums.TablaMovimientos.Asientos;

            //if (chkBloqueado.Checked == true)
            //{
            //    objet_AsientosContables.Bloqueado = 1;
            //}
            //else
            //{
            //    objet_AsientosContables.Bloqueado = 0;
            //}
            
            //objet_AsientosContables.Bloqueado = chkBloqueado.Checked;
            ////////// Fin Campos Auditores. //////////

            int AsientoContableID = objlg_AsientosContables.fnInsUpdAsientosContables(objet_AsientosContables);
            ViewState["ID"] = AsientoContableID.ToString();
            objet_AsientosContables = null;
            objlg_AsientosContables = null;

            /////////FIN GRABA CABECERA//////////

            BLAsientosContablesDetalle objlg_AsientosContablesDetalle = new BLAsientosContablesDetalle();
            List<BEAsientosContablesDetalle> loList = new List<BEAsientosContablesDetalle>();
            List<BEAsientosContablesDetalle> loListTemp = Cls_AsientoContable.TempCreaAsientContDetalle;
            List<BEAsientosContablesDetalle> lstNM = new List<BEAsientosContablesDetalle>();
            List<BEAsientosContablesDetalle> lstElimina = new List<BEAsientosContablesDetalle>();

            for (Int32 i = 0; i < loListTemp.Count; i++)
            {
                if (loListTemp[i].Transferencia.ToString() == "0")
                {
                    BEAsientosContablesDetalle objet_AsientosContablesDetalle = new BEAsientosContablesDetalle();
                    objet_AsientosContablesDetalle.AsientoContableDetalleID = loListTemp[i].AsientoContableDetalleID;
                    objet_AsientosContablesDetalle.AsientoContableID = ViewState["ID"].ToString();

                    if (TipoMoneda == 1)
                    {
                        objet_AsientosContablesDetalle.MontoDebe = loListTemp[i].MontoDebe;
                        objet_AsientosContablesDetalle.MontoHaber = loListTemp[i].MontoHaber;
                    }
                    else
                    {
                        objet_AsientosContablesDetalle.MontoDebe = loListTemp[i].MontoDebeDolares;
                        objet_AsientosContablesDetalle.MontoHaber = loListTemp[i].MontoHaberDolares;
                    }

                    if (loListTemp[i].CanalContableID == "")
                    {
                        objet_AsientosContablesDetalle.CanalContableID = "0";
                    }
                    else
                    {
                        objet_AsientosContablesDetalle.CanalContableID = loListTemp[i].CanalContableID;
                    }
                    objet_AsientosContablesDetalle.EmpresaID = loListTemp[i].EmpresaID;
                    objet_AsientosContablesDetalle.TipoDocumentoID = loListTemp[i].TipoDocumentoID;
                    objet_AsientosContablesDetalle.ProyectoID = loListTemp[i].ProyectoID;
                    objet_AsientosContablesDetalle.Dia = loListTemp[i].Dia; // Convert.ToDateTime(((DataTable)Session["DtDetalleAsiento"]).Rows[i][9].ToString());
                    objet_AsientosContablesDetalle.Referencia = loListTemp[i].Referencia;
                    objet_AsientosContablesDetalle.FechaEmision = loListTemp[i].FechaEmision;
                    objet_AsientosContablesDetalle.FechaVencimiento = loListTemp[i].FechaVencimiento;

                    objet_AsientosContablesDetalle.AreaID = loListTemp[i].AreaID;
                    objet_AsientosContablesDetalle.NumeroDocumento = loListTemp[i].NumeroDocumento;
                    objet_AsientosContablesDetalle.TransaccionDocumentoID = loListTemp[i].TransaccionDocumentoID;
                    objet_AsientosContablesDetalle.FlujoCajaID = loListTemp[i].FlujoCajaID;
                    objet_AsientosContablesDetalle.PlanCuentaID = loListTemp[i].PlanCuentaID;
                    objet_AsientosContablesDetalle.AsientoContableDetalleIDTransferencia = loListTemp[i].AsientoContableDetalleIDTransferencia;
                    objet_AsientosContablesDetalle.PeriodoID = loListTemp[i].PeriodoID;

                    objet_AsientosContablesDetalle.ImporteSoles = loListTemp[i].ImporteSoles;
                    objet_AsientosContablesDetalle.ImporteDolares = loListTemp[i].ImporteDolares;

                    objet_AsientosContablesDetalle.BEAsientosContables.TipoCambio = loListTemp[i].BEAsientosContables.TipoCambio;
                    objet_AsientosContablesDetalle.BEAsientosContables.MonedaID = loListTemp[i].BEAsientosContables.MonedaID;
                    objet_AsientosContablesDetalle.Estado = loListTemp[i].EstadoRegTemp;

                    //////// Inicio Campos Auditores. //////////
                    objet_AsientosContablesDetalle.BEAuditores.UsuarioID = Convert.ToInt32(ViewState["UsuarioID"].ToString());
                    objet_AsientosContablesDetalle.BEAuditores.UsuarioIdAutorizado = 0;
                    objet_AsientosContablesDetalle.BEAuditores.IPEquipo = Cls_Enums.f_DatosPC.IPPC;
                    objet_AsientosContablesDetalle.BEAuditores.UsuarioActualEquipo = Cls_Enums.f_DatosPC.UsuarioPC;
                    objet_AsientosContablesDetalle.BEAuditores.NombreEquipo = Cls_Enums.f_DatosPC.NombrePC;
                    objet_AsientosContablesDetalle.BEAuditores.TablaMovimientoID = Cls_Enums.TablaMovimientos.Asientosdetalle;
                    //////// Fin Campos Auditores. //////////
                     
                    if (objet_AsientosContablesDetalle.Estado == "N" || objet_AsientosContablesDetalle.Estado == "M")
                    {
                        if (loListTemp[i].AreaID > 0)
                        {
                            List<BEAsientosDetalleUnidadNegocio> Listado = Lista_AUN(loListTemp[i].AsientoContableDetalleIDTemp, Cls_AsientoContable.TempAsientoDetalleAUN);

                            for (int iaun = 0; iaun < Listado.Count; iaun++)
                            {
                                if (Listado[iaun].UnidadNegocioID == 1 && Listado[iaun].ImporteSoles != 0)
                                {
                                    objet_AsientosContablesDetalle.UnidadNegocioID_1 = Convert.ToInt32(Listado[iaun].UnidadNegocioID);
                                    objet_AsientosContablesDetalle.ImporteSoles_1 = Convert.ToDecimal(Listado[iaun].ImporteSoles);
                                    objet_AsientosContablesDetalle.ImporteDolares_1 = Convert.ToDecimal(Listado[iaun].ImporteDolares);
                                }
                                if (Listado[iaun].UnidadNegocioID == 2 && Listado[iaun].ImporteSoles != 0)
                                {
                                    objet_AsientosContablesDetalle.UnidadNegocioID_2 = Convert.ToInt32(Listado[iaun].UnidadNegocioID);
                                    objet_AsientosContablesDetalle.ImporteSoles_2 = Convert.ToDecimal(Listado[iaun].ImporteSoles);
                                    objet_AsientosContablesDetalle.ImporteDolares_2 = Convert.ToDecimal(Listado[iaun].ImporteDolares);
                                }

                                if (Listado[iaun].UnidadNegocioID == 3 && Listado[iaun].ImporteSoles != 0)
                                {
                                    objet_AsientosContablesDetalle.UnidadNegocioID_3 = Convert.ToInt32(Listado[iaun].UnidadNegocioID);
                                    objet_AsientosContablesDetalle.ImporteSoles_3 = Convert.ToDecimal(Listado[iaun].ImporteSoles);
                                    objet_AsientosContablesDetalle.ImporteDolares_3 = Convert.ToDecimal(Listado[iaun].ImporteDolares);
                                }
                                if (Listado[iaun].UnidadNegocioID == 4 && Listado[iaun].ImporteSoles != 0)
                                {
                                    objet_AsientosContablesDetalle.UnidadNegocioID_4 = Convert.ToInt32(Listado[iaun].UnidadNegocioID);
                                    objet_AsientosContablesDetalle.ImporteSoles_4 = Convert.ToDecimal(Listado[iaun].ImporteSoles);
                                    objet_AsientosContablesDetalle.ImporteDolares_4 = Convert.ToDecimal(Listado[iaun].ImporteDolares);
                                }
                            }
                        }
                    }

                    if (objet_AsientosContablesDetalle.Estado == "N" || objet_AsientosContablesDetalle.Estado == "M")
                    { lstNM.Add(objet_AsientosContablesDetalle); }
                    else if (objet_AsientosContablesDetalle.Estado == "E")
                    {
                        objet_AsientosContablesDetalle.BEAsientosContables.Detallecabecera = Cls_Enums.TablasAsientosDetalle.Detallecabecera;
                        objet_AsientosContablesDetalle.BEAsientosContables.Empresa = ViewState["EmpresaID"].ToString();
                        objet_AsientosContablesDetalle.BEAsientosContables.Anio = ViewState["txtPeriodo"].ToString();
                        objet_AsientosContablesDetalle.BEAsientosContables.HotelID = Convert.ToInt32(ViewState["HotelID"].ToString());

                        lstElimina.Add(objet_AsientosContablesDetalle);
                    }
                    else
                    { loList.Add(objet_AsientosContablesDetalle); }
                }
            }
            for (Int32 i = 0; i < lstElimina.Count; i++)
            {
                objlg_AsientosContablesDetalle.fnSelAsientosContablesDetalleEliminar(lstElimina[i]);
            }
            int registro = objlg_AsientosContablesDetalle.fnInsUpdAsientosContablesDetalle(lstNM, ViewState["EmpresaID"].ToString(), ViewState["txtPeriodo"].ToString(), null,0);

        //////////    // if (registro > 0) { showMessage("Los Datos que ingreso ya estan registrados"); return; };
        //////////    //objet_AsientosContablesDetalle = null;

        //////////    objlg_AsientosContablesDetalle = null;

        //////////    //listar_Detalle(ViewState["ID"].ToString(), "");
        //////////    intRetornar = registro;
        //////////    if (registro == 0 && intOpcGuardar == 0)
        //////////    {
        //////////        ScriptManager.RegisterStartupScript(this, this.GetType(), "", "cerrar()", true);
        //////////    }
        //////////    //}
        //////////    //else
        //////////    //{
        //////////    //    showMessage("Ingrese registro para Guardar el Plan Contable.");
        //////////    //    intRetornar = -1;
        //////////    //}
        }
        else
        {
            showMessage("Para finalizar el Asiento La sumatoria de los montos, Debe y Haber deben ser iguales");
            intRetornar = -1;
        }

        return intRetornar;
    }

    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        ViewState["Poss"] = "";
        Limpia_CajaDetalle(0);
        btnAgregar.ToolTip = "Agregar";
        btnAgregar.ToolTip = "Agregar";

        //Cls_AsientoContable.TempCreaAsientContDetalle.Clear();
        //Cls_AsientoContable.TempAsientoDetalleAUN.Clear();
        //ListaAsientos();
    }
    protected void btnGuardarRegresar_Click(object sender, EventArgs e)
    {
        showMessage(this.cbxArea.SelectedItem.Text);
    }
    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        f_guardar(0);
    }
    protected void btnSalir_Click(object sender, EventArgs e)
    {
        Cls_AsientoContable.TempCreaAsientContDetalle.Clear();
        ListaAsientos();
    }
    protected void cbxMoneda_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Page.Validate("Grupo2");
        if (this.cbxMoneda.SelectedValue == "0") { this.cbxMoneda.Focus(); return; }

        this.cbxTipoConversion.SelectedValue = "0";
        this.txtTipoCambio.Text = "0.00";
        this.txtTipoCambio.ReadOnly = true;
        this.cbxTipoConversion.Focus();

    }
    protected void cbxTipoConversion_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.txtTipoCambio.Text = "";

        if (this.cbxTipoConversion.SelectedValue == "0") { this.cbxTipoConversion.Focus(); return; }

        if (String.IsNullOrEmpty(this.txtDia.Text.ToString()))
        {
            showMessage("Seleccione la Fecha");
            this.cbxTipoConversion.Text = "";
            return;
        }

        if (this.cbxMoneda.SelectedValue.ToString() == "0")
        {
            showMessage("Seleccione la Moneda.");
            this.cbxTipoConversion.SelectedValue = "0";
            return;
        }

        BETipoDeConversionesMoneda objet_TipoDeConversionesMoneda = new BETipoDeConversionesMoneda();
        BLTipoDeConversionesMoneda objlg_TipoDeConversionesMoneda = new BLTipoDeConversionesMoneda();
        List<BETipoDeConversionesMoneda> Col_TipoDeConversionesMoneda;

        Col_TipoDeConversionesMoneda = objlg_TipoDeConversionesMoneda.fnSelTipoDeConversionesMonedaDin("TipoConversionMonedaID=" + this.cbxTipoConversion.SelectedValue.Trim(), "");

        String strMoneda = null;

        if (Col_TipoDeConversionesMoneda.Count() != 0)
        {
            strMoneda = Col_TipoDeConversionesMoneda[0].CodigoTipoConversionMoneda;
            if (strMoneda == "V" || strMoneda == "C")
            {
                this.txtTipoCambio.ReadOnly = true;
                this.txtPlanCuenta.Focus();
                //this.txtTipoCambio.MaxValue = 5;
            }
            else
            {
                this.txtTipoCambio.Text = "";
                this.txtTipoCambio.ReadOnly = false;
                this.txtTipoCambio.Focus();
                //this.txtTipoCambio.MaxValue = 5;
                //this.txtTipoCambio.Focus();0
            }
        }

        objet_TipoDeConversionesMoneda = null;
        objlg_TipoDeConversionesMoneda = null;
        Col_TipoDeConversionesMoneda = null;

        if (!string.IsNullOrEmpty(strMoneda))
        {
            BETiposDeCambio objet_TiposDeCambio = new BETiposDeCambio();
            BLTiposDeCambio objlg_TiposDeCambio = new BLTiposDeCambio();
            List<BETiposDeCambio> Col_TiposDeCambio;

            String strFecha = String.Format("{0:dd/MM/yyyy}", this.txtDia.Text).ToString();

            Col_TiposDeCambio = objlg_TiposDeCambio.fnSelTiposDeCambioDin("monedaID=" + this.cbxMoneda.SelectedValue.Trim(), "", strFecha);

            if (Col_TiposDeCambio.Count() != 0)
            {

                if (strMoneda == "V")
                {
                    if (Col_TiposDeCambio[0].Venta == null)
                    {
                        this.txtTipoCambio.Text = "0.00";
                    }
                    else
                    {
                        this.txtTipoCambio.Text = Col_TiposDeCambio[0].Venta.ToString();
                    }
                }
                else if (strMoneda == "C")
                {
                    if (Col_TiposDeCambio[0].Compra == null)
                    {
                        this.txtTipoCambio.Text = "0.00";
                        this.txtTipoCambio.Focus();
                    }
                    else
                    {
                        this.txtTipoCambio.Text = Col_TiposDeCambio[0].Compra.ToString();
                    }
                }
                else
                {
                    this.txtTipoCambio.Text = "0.00";
                }

            }
            else
            {
                this.txtTipoCambio.Text = "0.00";
            }

            objet_TiposDeCambio = null;
            objlg_TiposDeCambio = null;
            Col_TiposDeCambio = null;
        }

    }

    #region Llena_Combos
    private void Combo_Moneda()
    {
        BEMonedas objet_Monedas = new BEMonedas();
        BLMonedas objlg_Monedas = new BLMonedas();
        List<BEMonedas> Col_Monedas;


        Col_Monedas = objlg_Monedas.fnSelMonedasAll();
        cbxMoneda.DataSource = Col_Monedas;
        cbxMoneda.DataValueField = "MonedaID";
        cbxMoneda.DataTextField = "Nombre";
        cbxMoneda.DataBind();

        cbxMoneda.Items.Insert(0, "Seleccione...");
        cbxMoneda.Items[0].Value = "0";

        objet_Monedas = null;
        objlg_Monedas = null;
    }
    private void Combo_TipoConversionMoneda(String strCondicion)
    {
        BETipoDeConversionesMoneda objet_TipoDeConversionesMoneda = new BETipoDeConversionesMoneda();
        BLTipoDeConversionesMoneda objlg_TipoDeConversionesMoneda = new BLTipoDeConversionesMoneda();
        List<BETipoDeConversionesMoneda> Col_TipoDeConversionesMoneda;

        Col_TipoDeConversionesMoneda = objlg_TipoDeConversionesMoneda.fnSelTipoDeConversionesMonedaDin(strCondicion, "[CodigoTipoConversionMoneda]");

        this.cbxTipoConversion.DataSource = Col_TipoDeConversionesMoneda;
        this.cbxTipoConversion.DataTextField = "NombreTipoConversionMoneda";
        this.cbxTipoConversion.DataValueField = "TipoConversionMonedaID";
        this.cbxTipoConversion.DataBind();

        this.cbxTipoConversion.Items.Insert(0, "Seleccione...");
        this.cbxTipoConversion.Items[0].Value = "0";



        objet_TipoDeConversionesMoneda = null;
        objlg_TipoDeConversionesMoneda = null;
    }
    private void Combo_CanalContable()
    {
        BECanalesContables objet_CanalesContables = new BECanalesContables();
        BLCanalesContables objlg_CanalesContables = new BLCanalesContables();
        List<BECanalesContables> Col_CanalesContables;
        Col_CanalesContables = objlg_CanalesContables.fnSelCanalesContablesDin("Estado=0", "[CodigoCanalContable]");


        //this.cbxCanaContable.DataSource = objlg_CanalesContables.fnSelCanalesContablesDin("Estado=0", "[CodigoCanalContable]");
        //this.cbxCanaContable.DataTextField="CodigoCanalContable";
        //this.cbxCanaContable.DataValueField="CanalContableID";
        //this.cbxCanaContable.DataBind();

        this.cbxCanalContable.Items.Insert(0, "");
        this.cbxCanalContable.Items[0].Value = "0";

        for (Int32 i = 0; i < Col_CanalesContables.Count; i++)
        {
            this.cbxCanalContable.Items.Insert(i + 1, Col_CanalesContables[i].CodigoCanalContable + " -> " + Col_CanalesContables[i].NombreCanalContable.Trim());
            this.cbxCanalContable.Items[i + 1].Value = Col_CanalesContables[i].CanalContableID.ToString().Trim();
        }
        objet_CanalesContables = null;
        objlg_CanalesContables = null;
    }

    private void Combo_TipoDocumentos()
    {
        BETipoDocumentos objet_TipoDocumentos = new BETipoDocumentos();
        BLTipoDocumentos objlg_TipoDocumentos = new BLTipoDocumentos();
        //List<BETipoDocumentos> Col_TipoDocumentos;

        //Col_TipoDocumentos = objlg_TipoDocumentos.fnSelTipoDocumentosDin("", "NombreDocumento");

        this.cbxTDocumento.DataSource = objlg_TipoDocumentos.fnSelTipoDocumentosDin("", "NombreDocumento");
        this.cbxTDocumento.DataTextField = "NombreDocumento";
        this.cbxTDocumento.DataValueField = "TipoDocumentoID";
        this.cbxTDocumento.DataBind();
        this.cbxTDocumento.Items.Insert(0, "");
        this.cbxTDocumento.Items[0].Value = "0";

        objet_TipoDocumentos = null;
        objlg_TipoDocumentos = null;

    }

    private void Combo_Area()
    {
        BEAreas objet_Areas = new BEAreas();
        BLAreas objlg_Areas = new BLAreas();
        //List<BEAreas> Col_Areas;
        //Col_Areas = objlg_Areas.fnSelAreasDin("Estado=0", "NombreArea");


        this.cbxArea.DataSource = objlg_Areas.fnSelAreasDin("Estado=0", "NombreArea");
        this.cbxArea.DataTextField = "NombreArea";
        this.cbxArea.DataValueField = "AreaId";
        this.cbxArea.DataBind();
        this.cbxArea.Items.Insert(0, "");
        this.cbxArea.Items[0].Value = "0";

        objet_Areas = null;
        objlg_Areas = null;

    }
    private void Combo_Proyectos()
    {
        BEProyectos objet_Proyectos = new BEProyectos();
        BLProyectos objlg_Proyectos = new BLProyectos();
        //List<BEProyectos> Col_Proyectos;
        //Col_Proyectos = objlg_Proyectos.fnSelProyectosDin("Estado=0", "NombreProyecto");


        this.cbxProyecto.DataSource = objlg_Proyectos.fnSelProyectosDin("Estado=0", "NombreProyecto");
        this.cbxProyecto.DataTextField = "NombreProyecto";
        this.cbxProyecto.DataValueField = "ProyectoID";
        this.cbxProyecto.DataBind();
        this.cbxProyecto.Items.Insert(0, "");
        this.cbxProyecto.Items[0].Value = "0";


        objet_Proyectos = null;
        objlg_Proyectos = null;
    }
    private void Combo_flujoCaja()
    {
        BEFlujoCaja objet_FlujoCaja = new BEFlujoCaja();
        BLFlujoCaja objlg_FlujoCaja = new BLFlujoCaja();

        this.cbxFlujoCaja.DataSource = objlg_FlujoCaja.fnSelFlujoCajaDin("Estado=0", "NombreFlujoCaja");
        this.cbxFlujoCaja.DataTextField = "NombreFlujoCaja";
        this.cbxFlujoCaja.DataValueField = "FlujoCajaID";
        this.cbxFlujoCaja.DataBind();
        this.cbxFlujoCaja.Items.Insert(0, "");
        this.cbxFlujoCaja.Items[0].Value = "0";

        objet_FlujoCaja = null;
        objlg_FlujoCaja = null;
    }



    #endregion
    
    protected void showMessage(string strMessage)
    {
        String Mensaje = strMessage.Replace("'", "").Replace(",", "-").Replace("\r\n", " ");
        ScriptManager.RegisterStartupScript(this, this.GetType(), "MENSAJE", "alert('" + Mensaje + "');", true);
    }

    protected void cbxArea_SelectedIndexChanged(object sender, EventArgs e)
    {
            this.cbxArea.CssClass = Cls_Enums.ColorValidacion.CssValidoCaja;
            this.GridDistribucionAreas.CssClass = Cls_Enums.ColorValidacion.CssValidoCaja;
            Listar_Distribucion(Convert.ToInt32(cbxArea.SelectedValue));
            if (ViewState["rqArea"].ToString() == "1")
            {
                Decimal Monto;

                if (String.IsNullOrEmpty(txtDebe.Text.ToString().Trim()) || txtDebe.Text.Trim() == "0.00")
                {
                    try { Monto = Convert.ToDecimal(txtHaber.Text); }
                    catch { Monto = 0; }
                }
                else
                {
                    try { Monto = Convert.ToDecimal(txtDebe.Text); }
                    catch { Monto = 0; }
                }

                //foreach (GridDataItem item in GridDistribucionAreas.Items)
                //{
                //    Decimal Participacion;
                //    try { Participacion = Convert.ToDecimal(item["BEUnidadesDeNegocio_Areas.Participacion"].Text); }
                //    catch { Participacion = 0; }
                //    ((RadNumericTextBox)item.FindControl("txtImporte")).Text = (Participacion * Monto / 100).ToString();
                //}

                for (int i = 0; i < this.GridDistribucionAreas.Rows.Count; i++)
                {
                    Decimal Participacion;
                    try
                    {
                        Participacion = Convert.ToDecimal(((Label)this.GridDistribucionAreas.Rows[i].FindControl("lblParticipacion")).Text.ToString());
                    }
                    catch { Participacion = 0; }
                    ((TextBox)this.GridDistribucionAreas.Rows[i].FindControl("txtImporte")).Text = Math.Round((Participacion * Monto / 100), 2, MidpointRounding.AwayFromZero).ToString();

                }


            }
    }

    private void Listar_Distribucion(Int32 AreaID)
    {

        Int32 Establecimiento = Convert.ToInt32(ViewState["EmpresaID"]);
        Int32 HotelID = Convert.ToInt32(ViewState["HotelID"]);
        Int32 Periodo = Convert.ToInt32(ViewState["txtPeriodo"]);
        String AsientoContableDetalleID = ViewState["AsientoDetalleID"] == null ? "0" : ViewState["AsientoDetalleID"].ToString();

        //Int32 Establecimiento = Convert.ToInt32("1");
        //Int32 HotelID = Convert.ToInt32("1");
        //Int32 Periodo = Convert.ToInt32("2010");
        //String AsientoContableDetalleID = ViewState["AsientoDetalleID"] == null ? "0" : ViewState["AsientoDetalleID"].ToString().Trim();

        BLAsientosContablesDetalle objBLAsientosContablesDetalle = new BLAsientosContablesDetalle();
        Cls_Propiedades.TempAsientoDetalleAUN = objBLAsientosContablesDetalle.fnSelAsientosDetalleUnidadNegocio(Establecimiento, HotelID, AreaID, Periodo);

        GridDistribucionAreas.DataSource = Cls_Propiedades.TempAsientoDetalleAUN;
        GridDistribucionAreas.DataBind();

    }

    protected void txtPlanCuenta_TextChanged(object sender, EventArgs e)
    {
        BuscPcta(txtPlanCuenta.Text.Trim());
    }

    private void BuscPcta(String CodigoPlanCuenta)
    {
        BLPlanDeCuentas objBLPlanDeCuentas = new BLPlanDeCuentas();
        try
        {
            //Session["PCID"] = objBLPlanDeCuentas.fnSelPlanDeCuentasDin("Estado=0" + " and pdc.EstablecimientoID=" + Session["EmpresaID"].ToString().Trim() + " and CodigoPlanCuenta ='" + txtPlanCuenta.Text + "'", "CodigoPlanCuenta", 0)[0].PlanCuentaID.Trim();
            ViewState["PCID"] = objBLPlanDeCuentas.fnSelPlanDeCuentasDin("Estado=0" + " and pdc.EstablecimientoID=" + Session["EmpresaID"].ToString().Trim() + " and CodigoPlanCuenta ='" + CodigoPlanCuenta + "'", "CodigoPlanCuenta", 0)[0].PlanCuentaID.Trim();
        }
        catch
        {
            ViewState["PCID"] = "";
        }
        if (!String.IsNullOrEmpty(ViewState["PCID"].ToString()))
            camposRequere(ViewState["PCID"].ToString().Trim());

        objBLPlanDeCuentas = null;
    }

    private void camposRequere(String PlanCuentaID)
    {
       this.Limpia_CajaDetalle(1);
        BEPlanDeCuentas objet_PlanDeCuentas = new BEPlanDeCuentas();
        BLPlanDeCuentas objlg_PlanDeCuentas = new BLPlanDeCuentas();
        List<BEPlanDeCuentas> Col_PlanDeCuentas;

        //Col_PlanDeCuentas = objlg_PlanDeCuentas.fnSelPlanDeCuentasDin("PlanCuentaID=" + PlanCuentaID, "");
        Col_PlanDeCuentas = objlg_PlanDeCuentas.fnSelPlanDeCuentasDin("PlanCuentaID=" + PlanCuentaID + " and pdc.EstablecimientoID=" + ViewState["EmpresaID"].ToString().Trim(), "", 0);

        for (Int32 i = 0; i < Col_PlanDeCuentas.Count; i++)
        {
            if (Col_PlanDeCuentas[i].RequiereDocumento == true)
            {
                this.cbxCanalContable.CssClass = Cls_Enums.ColorValidacion.CssValidoCombo;
                this.txtFEmision.CssClass = Cls_Enums.ColorValidacion.CssValidoCaja;
                this.txtDocumento.CssClass = Cls_Enums.ColorValidacion.CssValidoCaja;
                this.txtRucEmpresa.CssClass = Cls_Enums.ColorValidacion.CssValidoCaja;
                this.cbxTDocumento.CssClass = Cls_Enums.ColorValidacion.CssValidoCombo;

                this.cbxTDocumento.Enabled = true;
                ViewState["rqTipo"] = "1";
                this.txtFEmision.Enabled = true;
                this.txtDocumento.Enabled = true;
                this.txtRucEmpresa.Enabled = true;
                this.btnRucEmpresa.Enabled = true;
                

            }
            else
            {
                this.cbxCanalContable.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
                this.txtFEmision.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;
                this.txtDocumento.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;
                this.txtRucEmpresa.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;
                this.cbxTDocumento.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;

                this.cbxTDocumento.Enabled = false;
                ViewState["rqTipo"] = "0";
                this.txtFEmision.Enabled = false;
                this.txtDocumento.Enabled = false;
                
                this.txtRucEmpresa.Enabled = false;
                //this.btnEmpresa.Enabled = false;
                
            }

            if (Col_PlanDeCuentas[i].RequiereFechaVencimiento == true)
            {
                this.txtFVencimiento.Enabled = true;
                this.txtFVencimiento.CssClass = Cls_Enums.ColorValidacion.CssValidoCaja;
                ViewState["rqFecha"] = "1";
            }
            else
            {
                this.txtFVencimiento.Enabled = false;
                this.txtFVencimiento.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;
                ViewState["rqFecha"] = "0";
            }

            if (Col_PlanDeCuentas[i].RequiereArea == true)
            {
                this.cbxArea.Enabled = true; ViewState["rqArea"] = "1";
                this.cbxArea.SelectedValue = Col_PlanDeCuentas[0].BEAreas.AreaId.ToString();
                Listar_Distribucion(Col_PlanDeCuentas[0].BEAreas.AreaId);
                this.GridDistribucionAreas.Enabled = true;
                this.cbxArea.CssClass = Cls_Enums.ColorValidacion.CssValidoCombo;
                this.GridDistribucionAreas.CssClass = Cls_Enums.ColorValidacion.CssValidoCaja;

            }
            else
            {
                this.cbxArea.Enabled = false; 
                ViewState["rqArea"] = "0";
                this.GridDistribucionAreas.Enabled = false;
                this.cbxArea.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
                this.GridDistribucionAreas.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;
            }
            if (Col_PlanDeCuentas[i].RequiereProyecto == true)
            {
                this.cbxProyecto.Enabled = true;
                ViewState["rqProyect"] = "1";
                this.cbxProyecto.CssClass= Cls_Enums.ColorValidacion.CssValidoCombo;

            }
            else
            {
                this.cbxProyecto.Enabled = false;
                ViewState["rqProyect"] = "0";
                this.cbxProyecto.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
            }

            if (Col_PlanDeCuentas[i].RequiereCanal == true)
            {
                this.cbxCanalContable.Enabled = true;
                Session["rqCanal"] = "1";
                this.cbxCanalContable.CssClass = Cls_Enums.ColorValidacion.CssValidoCombo;
            }
            else
            {
                this.cbxCanalContable.Enabled = false;
                Session["rqCanal"] = "0";
                this.cbxCanalContable.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
            }

            ViewState["CategoriaId"] = Col_PlanDeCuentas[i].CategoriaID.ToString();
            //Combo_Empresa(ViewState["CategoriaId"].ToString().Trim());
            dosLetra = Convert.ToInt32(Col_PlanDeCuentas[i].CodigoPlanCuenta.Substring(0, 2));

            ViewState["dosLetra"] = dosLetra;
        }



        objet_PlanDeCuentas = null;
        objlg_PlanDeCuentas = null;

        if (dosLetra > 9 && dosLetra < 11)
        {
            cbxFlujoCaja.Enabled = true;
            ViewState["dosLetra"] = dosLetra;
            this.cbxFlujoCaja.CssClass = Cls_Enums.ColorValidacion.CssValidoCombo;
        }
        else
        {
            cbxFlujoCaja.Enabled = false;
            ViewState["dosLetra"] = "0";
            this.cbxFlujoCaja.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
        }


    }

    private void Inhabilitacampos()
    {
        this.cbxArea.Enabled = false;
        this.GridDistribucionAreas.DataSource = null;
        this.GridDistribucionAreas.Enabled = false;
        this.cbxProyecto.Enabled = false;
        this.cbxFlujoCaja.Enabled = false;
        this.cbxTDocumento.Enabled = false;
        this.txtFEmision.Enabled = false;
        this.txtDocumento.Enabled = false;
        this.txtRucEmpresa.Enabled = false;
        this.btnRucEmpresa.Enabled = false;
        this.txtFVencimiento.Enabled = false;
        this.cbxCanalContable.Enabled = false;

        this.cbxCanalContable.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
        this.cbxProyecto.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
        this.txtFEmision.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;
        this.txtDocumento.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;
        this.txtRucEmpresa.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;
        this.cbxTDocumento.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
        this.cbxCanalContable.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
    }

    private void Limpia_CajaDetalle(int tipolimpia)
    {
        cbxFlujoCaja.Enabled = false;

        if (tipolimpia == 1)
        {
            ViewState["CodigoTablaID"] = "";
            txtDebe.Text = "0.00";
            txtHaber.Text = "0.00";
            txtDebe.Enabled = true;
            txtHaber.Enabled = true; 
            

            cbxCanalContable.SelectedValue = "0";
            ViewState["EMPID"] = "";    //cbxEmpresa.SelectedValue = "";
            cbxTDocumento.SelectedValue = "0";
            cbxProyecto.SelectedValue = "0";
            //txtReferencia.Text = "";
            txtRucEmpresa.Text = "";
            txtFEmision.Text = "";
            txtFVencimiento.Text = "";
            cbxArea.SelectedValue = "0";
            txtDocumento.Text = "";

            cbxFlujoCaja.SelectedValue = "0";
            //cbxPlanCuentaID.SelectedValue = "";
            this.GridDistribucionAreas.DataSource = null;
            this.GridDistribucionAreas.DataBind();
            cbxFlujoCaja.SelectedValue = "0";

            btnRucEmpresa.Enabled = false;
            btnArea.Enabled = false;
            btnGuardar.Enabled = true;
            btnGuardarRegresar.Enabled = true;

            
        }
        else
        {

            ViewState["CodigoTablaID"] = "";
            this.cbxCanalContable.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
            this.txtFEmision.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;
            this.txtDocumento.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;
            this.cbxTDocumento.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
            this.txtRucEmpresa.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;

            this.cbxArea.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
            this.GridDistribucionAreas.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCaja;
            this.cbxProyecto.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
            this.cbxCanalContable.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;
            this.cbxFlujoCaja.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;

            this.txtFVencimiento.CssClass = Cls_Enums.ColorValidacion.CssNoValidoCombo;

            txtDebe.Text = "0.00";
            txtHaber.Text = "0.00";
            txtDebe.Enabled = true;
            txtHaber.Enabled = true; 

            cbxCanalContable.SelectedValue = "0";
            ViewState["EMPID"] = ""; 
            cbxTDocumento.SelectedValue = "0";
            cbxProyecto.SelectedValue = "0";

            txtFEmision.Text = "";
            txtRucEmpresa.Text = "";
            txtFVencimiento.Text = "";
            cbxArea.SelectedValue = "0";
            txtDocumento.Text = "";
            cbxFlujoCaja.SelectedValue = "0";
            this.GridDistribucionAreas.DataSource = null;
            this.GridDistribucionAreas.DataBind();
            cbxFlujoCaja.Text = "0";
            ViewState["PCID"] = "";
            txtPlanCuenta.Text = "";

            btnAgregar.Text = "Agregar";
            btnAgregar.ToolTip = "Agregar";

            btnRucEmpresa.Enabled = false;
            btnArea.Enabled = false;
            btnGuardar.Enabled = true;
            btnGuardarRegresar.Enabled = true;


        }

    }

    protected void txtDebe_TextChanged(object sender, EventArgs e)
    {
        if (ViewState["rqArea"].ToString().Trim() == "1")
        {
            Decimal Monto;
            String txtParticipacion;
            String lblUnidadNegocioID;

            if (txtDebe.Text != "0.00")
            { this.txtHaber.Enabled = false; }else
            { this.txtHaber.Enabled = true; }
            
            try {Monto = Convert.ToDecimal(txtDebe.Text); }
            catch { Monto = 0;}

            for (int i = 0 ; i < this.GridDistribucionAreas.Rows.Count; i++)
            {
                Decimal Participacion;
                try { 
                    //lblUnidadNegocioID = ((Label)this.GridDistribucionAreas.Rows[i].FindControl("lblUnidadNegocioID")).Text.ToString();
                    Participacion = Convert.ToDecimal(((Label)this.GridDistribucionAreas.Rows[i].FindControl("lblParticipacion")).Text.ToString());
                }
                catch { Participacion = 0; }
                ((TextBox)this.GridDistribucionAreas.Rows[i].FindControl("txtImporte")).Text = Math.Round((Participacion * Monto / 100), 2, MidpointRounding.AwayFromZero).ToString();
                
            }
        }
    }

    protected void txtHaber_TextChanged(object sender, EventArgs e)
    {
        if (ViewState["rqArea"].ToString().Trim() == "1")
        {
            Decimal Monto;

            if (txtHaber.Text != "0.00")
            { this.txtDebe.Enabled = false; }
            else
            { this.txtDebe.Enabled = true; }

            try { Monto = Convert.ToDecimal(txtHaber.Text); }
            catch { Monto = 0; }

            for (int i = 0; i < this.GridDistribucionAreas.Rows.Count; i++)
            {
                Decimal Participacion;
                try
                {
                    //lblUnidadNegocioID = ((Label)this.GridDistribucionAreas.Rows[i].FindControl("lblUnidadNegocioID")).Text.ToString();
                    Participacion = Convert.ToDecimal(((Label)this.GridDistribucionAreas.Rows[i].FindControl("lblParticipacion")).Text.ToString());
                }
                catch { Participacion = 0; }
                ((TextBox)this.GridDistribucionAreas.Rows[i].FindControl("txtImporte")).Text = Math.Round((Participacion * Monto / 100), 2, MidpointRounding.AwayFromZero).ToString();

            }
        }

    }
    protected void gvAsientoDetalle_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Detalle")
        {
            //showMessage(BuscaIndex(Convert.ToInt32(e.CommandArgument)).ToString());
            BuscarAsientoDetalle(e.CommandArgument.ToString());
        }

        if (e.CommandName == "Eliminar")
        {
            EliminaAsientoDetalleAUN(e.CommandArgument.ToString());
            EliminaAsientoDetalle(e.CommandArgument.ToString());
            LabelDiferencias();
            ListaAsientos();
        }

        if (e.CommandName == "Ajustar")
        {
            AjustarCentimos(e.CommandArgument.ToString());
            LabelDiferencias();
        }

    }

    private void AjustarCentimos(String CodigoTemp)
    {

        Int32 Index = BuscaIndex(CodigoTemp);
        
        List<BEAsientosContablesDetalle> objLista = Cls_AsientoContable.TempCreaAsientContDetalle;

        var _Ajusta = objLista[Index];

        

        //GridDataItem item = (GridDataItem)e.Item;
        //DataRow[] _DataRow = ((DataTable)Session["DtDetalleAsiento"]).Select("ID=" + item.ItemIndex);

        ////ViewState["AsientoDetalleID"] = _DataRow[0].ItemArray[1];

        //DataRow changedrow = _DataRow[0];

        Decimal DifSoles = Math.Round(Diferencia("Soles"), 2, MidpointRounding.AwayFromZero); ;
        Decimal DifDolares = Math.Round(Diferencia("Dolares"), 2, MidpointRounding.AwayFromZero);
        Decimal ValorMaximoAjuste = ValorMaximodeAjuste();
        Decimal MontoAjuste;
        if (DifSoles == 0 && DifDolares == 0)
        {
            return;
        }
        else if (DifSoles != 0)
        {
            MontoAjuste = DifSoles;
            if (Math.Abs(MontoAjuste) > ValorMaximoAjuste)
            {
                showMessage("El valor de ajuste no puede ser mayor que: " + ValorMaximoAjuste.ToString());
                return;
            }
            if (Convert.ToDecimal(_Ajusta.MontoDebe) != 0)//Debe
            {
                Decimal Debe = Convert.ToDecimal(_Ajusta.MontoDebe);
                _Ajusta.MontoDebe = (Debe - MontoAjuste);
                _Ajusta.ImporteSoles = (_Ajusta.ImporteSoles - MontoAjuste);
                
                //if (changedrow["ImporteSoles_1"] != "")
                //{
                //    _Ajusta.ImporteSoles_1 = changedrow["ImporteSoles"];
                //}
                _Ajusta.EstadoRegTemp= "M";
                
            }
            else if (Convert.ToDecimal(_Ajusta.MontoHaber) != 0)//Haber
            {
                Decimal Haber = Convert.ToDecimal(_Ajusta.MontoHaber);
               _Ajusta.MontoHaber = (Haber + MontoAjuste);
               _Ajusta.ImporteSoles = (_Ajusta.ImporteSoles + MontoAjuste);
                //if (changedrow["ImporteSoles_1"].ToString() != "")
                //{
                //    changedrow["ImporteSoles_1"] = changedrow["ImporteSoles"];
                //}
               _Ajusta.EstadoRegTemp = "M";
                
            }

        }
        else if (DifDolares != 0)
        {
            MontoAjuste = DifDolares;
            if (Math.Abs(MontoAjuste) > ValorMaximoAjuste)
            {
                showMessage("El valor de ajuste no puede ser mayor que: " + ValorMaximoAjuste.ToString());
                return;
            }
            if (Convert.ToDecimal(_Ajusta.MontoDebeDolares) != 0)
            {
                Decimal Debe = Convert.ToDecimal(_Ajusta.MontoDebeDolares);
                _Ajusta.MontoDebeDolares = (Debe - MontoAjuste);
                _Ajusta.ImporteDolares = (_Ajusta.ImporteDolares - MontoAjuste);

        //        if (changedrow["ImporteDolares_1"] != "")
        //        {
        //            changedrow["ImporteDolares_1"] = changedrow["ImporteDolares"];
        //        }

                _Ajusta.EstadoRegTemp = "M";

            }
            else if (Convert.ToDecimal(_Ajusta.MontoHaberDolares) != 0)
            {
                Decimal Haber = Convert.ToDecimal(_Ajusta.MontoHaberDolares);
                _Ajusta.MontoHaberDolares = (Haber + MontoAjuste);
                _Ajusta.ImporteDolares = (_Ajusta.ImporteDolares + MontoAjuste);

        //        if (changedrow["ImporteDolares_1"] != "")
        //        {
        //            changedrow["ImporteDolares_1"] = changedrow["ImporteDolares"];
        //        }

                _Ajusta.EstadoRegTemp = "M";

            }
        
        }

    }

    private Decimal ValorMaximodeAjuste()
    {
        BEParametrosGenerales objBEParametrosGenerales = new BEParametrosGenerales();
        BLParametrosGenerales objBLParametrosGenerales = new BLParametrosGenerales();
        objBEParametrosGenerales.ParametroGeneralID = 2006;
        List<BEParametrosGenerales> lstBEParametrosGenerales = objBLParametrosGenerales.fnSelParametrosGenerales(objBEParametrosGenerales);
        return Convert.ToDecimal(lstBEParametrosGenerales[0].Valor);
    }

    private Int32 BuscaIndex(String IdTemp)
    {
        String CodigoEncontrar;

        //BEAsientosContablesDetalle BEObj = new BEAsientosContablesDetalle();
        //BEObj.AsientoContableDetalleIDTemp = IdTemp;

        for (Int32 i = 0; i < Cls_AsientoContable.TempCreaAsientContDetalle.Count; i++)
        {
            CodigoEncontrar = Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableDetalleIDTemp;
            if (CodigoEncontrar.Equals(IdTemp))
            {
                //return  Cls_AsientoContable.TempCreaAsientContDetalle.FindIndex( ;
                return i;
           }
        }
      return 0;
   }
    
    private void BuscarAsientoDetalle(String Codigo)
    {
        BEAsientosContablesDetalle ObjBE_AsientDetalle = new BEAsientosContablesDetalle();
        List<BEAsientosContablesDetalle> Sel_AsientDetalle = new List<BEAsientosContablesDetalle>();
        
        String CodigoEncontrar;
        String retorno="";

        for (Int32 i = 0; i < Cls_AsientoContable.TempCreaAsientContDetalle.Count; i++)
        {
            CodigoEncontrar = Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableDetalleIDTemp;

            if (CodigoEncontrar.Equals(Codigo))
            {
                camposRequere(Cls_AsientoContable.TempCreaAsientContDetalle[i].PlanCuentaID);

                ViewState["CodigoTablaID"] = Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableDetalleIDTemp;
                ViewState["AsientoDetalleID"] = Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableDetalleID;

                Int32 Moneda = Convert.ToInt32(cbxMoneda.SelectedValue);
                if (Moneda == 1)
                {
                    if (Cls_AsientoContable.TempCreaAsientContDetalle[i].MontoDebe == 0)
                    {
                        txtDebe.Text = "0.00";
                        this.txtDebe.Enabled = false;
                    }
                    else
                    {
                        txtDebe.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].MontoDebe.ToString();
                        this.txtHaber.Enabled = true;

                    }
                    if (Cls_AsientoContable.TempCreaAsientContDetalle[i].MontoHaber == 0)
                    {
                        txtHaber.Text = "0.00";
                        txtHaber.Enabled = false;
                    }
                    else
                    {
                        txtHaber.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].MontoHaber.ToString();
                        txtDebe.Enabled = false;
                    }
                }
                else
                {
                    if (Cls_AsientoContable.TempCreaAsientContDetalle[i].MontoDebeDolares == 0)
                    {
                        txtDebe.Text = "0.00";
                        this.txtDebe.Enabled = false;
                    }
                    else
                    {
                        txtDebe.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].MontoDebeDolares.ToString(); 
                        this.txtHaber.Enabled = true;
                    }

                    if (Cls_AsientoContable.TempCreaAsientContDetalle[i].MontoHaberDolares == 0)
                    {
                        txtHaber.Text = "0.00";
                        this.txtHaber.Enabled = true;
                    }
                    else
                    {
                        txtHaber.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].MontoHaberDolares.ToString();
                        this.txtHaber.Enabled = false;
                    }
                }
                cbxCanalContable.SelectedValue = Cls_AsientoContable.TempCreaAsientContDetalle[i].CanalContableID.Trim();
                ViewState["EMPID"] = Cls_AsientoContable.TempCreaAsientContDetalle[i].EmpresaID;//cbxEmpresa.SelectedValue = _DataRow[0].ItemArray[6].ToString();
                cbxTDocumento.SelectedValue = Cls_AsientoContable.TempCreaAsientContDetalle[i].TipoDocumentoID.ToString();
                cbxProyecto.SelectedValue = Cls_AsientoContable.TempCreaAsientContDetalle[i].ProyectoID.ToString();
                //txtDia = _DataRow[0].ItemArray[9].ToString();
                txtReferencia.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].Referencia;

                txtFEmision.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].FechaEmision.ToString();
                txtFVencimiento.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].FechaVencimiento.ToString();
                
                //////////////////////////////////DISTRIBIUCION

                //Area para combo AUN
                if (Cls_AsientoContable.TempCreaAsientContDetalle[i].AreaID != 0 && Cls_AsientoContable.TempCreaAsientContDetalle[i].AreaID.ToString() != "")
                {
                    cbxArea.SelectedValue = Cls_AsientoContable.TempCreaAsientContDetalle[i].AreaID.ToString();
                }

                if (Cls_AsientoContable.TempCreaAsientContDetalle[i].AreaID.ToString() != "" && Cls_AsientoContable.TempCreaAsientContDetalle[i].AreaID != 0)
                {
                    Decimal Importe = 0;
                    String Unidades = "0";


                    if (!String.IsNullOrEmpty(Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableID) && Cls_AsientoContable.TempCreaAsientContDetalle[i].EstadoRegTemp=="C") //Cls_AsientoContable.TempAsientoDetalleAUN.Count == 0)
                    {
                        EliminaAsientoDetalleAUN(Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableDetalleIDTemp); 
 
                   BLAsientosContablesDetalle objBLAsientosContablesDetalle = new BLAsientosContablesDetalle();
                    Int32 Establecimiento = Convert.ToInt32(Session["EmpresaID"]);
                    Int32 HotelID = Convert.ToInt32(Session["HotelID"]);
                    Int32 Periodo = Convert.ToInt32(Session["txtPeriodo"]);
                    String AsientoContableDetalleID = ViewState["AsientoDetalleID"] == null ? "0" : ViewState["AsientoDetalleID"].ToString();
                    Int32 AreaID = Convert.ToInt32(Cls_AsientoContable.TempCreaAsientContDetalle[i].AreaID.ToString());


                        BLAsientosContablesDetalle oBLAsientosContablesDetalle = new BLAsientosContablesDetalle();
                        List<BEAsientosDetalleUnidadNegocio> loDetalleAUN = oBLAsientosContablesDetalle.fnSelAsientosDetalleUnidadNegocioClase6(Establecimiento, HotelID, Periodo, ViewState["AsientoDetalleID"].ToString().Trim());

                        for (int i_aun = 0; i_aun < loDetalleAUN.Count; i_aun++)
                        {
                            BEAsientosDetalleUnidadNegocio ADD_AUN = new BEAsientosDetalleUnidadNegocio();
                            ADD_AUN.AsientoContableDetalleIDTemp = Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableDetalleIDTemp;
                            ADD_AUN.AsientoContableID = Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableDetalleID;
                            ADD_AUN.BEAreas.AreaId = Cls_AsientoContable.TempCreaAsientContDetalle[i].AreaID;
                            ADD_AUN.UnidadNegocioID = loDetalleAUN[i_aun].UnidadNegocioID;
                            ADD_AUN.BEUnidadesDeNegocio.NombreUnidadNegocio = loDetalleAUN[i_aun].BEUnidadesDeNegocio.NombreUnidadNegocio;
                            ADD_AUN.BEUnidadesDeNegocio_Areas.Participacion = loDetalleAUN[i_aun].BEUnidadesDeNegocio_Areas.Participacion;
                            ADD_AUN.ImporteSoles = loDetalleAUN[i_aun].ImporteSoles;
                            ADD_AUN.ImporteDolares = loDetalleAUN[i_aun].ImporteDolares;
                            ADD_AUN.Importe = 0;
                            Cls_AsientoContable.TempAsientoDetalleAUN.Add(ADD_AUN);
                        }

                        //List<BEAsientosDetalleUnidadNegocio> lstAsientosUN = objBLAsientosContablesDetalle.fnSelAsientosDetalleUnidadNegocio(Establecimiento, HotelID, AreaID, Periodo, Unidades);
                        loDetalleAUN = null;
                        loDetalleAUN = objBLAsientosContablesDetalle.fnSelAsientosDetalleUnidadNegocio(Establecimiento, HotelID, AreaID, Periodo, Unidades);

                        for (int i_aun = 0; i_aun < loDetalleAUN.Count; i_aun++)
                        {
                            BEAsientosDetalleUnidadNegocio ADD_AUN = new BEAsientosDetalleUnidadNegocio();
                            ADD_AUN.AsientoContableDetalleIDTemp = Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableDetalleIDTemp;
                            ADD_AUN.AsientoContableID = Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableDetalleID;
                            ADD_AUN.BEAreas.AreaId = Cls_AsientoContable.TempCreaAsientContDetalle[i].AreaID;
                            ADD_AUN.UnidadNegocioID = loDetalleAUN[i_aun].UnidadNegocioID;
                            ADD_AUN.BEUnidadesDeNegocio.NombreUnidadNegocio = loDetalleAUN[i_aun].BEUnidadesDeNegocio.NombreUnidadNegocio;
                            ADD_AUN.BEUnidadesDeNegocio_Areas.Participacion = loDetalleAUN[i_aun].BEUnidadesDeNegocio_Areas.Participacion;
                            ADD_AUN.ImporteSoles = loDetalleAUN[i_aun].ImporteSoles;
                            ADD_AUN.ImporteDolares = loDetalleAUN[i_aun].ImporteDolares;
                            ADD_AUN.Importe = 0;
                            Cls_AsientoContable.TempAsientoDetalleAUN.Add(ADD_AUN);
                        }


                    }

                    GridDistribucionAreas.DataSource = null;
                    GridDistribucionAreas.DataBind();

                    GridDistribucionAreas.DataSource = Lista_AUN(Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableDetalleIDTemp
                        , Cls_AsientoContable.TempAsientoDetalleAUN);
                    GridDistribucionAreas.DataBind();

                }


                txtDocumento.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].NumeroDocumento.Trim();
                //ParametrosDetalle[15] = ""; // no se de donde llama este parametro
                cbxFlujoCaja.SelectedValue = Cls_AsientoContable.TempCreaAsientContDetalle[i].FlujoCajaID.ToString().Trim();
                ViewState["PCID"] = Cls_AsientoContable.TempCreaAsientContDetalle[i].PlanCuentaID.ToString().Trim(); 

                cbxCanalContable.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].CanalContableID.Trim();
                txtRucEmpresa.Text = "";
                if (Cls_AsientoContable.TempCreaAsientContDetalle[i].EmpresaIDRuc != null)
                {
                    txtRucEmpresa.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].EmpresaIDRuc.ToString().Trim();
                }
                cbxTDocumento.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].TipoDocumentoID.ToString().Trim();

                cbxProyecto.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].ProyectoID.ToString().Trim();
                cbxFlujoCaja.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].FlujoCajaID.ToString().Trim();
                txtPlanCuenta.Text = Cls_AsientoContable.TempCreaAsientContDetalle[i].PlanCuentaIDNombre.Trim();

                btnAgregar.Text = "Actualizar";
                btnAgregar.ToolTip = "Actualizar";

                btnGuardar.Enabled = false;
                btnGuardarRegresar.Enabled = false;

                //cbxTipoDocumento.SelectedValue = _DataRow[0].ItemArray[7].ToString();

            }
                
        }
        
    }

    public List<BEAsientosDetalleUnidadNegocio>  Lista_AUN ( String AsientoContableDetalleIDTemp, List<BEAsientosDetalleUnidadNegocio> loListadoAll)
        {
            List<BEAsientosDetalleUnidadNegocio> loList = new List<BEAsientosDetalleUnidadNegocio>();

            for (int i = 0; i < loListadoAll.Count; i++)
            {
                if (loListadoAll[i].AsientoContableDetalleIDTemp.Equals(AsientoContableDetalleIDTemp))
                {
                    BEAsientosDetalleUnidadNegocio loBE_AUN = new BEAsientosDetalleUnidadNegocio();
                    loBE_AUN.AsientoContableDetalleIDTemp = loListadoAll[i].AsientoContableDetalleIDTemp;
                    loBE_AUN.AsientoContableID = loListadoAll[i].AsientoContableDetalleID;
                    loBE_AUN.BEAreas.AreaId = loListadoAll[i].BEAreas.AreaId;
                    loBE_AUN.UnidadNegocioID = loListadoAll[i].UnidadNegocioID;
                    loBE_AUN.BEUnidadesDeNegocio.NombreUnidadNegocio = loListadoAll[i].BEUnidadesDeNegocio.NombreUnidadNegocio;
                    loBE_AUN.BEUnidadesDeNegocio_Areas.Participacion = loListadoAll[i].BEUnidadesDeNegocio_Areas.Participacion;
                    loBE_AUN.ImporteSoles = loListadoAll[i].ImporteSoles;
                    loBE_AUN.ImporteDolares = loListadoAll[i].ImporteDolares;
                    loBE_AUN.Importe = loListadoAll[i].Importe;

                    loList.Add(loBE_AUN);
                }
            }
            return loList;
        }

    private void EliminaAsientoDetalle( String codigo)
    {
        String CodigoEncontrar;
        for (Int32 i = 0; i < Cls_AsientoContable.TempCreaAsientContDetalle.Count; i++)
        {
            CodigoEncontrar = Cls_AsientoContable.TempCreaAsientContDetalle[i].AsientoContableDetalleIDTemp;
            if (CodigoEncontrar.Equals(codigo))
            {
                Cls_AsientoContable.TempCreaAsientContDetalle.RemoveAt(i);
                return;
            }
        }
        
    }

    private void EliminaAsientoDetalleAUN(String codigo)
    {
        List<BEAsientosDetalleUnidadNegocio> list = Cls_AsientoContable.TempAsientoDetalleAUN;
        for (Int32 i = 0; i < list.Count; i++)
        {

            if (list[i].AsientoContableDetalleIDTemp.ToLower().Contains(codigo.ToLower()))
            {
                list.RemoveAt(i);
                i--;
            }
        }
    }
    
    /// <summary>
    ///  Busqueda de Cuentas.
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>

    protected void btnPlanCuenta_Click(object sender, ImageClickEventArgs e)
    {
        this.txtCodigo.Text = this.txtPlanCuenta.Text;
        MostrarDatosPDC(this.txtPlanCuenta.Text);
        this.ModalPopupExtender1.Show();

    }
    private void MostrarDatosPDC(String CodigoPlanCuenta)
    {
        Cls_AsientoContable.PlanDeCuentas.Clear();

        Cls_AsientoContable.PlanDeCuentas = objBLPlanDeCuentas.fnSelPlanDeCuentasCajas(CodigoPlanCuenta, "ACT_PlandeCuentas_SELECT");

        if (Cls_AsientoContable.PlanDeCuentas.Count > 0)
        {
            grvPDC.DataSource = Cls_AsientoContable.PlanDeCuentas;
            grvPDC.DataBind();
        }
        else
        {
            grvPDC.DataSource = Cls_AsientoContable.PlanDeCuentas;
            grvPDC.DataBind();
        }
    }

    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        MostrarDatosPDC(this.txtCodigo.Text);
    }

    protected void grvPDC_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        this.grvPDC.PageIndex = e.NewPageIndex;
    }
    protected void grvPDC_PageIndexChanged(object sender, EventArgs e)
    {
        this.grvPDC.DataSource = Cls_AsientoContable.PlanDeCuentas;
        this.grvPDC.DataBind();
    }

    protected void grvPDC_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "enviar")
        {
            ////Label lbl = (Label)this.grvListado.Rows[0].FindControl("lblPlancuentaIDpdc");
            //if (ViewState["TipoPDC"].ToString().Trim() == "1")
            //{
                BuscPcta(e.CommandArgument.ToString().Trim());
                this.txtPlanCuenta.Text = e.CommandArgument.ToString();
            //}
            //if (ViewState["TipoPDC"].ToString().Trim() == "2")
            //{
            //    BuscPcta(e.CommandArgument.ToString().Trim());
            //    this.txtPlanCuenta.Text = e.CommandArgument.ToString();
            //}

            this.ModalPopupExtender1.Hide();

        }


    }

    protected void btnRucEmpresa_Click(object sender, ImageClickEventArgs e)
    {
        Cls_AsientoContable.RUC_Empresas.Clear();
        this.txtRucEmpresaBusq.Text = this.txtRucEmpresa.Text;
        MostrarDatosRucEmpresa(this.txtRucEmpresa.Text);
        this.MPE_RucEmpresa.Show();
    }

    protected void btnRucEmpresaBusq_Click(object sender, EventArgs e)
    {
        Cls_AsientoContable.RUC_Empresas.Clear();
        MostrarDatosRucEmpresa(this.txtRucEmpresaBusq.Text.Trim());

    }

    protected void txtRucEmpresa_TextChanged(object sender, EventArgs e)
    {
        if (txtRucEmpresa.Text.Length == 11)
        {
            buscaEmpresaID(this.txtRucEmpresa.Text.Trim());
        }
    }

    private void buscaEmpresaID(String RUC)
    {
        try
        {
            //FRANCO CAMBIO PARA RUC
            //if (ViewState["CategoriaId"].ToString().Trim() != "0")
            //{
            //    ViewState["EMPID"] = objBLEmpresas.fnSelEmpresasDin("ruc='" + txtRucEmpresa.Text.Trim() + "' and CategoriaId=" + ViewState["CategoriaId"].ToString(), "razonsocial")[0].EmpresaID.ToString();
            //}
            //else
            //{
                ViewState["EMPID"] = objBLEmpresas.fnSelEmpresasDin("ruc='" + txtRucEmpresa.Text.Trim() + "'", "razonsocial")[0].EmpresaID.ToString();
           // }
        }
        catch
        {
            ViewState["EMPID"] = "";
        }

        //objBEEmpresas = null;
        //objBLEmpresas = null;
    }

    private void MostrarDatosRucEmpresa(String RUC)
    {
        String Where = "";
        Where = "Ruc LIKE '" + RUC + "%'";

        String Categoria = ViewState["CategoriaId"].ToString();
        if (Categoria != "0")
        {
            //FRANCO cambio factura
            if (Cls_AsientoContable.RUC_Empresas.Count == 0)
            //Cls_AsientoContable.RUC_Empresas = objBLEmpresas.fnSelEmpresasDin("CategoriaId=" + Categoria + " and " + Where, "razonsocial");
                Cls_AsientoContable.RUC_Empresas = objBLEmpresas.fnSelEmpresasDin( Where, "razonsocial");
        }
        else
        {
            if (Cls_AsientoContable.RUC_Empresas.Count == 0)
            Cls_AsientoContable.RUC_Empresas = objBLEmpresas.fnSelEmpresasDin(" " + Where, "razonsocial");
        }

        gvRucEmpresa.DataSource = Cls_AsientoContable.RUC_Empresas;
        gvRucEmpresa.DataBind();

        objBEEmpresas = null;
        objBLEmpresas = null;
    }

    protected void gvRucEmpresa_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        this.gvRucEmpresa.PageIndex = e.NewPageIndex;
    }
    protected void gvRucEmpresa_PageIndexChanged(object sender, EventArgs e)
    {
        this.gvRucEmpresa.DataSource = Cls_AsientoContable.RUC_Empresas;
        this.gvRucEmpresa.DataBind();
    }

    protected void gvRucEmpresa_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "enviar")
        {
            buscaEmpresaID(e.CommandArgument.ToString().Trim());
            this.txtRucEmpresa.Text = e.CommandArgument.ToString().Trim();
            this.MPE_RucEmpresa.Hide();
        }


    }

    protected void gvAsientoDetalle_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            //e.Row.Cells[0].Text = (pageNumber + gvDatos.PageSize * gvDatos.PageIndex).ToString();
            //pageNumber++;

            if ((e.Row.RowState == DataControlRowState.Edit) || (e.Row.RowState == (DataControlRowState.Edit | DataControlRowState.Alternate)))
            {
                /**
                 * Franco 28/03/2011
                 **/
              //  ((CheckBox)e.Row.FindControl("chkHabilitadoE")).Checked = ((SE_Maestra)e.Row.DataItem).Estado == "A" ? true : false;
            }
            else
            {
                /**
                * Franco 28/03/2011
                **/
                // ((CheckBox)e.Row.FindControl("chkHabilitadoD")).Checked = ((SE_Maestra)e.Row.DataItem).Estado == "A" ? true : false;
            }
        }

    }
}
