using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BE;
using BL;
using Utilitaria;
using System.Data;
using System.Data.SqlClient;
using Telerik.Web.UI;
using System.Configuration;
using System.Data.OleDb;
using System.IO;

public partial class Conciliacion_List_Conciliacion : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Session["EmpresaID"] = 1;
        //Session["txtPeriodo"] = 2010;
        //Session["HotelID"] = 1;

        if (Session["Usuario"] == null)
        {
            Response.Redirect("../acceso.aspx");
        }

        if (!IsPostBack)
        {
            ViewState["Click"] = "1";
            ListarCombo_Casamatriz();
        }
    }

    protected void tk_Grid_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        Listar();
    }

    private void Listar()
    {
        BEDocumentosPago oBEDocumentosPago = new BEDocumentosPago();
        oBEDocumentosPago.EstablecimientoID = Convert.ToInt32(Session["EmpresaID"]);
        oBEDocumentosPago.SucursalID = Convert.ToInt32(Session["HotelID"]);
        if(cbxCasaTarjetasCredito.SelectedValue != "") oBEDocumentosPago.CasaTarjetaCreditoID = Convert.ToInt32(cbxCasaTarjetasCredito.SelectedValue);

        BLDocumentosPagos oBLDocumentosPagos = new BLDocumentosPagos();

        String WhereCondition="";

        if (txtDesde.DbSelectedDate != null) WhereCondition = "Fecha Between '" + txtDesde.DbSelectedDate.ToString().Substring(0,10) + "' and '";
        if (txtHasta.DbSelectedDate != null)
        {
            WhereCondition += txtHasta.DbSelectedDate.ToString().Substring(0, 10) + "'";
        }
        else
        {
            WhereCondition += txtDesde.DbSelectedDate;
        }
        if (ViewState["Click"] == "1")
        {
            Cls_Propiedades.TempDocumentosPago = oBLDocumentosPagos.fnSelDocumentosPago(oBEDocumentosPago, WhereCondition, "");
            //loDocumentosPago = oBLDocumentosPagos.fnSelDocumentosPago(oBEDocumentosPago, WhereCondition, "");
        }
        tk_Grid.DataSource = Cls_Propiedades.TempDocumentosPago;

        ViewState["Click"] = "";
        oBEDocumentosPago = null;
        oBLDocumentosPagos = null;
    }

    private void ListarCombo_Casamatriz()
    {
        BLCasaTarjetaCreditos oBLCasaTarjetaCreditos = new BLCasaTarjetaCreditos();
        List<BECasaTarjetaCreditos> loCasaTarjetaCreditos;

        loCasaTarjetaCreditos = oBLCasaTarjetaCreditos.fnSelCasaTarjetaCreditos("","");

        for (int i = 0; i < loCasaTarjetaCreditos.Count; i++)
        {
            RadComboBoxItem item = new RadComboBoxItem();

            item.Text = loCasaTarjetaCreditos[i].NombreCasaTarjetaCredito;
            item.Value = loCasaTarjetaCreditos[i].CasaTarjetaCreditoId.ToString();

            cbxCasaTarjetasCredito.Items.Add(item);
            item.DataBind();
        }

        oBLCasaTarjetaCreditos = null;
        loCasaTarjetaCreditos = null;
    }

    protected void btnActualizar_Click(object sender, EventArgs e)
    {
        ViewState["Click"] = "1";

        Session["desde"] = this.txtDesde.SelectedDate.ToString().Substring(0, 10);
        Session["hasta"] = this.txtHasta.SelectedDate.ToString().Substring(0,10);


        irAsiento.Visible = true;
        if (txtDesde.DbSelectedDate == null || txtHasta.DbSelectedDate == null)
        {
            showMessage("Ingrese un intervalo de fechas valido");
        }
        else
        {
            this.tk_Grid.Rebind();
        }

        lblTotalSoles.Text = "00.00";
    }
  
    protected void cbxCasaTarjetasCredito_SelectedIndexChanged1(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        ViewState["Click"] = "1";
        
        Cls_Propiedades.TempDocumentosPago.Clear();

        tk_Grid.DataSource = Cls_Propiedades.TempDocumentosPago;
        tk_Grid.DataBind();

        BLBancos oBLBancos = new BLBancos();
        List<BEBancos> loBancos;

        String CasaMatriz = cbxCasaTarjetasCredito.SelectedValue.ToString().Trim();
        loBancos = oBLBancos.fnSelBancos("BancoID=" + CasaMatriz, "");
        
        txtBanco.Text = loBancos[0].NombreBanco;
        ViewState["BancoID"] = loBancos[0].BancoID;

        BLCasaTarjetaCreditos oBLCasaTarjetaCreditos = new BLCasaTarjetaCreditos();
        List<BECasaTarjetaCreditos> loCasaTarjetaCreditos;

        loCasaTarjetaCreditos = oBLCasaTarjetaCreditos.fnSelCasaTarjetaCreditos("CasaTarjetaCreditoId=" + cbxCasaTarjetasCredito.SelectedValue.ToString().Trim(), "");

        txtBancoCuentaID.Text = loCasaTarjetaCreditos[0].BECuentas.NumeroCuenta.ToString();
        txtMoneda.Text = loCasaTarjetaCreditos[0].BEMonedas.Nombre.ToString();
        ViewState["MonedaID"] = loCasaTarjetaCreditos[0].BECuentas.MonedaID.ToString();
        ViewState["SubDiarioID"] = loCasaTarjetaCreditos[0].SubDiarioID;
        ViewState["CuentaPlanCuentaID"] = loCasaTarjetaCreditos[0].BECuentas.PlanCuentaID;
        Session["MonedaID"] = ViewState["MonedaID"];

        oBLCasaTarjetaCreditos = null;
        loCasaTarjetaCreditos = null;

        oBLCasaTarjetaCreditos = null;
        loCasaTarjetaCreditos = null;

        //tk_Grid.Rebind();
    }

    protected void chkSeleccion_CheckedChanged(object sender, EventArgs e)
    {
        BEDocumentosPago BE_DocumentosPagos = new BEDocumentosPago();
        BLDocumentosPagos BL_DocumentosPagos = new BLDocumentosPagos();

        CheckBox chkbx = (CheckBox)sender;
        GridDataItem item = (GridDataItem)(sender as CheckBox).NamingContainer; //item is the row where the checkbox (that invoked the event) resides    

        BE_DocumentosPagos.DocumentoPagoID = item["DocumentoPagoID"].Text.ToString().Trim();
        
        if (chkbx.Checked == true)
        {
            if (lblTotalSoles.Text == "") lblTotalSoles.Text = "0.00";
            if (item["Total"].Text == "") item["Total"].Text = "0.00";
            //Soles
            if(item["MonedaID"].Text == "1")lblTotalSoles.Text = (Convert.ToDecimal(lblTotalSoles.Text) + Convert.ToDecimal(item["Total"].Text)).ToString();
            //Dolares
            if (item["MonedaID"].Text == "2") lblTotalDolares.Text = (Convert.ToDecimal(lblTotalDolares.Text) + Convert.ToDecimal(item["Total"].Text)).ToString();
            BE_DocumentosPagos.UsuarioIDPreConcilia = 1;
        }
        else
        {
            //Soles
            if (item["MonedaId"].Text == "1") lblTotalSoles.Text = (Convert.ToDecimal(lblTotalSoles.Text) - Convert.ToDecimal(item["Total"].Text)).ToString();
            //Dolares
            if (item["MonedaId"].Text == "2") lblTotalDolares.Text = (Convert.ToDecimal(lblTotalDolares.Text) - Convert.ToDecimal(item["Total"].Text)).ToString();
            BE_DocumentosPagos.UsuarioIDPreConcilia = 0;
        }

        // Update database  
        BL_DocumentosPagos.fnInsDocumentosPago(BE_DocumentosPagos);
        BL_DocumentosPagos= null;
        BE_DocumentosPagos=null;
    }

    protected void btnConciliar_Click(object sender, EventArgs e)
    {
        ViewState["Click"] = "1";


        if (txtFechaAsiento.DbSelectedDate == null)
        {
            showMessage("Ingrese un valor de fecha valido");
            return;
        }

        BLAsientosContablesDetalle objlg_AsientosContablesDetalle = new BLAsientosContablesDetalle();
        BEAsientosContablesDetalle objet_AsientosContablesDetalle = new BEAsientosContablesDetalle();

        BLParametrosGenerales objlg_ParametrosGenerales = new BLParametrosGenerales();
        BEParametrosGenerales objet_ParametrosGenerales = new BEParametrosGenerales();

        BLDocumentosPagos objlg_DocumentosPagos = new BLDocumentosPagos();
        BEDocumentosPago objet_DocumentosPagos = new BEDocumentosPago();

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


        Decimal Comision=0, igv=0, portes=0, SubTotal=0, Total=0;

        if (!String.IsNullOrEmpty(txtComision.Text.Trim())) { Comision = Convert.ToDecimal(txtComision.Text.Trim()); }
        if (!String.IsNullOrEmpty(txtIgv.Text.Trim())) { igv = Convert.ToDecimal(txtIgv.Text.Trim()); }
        if (!String.IsNullOrEmpty(txtPortes.Text.Trim())) { portes = Convert.ToDecimal(txtPortes.Text.Trim()); }
        if (!String.IsNullOrEmpty(lblTotalSoles.Text.Trim())) { Total = Convert.ToDecimal(lblTotalSoles.Text.Trim()); }

        SubTotal = Total - (Comision + igv + portes);
        //showMessage(SubTotal.ToString());

        #region Inicio Cabecera
        //Generales///////////////////////////////////////////////////////////////////////////////////////////////

        BEParametrosGenerales objBEParametrosGenerales = new BEParametrosGenerales();
        BLParametrosGenerales objBLParametrosGenerales = new BLParametrosGenerales();
        objBEParametrosGenerales.ParametroGeneralID = 2015;
        List<BEParametrosGenerales> lstBEParametrosGenerales = objBLParametrosGenerales.fnSelParametrosGenerales(objBEParametrosGenerales);
        ViewState["SubDiarioID"] = lstBEParametrosGenerales[0].Valor.ToString().Trim();

        //Cabecera Asiento///////////////////////////////////////////////////////////////////////////////////////////////////////////
        BEAsientosContables objet_AsientosContables = new BEAsientosContables();
        BLAsientosContables objlg_AsientosContables = new BLAsientosContables();

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

        objet_AsientosContables.AsientoContableID = "0";
        objet_AsientosContables.SubDiarioID = ViewState["SubDiarioID"].ToString().Trim();
        objet_AsientosContables.HotelID = Convert.ToInt32(Session["HotelID"].ToString());
        objet_AsientosContables.TipoConversionMonedaID = "111"; // cbxTipoConversionMoneda.SelectedValue.ToString(); //????????????????
        objet_AsientosContables.Glosa = "Tarjetas de Credito";
        objet_AsientosContables.Comprobante = "";
        objet_AsientosContables.Dia = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate);
        objet_AsientosContables.MonedaID = Convert.ToInt32(ViewState["MonedaID"]);// Convert.ToInt32(cbxMonda.SelectedValue.ToString());//????????????????

        BETiposDeCambio objet_TiposDeCambio = new BETiposDeCambio();
        BLTiposDeCambio objlg_TiposDeCambio = new BLTiposDeCambio();
        List<BETiposDeCambio> Col_TiposDeCambio;

        String strFecha = String.Format("{0:dd/MM/yyyy}", txtFechaAsiento.SelectedDate).ToString();

        ViewState["TC"] = null;
        Col_TiposDeCambio = objlg_TiposDeCambio.fnSelTiposDeCambioDin("monedaID=1", "", strFecha);
        ViewState["TC"] = Col_TiposDeCambio[0].Compra;
        if (Col_TiposDeCambio.Count != 0)
        {
            objet_AsientosContables.TipoCambio = Col_TiposDeCambio[0].Compra.ToString();// txtTipoCambio.Text.ToString();//????????????????
        }
        else
        {
            showMessage("No se ha definido un tipo de cambio para el dia " + txtFechaAsiento.DbSelectedDate.ToString().Substring(0, 10));
            return;
        }

        ////////// Inicio Campos Auditores. //////////
        objet_AsientosContables.BEAuditores.UsuarioID = Convert.ToInt32(Session["UsuarioID"]);
        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;
        objet_AsientosContables.Bloqueado = 1;
        ////////// Fin Campos Auditores. //////////

        int AsientoContableID = objlg_AsientosContables.fnInsUpdAsientosContables(objet_AsientosContables);
        ViewState["ID"] = AsientoContableID.ToString();
        objet_AsientosContables = null;
        objlg_AsientosContables = null;
        //Fin Cabecera Asiento///////////////////////////////////////////////////////////////////////////////////////
        #endregion Fin Cabecera

        #region Inicio Detalle Grilla
        //Inicio Registro Detalle Asiento////////////////////////////////////////////////////////////////////////////

        foreach (GridDataItem dataItem in tk_Grid.MasterTableView.Items)
        {
            if ((dataItem.FindControl("chkRegistered") as CheckBox).Checked == true)
            {
                objet_AsientosContablesDetalle = new BEAsientosContablesDetalle();
                objet_AsientosContablesDetalle.AsientoContableDetalleID = "0";
                objet_AsientosContablesDetalle.AsientoContableID = ViewState["ID"].ToString(); //MyTable.Rows[i][2].ToString();
                objet_AsientosContablesDetalle.MontoDebe = 0;//????????????
                objet_AsientosContablesDetalle.MontoHaber = Convert.ToDecimal(dataItem["Total"].Text);//???????????
                objet_AsientosContablesDetalle.CanalContableID = "0";
                objet_AsientosContablesDetalle.EmpresaID = 0;
                objet_AsientosContablesDetalle.TipoDocumentoID = 0;
                objet_AsientosContablesDetalle.ProyectoID = 0;
                objet_AsientosContablesDetalle.Dia = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());
                objet_AsientosContablesDetalle.Referencia = "Tarjetas de Credito";
                objet_AsientosContablesDetalle.FechaEmision = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());
                objet_AsientosContablesDetalle.FechaVencimiento = null; //Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());

                objet_AsientosContablesDetalle.AreaID = 0;
                objet_AsientosContablesDetalle.NumeroDocumento = "0";
                objet_AsientosContablesDetalle.TransaccionDocumentoID = dataItem["DocumentoPagoID"].Text.Trim();

                objet_AsientosContablesDetalle.FlujoCajaID = 0;



                if (ViewState["MonedaID"].ToString() == "1")
                {
                    objet_AsientosContablesDetalle.PlanCuentaID = dataItem["BETarjetaCreditos.PlanCuentaIDSoles"].Text.Trim();// ??
                }
                else
                {
                    objet_AsientosContablesDetalle.PlanCuentaID = dataItem["BETarjetaCreditos.PlanCuentaIDDolares"].Text.Trim();// ??
                }

                objet_AsientosContablesDetalle.AsientoContableDetalleIDTransferencia = "0";
                objet_AsientosContablesDetalle.PeriodoID = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate).Month.ToString();

                if (ViewState["MonedaID"].ToString() == "1")
                {
                    objet_AsientosContablesDetalle.ImporteSoles = Convert.ToDecimal(dataItem["Total"].Text);// MyTable.Rows[i][30].ToString();
                    objet_AsientosContablesDetalle.ImporteDolares = Convert.ToDecimal(dataItem["Total"].Text) / Convert.ToDecimal(ViewState["TC"]);
                }
                else
                {
                    objet_AsientosContablesDetalle.ImporteSoles = (Convert.ToDecimal(dataItem["Total"].Text) * Convert.ToDecimal(ViewState["TC"]));
                    objet_AsientosContablesDetalle.ImporteDolares = Convert.ToDecimal(dataItem["Total"].Text);
                }


                //objet_AsientosContablesDetalle.ImporteDolares = 0;// MyTable.Rows[i][31].ToString();

                //Inicio Campos Auditores. //////////////////////////////////////////////////////////////////////////////////////////
                objet_AsientosContablesDetalle.BEAuditores.UsuarioID = Convert.ToInt32(Session["UsuarioID"]);
                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. //////////

                objet_DocumentosPagos.DocumentoPagoID=dataItem["DocumentoPagoID"].Text.Trim();
                objet_DocumentosPagos.AsientoContableID = ViewState["ID"].ToString();
                
                objlg_DocumentosPagos.fnUpdDocumentosPago(objet_DocumentosPagos);

                
                
                loList.Add(objet_AsientosContablesDetalle);
            }
        }

        int registro = objlg_AsientosContablesDetalle.fnInsUpdAsientosContablesDetalle(loList, Session["EmpresaID"].ToString(), Session["txtPeriodo"].ToString(),"100",0);
        objlg_AsientosContablesDetalle = null;
        loList = null;
        //Fin Registro Detalle///////////////////////////////////////////////////////////////////////////////////////////////////////////
        #endregion Fin Detalle Grilla

        #region Inicio Comision
        if (Comision != 0)
        {
            objet_AsientosContablesDetalle = new BEAsientosContablesDetalle();
            objlg_AsientosContablesDetalle = new BLAsientosContablesDetalle();
            objet_ParametrosGenerales = new BEParametrosGenerales();

            loList = new List<BEAsientosContablesDetalle>();

            objet_AsientosContablesDetalle.AsientoContableDetalleID = "0";
            objet_AsientosContablesDetalle.AsientoContableID = ViewState["ID"].ToString(); //MyTable.Rows[i][2].ToString();
            objet_AsientosContablesDetalle.MontoDebe = Comision;//????????????
            objet_AsientosContablesDetalle.MontoHaber = 0;//???????????
            objet_AsientosContablesDetalle.CanalContableID = "0";
            objet_AsientosContablesDetalle.EmpresaID = 0;
            objet_AsientosContablesDetalle.TipoDocumentoID = 0;
            objet_AsientosContablesDetalle.ProyectoID = 0;
            objet_AsientosContablesDetalle.Dia = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());
            objet_AsientosContablesDetalle.Referencia = "Tarjetas de Credito";
            objet_AsientosContablesDetalle.FechaEmision = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());
            objet_AsientosContablesDetalle.FechaVencimiento = null; //Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());

            objet_AsientosContablesDetalle.AreaID = 0;
            objet_AsientosContablesDetalle.NumeroDocumento = "0";
            objet_AsientosContablesDetalle.TransaccionDocumentoID = "";
            objet_AsientosContablesDetalle.FlujoCajaID = 0;



            if (ViewState["MonedaID"].ToString() == "1")
            {
                objet_ParametrosGenerales.ParametroGeneralID = 2013;
                objet_AsientosContablesDetalle.PlanCuentaID = objlg_ParametrosGenerales.fnSelParametrosGenerales(objet_ParametrosGenerales)[0].Valor.ToString().Trim(); //Cuenta Parametros Generales  dataItem["BETarjetaCreditos.CuentaSoles"].Text.Trim();// ??
            }
            else
            {
                objet_ParametrosGenerales.ParametroGeneralID = 2013;
                objet_AsientosContablesDetalle.PlanCuentaID = objlg_ParametrosGenerales.fnSelParametrosGenerales(objet_ParametrosGenerales)[0].Valor.ToString().Trim(); // 14868 Cuenta Parametros Generales dataItem["BETarjetaCreditos.CuentaDolares"].Text.Trim();// ??
            }

            objet_AsientosContablesDetalle.AsientoContableDetalleIDTransferencia = "0";
            objet_AsientosContablesDetalle.PeriodoID = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate).Month.ToString();

            if (ViewState["MonedaID"].ToString() == "1")
            {
                objet_AsientosContablesDetalle.ImporteSoles = Comision;// MyTable.Rows[i][30].ToString();
                objet_AsientosContablesDetalle.ImporteDolares = Math.Round(Comision / Convert.ToDecimal(ViewState["TC"]), 2, MidpointRounding.AwayFromZero);
            }
            else
            {
                objet_AsientosContablesDetalle.ImporteSoles = Math.Round((Comision * Convert.ToDecimal(ViewState["TC"])), 2, MidpointRounding.AwayFromZero);// MyTable.Rows[i][30].ToString();
                objet_AsientosContablesDetalle.ImporteDolares = Comision;
            }

            //Inicio Campos Auditores. //////////////////////////////////////////////////////////////////////////////////////////
            objet_AsientosContablesDetalle.BEAuditores.UsuarioID = Convert.ToInt32(Session["UsuarioID"]);
            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. //////////

            loList.Add(objet_AsientosContablesDetalle);
            objlg_AsientosContablesDetalle.fnInsUpdAsientosContablesDetalle(loList, Session["EmpresaID"].ToString(), Session["txtPeriodo"].ToString(),null,0);
            loList = null;
        }
        #endregion fin Comision

        #region Inicio IGV
        if (igv != 0)
        {

            objet_AsientosContablesDetalle = new BEAsientosContablesDetalle();
            objlg_AsientosContablesDetalle = new BLAsientosContablesDetalle();
            objet_ParametrosGenerales = new BEParametrosGenerales();
            loList = new List<BEAsientosContablesDetalle>();

            objet_AsientosContablesDetalle.AsientoContableDetalleID = "0";
            objet_AsientosContablesDetalle.AsientoContableID = ViewState["ID"].ToString(); //MyTable.Rows[i][2].ToString();
            objet_AsientosContablesDetalle.MontoDebe = igv;//????????????
            objet_AsientosContablesDetalle.MontoHaber = 0;//???????????
            objet_AsientosContablesDetalle.CanalContableID = "0";
            objet_AsientosContablesDetalle.EmpresaID = 0;
            objet_AsientosContablesDetalle.TipoDocumentoID = 0;
            objet_AsientosContablesDetalle.ProyectoID = 0;
            objet_AsientosContablesDetalle.Dia = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());
            objet_AsientosContablesDetalle.Referencia = "Tarjetas de Credito";
            objet_AsientosContablesDetalle.FechaEmision = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());
            objet_AsientosContablesDetalle.FechaVencimiento = null; //Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());

            objet_AsientosContablesDetalle.AreaID = 0;
            objet_AsientosContablesDetalle.NumeroDocumento = "0";
            objet_AsientosContablesDetalle.TransaccionDocumentoID = "";
            objet_AsientosContablesDetalle.FlujoCajaID = 0;



            if (ViewState["MonedaID"].ToString() == "1")
            {
                objet_ParametrosGenerales.ParametroGeneralID = 4;
                objet_AsientosContablesDetalle.PlanCuentaID = objlg_ParametrosGenerales.fnSelParametrosGenerales(objet_ParametrosGenerales)[0].Valor.ToString().Trim();  //"14759" Cuenta Parametros Generales  dataItem["BETarjetaCreditos.CuentaSoles"].Text.Trim();// ??
            }
            else
            {
                objet_ParametrosGenerales.ParametroGeneralID = 4;
                objet_AsientosContablesDetalle.PlanCuentaID = objlg_ParametrosGenerales.fnSelParametrosGenerales(objet_ParametrosGenerales)[0].Valor.ToString().Trim(); //Cuenta Parametros Generales dataItem["BETarjetaCreditos.CuentaDolares"].Text.Trim();// ??
            }

            objet_AsientosContablesDetalle.AsientoContableDetalleIDTransferencia = "0";
            objet_AsientosContablesDetalle.PeriodoID = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate).Month.ToString();

            if (ViewState["MonedaID"].ToString() == "1")
            {
                objet_AsientosContablesDetalle.ImporteSoles = igv;// MyTable.Rows[i][30].ToString();
                objet_AsientosContablesDetalle.ImporteDolares = Math.Round(igv / Convert.ToDecimal(ViewState["TC"]), 2, MidpointRounding.AwayFromZero);
            }
            else
            {
                objet_AsientosContablesDetalle.ImporteSoles = Math.Round((igv * Convert.ToDecimal(ViewState["TC"])), 2, MidpointRounding.AwayFromZero);// MyTable.Rows[i][30].ToString();
                objet_AsientosContablesDetalle.ImporteDolares = igv;
            }

            //Inicio Campos Auditores. //////////////////////////////////////////////////////////////////////////////////////////
            objet_AsientosContablesDetalle.BEAuditores.UsuarioID = Convert.ToInt32(Session["UsuarioID"]);
            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. //////////

            loList.Add(objet_AsientosContablesDetalle);
            objlg_AsientosContablesDetalle.fnInsUpdAsientosContablesDetalle(loList, Session["EmpresaID"].ToString(), Session["txtPeriodo"].ToString(),null,0);
            loList = null;
        }
        #endregion fin IGV

        #region Inicio PORTES
        if (portes != 0)
        {

            objet_AsientosContablesDetalle = new BEAsientosContablesDetalle();
            objlg_AsientosContablesDetalle = new BLAsientosContablesDetalle();
            objet_ParametrosGenerales = new BEParametrosGenerales();

            loList = new List<BEAsientosContablesDetalle>();

            objet_AsientosContablesDetalle.AsientoContableDetalleID = "0";
            objet_AsientosContablesDetalle.AsientoContableID = ViewState["ID"].ToString(); //MyTable.Rows[i][2].ToString();
            objet_AsientosContablesDetalle.MontoDebe = portes;//????????????
            objet_AsientosContablesDetalle.MontoHaber = 0;//???????????
            objet_AsientosContablesDetalle.CanalContableID = "0";
            objet_AsientosContablesDetalle.EmpresaID = 0;
            objet_AsientosContablesDetalle.TipoDocumentoID = 0;
            objet_AsientosContablesDetalle.ProyectoID = 0;
            objet_AsientosContablesDetalle.Dia = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());
            objet_AsientosContablesDetalle.Referencia = "Tarjetas de Credito";
            objet_AsientosContablesDetalle.FechaEmision = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());
            objet_AsientosContablesDetalle.FechaVencimiento = null; //Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());

            objet_AsientosContablesDetalle.AreaID = 0;
            objet_AsientosContablesDetalle.NumeroDocumento = "0";
            objet_AsientosContablesDetalle.TransaccionDocumentoID = "";
            objet_AsientosContablesDetalle.FlujoCajaID = 0;



            if (ViewState["MonedaID"].ToString() == "1")
            {
                objet_ParametrosGenerales.ParametroGeneralID = 2014;
                objet_AsientosContablesDetalle.PlanCuentaID = objlg_ParametrosGenerales.fnSelParametrosGenerales(objet_ParametrosGenerales)[0].Valor.ToString().Trim(); //"14953";Cuenta Parametros Generales  dataItem["BETarjetaCreditos.CuentaSoles"].Text.Trim();// ??
            }
            else
            {
                objet_ParametrosGenerales.ParametroGeneralID = 2014;
                objet_AsientosContablesDetalle.PlanCuentaID = objlg_ParametrosGenerales.fnSelParametrosGenerales(objet_ParametrosGenerales)[0].Valor.ToString().Trim(); //Cuenta Parametros Generales dataItem["BETarjetaCreditos.CuentaDolares"].Text.Trim();// ??
            }

            objet_AsientosContablesDetalle.AsientoContableDetalleIDTransferencia = "0";
            objet_AsientosContablesDetalle.PeriodoID = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate).Month.ToString();

            if (ViewState["MonedaID"].ToString() == "1")
            {
                objet_AsientosContablesDetalle.ImporteSoles = portes;// MyTable.Rows[i][30].ToString();
                objet_AsientosContablesDetalle.ImporteDolares = Math.Round(portes / Convert.ToDecimal(ViewState["TC"]), 2, MidpointRounding.AwayFromZero);
            }
            else
            {
                objet_AsientosContablesDetalle.ImporteSoles = Math.Round(portes * Convert.ToDecimal(ViewState["TC"]), 2, MidpointRounding.AwayFromZero);// MyTable.Rows[i][30].ToString();
                objet_AsientosContablesDetalle.ImporteDolares = portes;
            }

            //Inicio Campos Auditores. //////////////////////////////////////////////////////////////////////////////////////////
            objet_AsientosContablesDetalle.BEAuditores.UsuarioID = Convert.ToInt32(Session["UsuarioID"]);
            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. //////////

            loList.Add(objet_AsientosContablesDetalle);
            objlg_AsientosContablesDetalle.fnInsUpdAsientosContablesDetalle(loList, Session["EmpresaID"].ToString(), Session["txtPeriodo"].ToString(),null,0);
            loList = null;
        }
        #endregion fin PORTES

        #region Inicio SUBTOTAl
        if (SubTotal != 0)
        {

            objet_AsientosContablesDetalle = new BEAsientosContablesDetalle();
            objlg_AsientosContablesDetalle = new BLAsientosContablesDetalle();
            objet_ParametrosGenerales = new BEParametrosGenerales();

            loList = new List<BEAsientosContablesDetalle>();

            objet_AsientosContablesDetalle.AsientoContableDetalleID = "0";
            objet_AsientosContablesDetalle.AsientoContableID = ViewState["ID"].ToString(); //MyTable.Rows[i][2].ToString();
            objet_AsientosContablesDetalle.MontoDebe = SubTotal;//????????????
            objet_AsientosContablesDetalle.MontoHaber = 0;//???????????
            objet_AsientosContablesDetalle.CanalContableID = "0";
            objet_AsientosContablesDetalle.EmpresaID = 0;
            objet_AsientosContablesDetalle.TipoDocumentoID = 0;
            objet_AsientosContablesDetalle.ProyectoID = 0;
            objet_AsientosContablesDetalle.Dia = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());
            objet_AsientosContablesDetalle.Referencia = "Tarjetas de Credito";
            objet_AsientosContablesDetalle.FechaEmision = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());
            objet_AsientosContablesDetalle.FechaVencimiento = null; //Convert.ToDateTime(txtFechaAsiento.DbSelectedDate.ToString());

            objet_AsientosContablesDetalle.AreaID = 0;
            objet_AsientosContablesDetalle.NumeroDocumento = "0";
            objet_AsientosContablesDetalle.TransaccionDocumentoID = "";
            objet_AsientosContablesDetalle.FlujoCajaID = 0;

            if (ViewState["MonedaID"].ToString() == "1")
            {
                //objet_ParametrosGenerales.ParametroGeneralID = 96;
                objet_AsientosContablesDetalle.PlanCuentaID = ViewState["CuentaPlanCuentaID"].ToString().Trim(); //objlg_ParametrosGenerales.fnSelParametrosGenerales(objet_ParametrosGenerales)[0].Valor.ToString().Trim(); // "14407" 12101-Factura por Cobrar Soles   dataItem["BETarjetaCreditos.CuentaSoles"].Text.Trim();// ??
            }
            else
            {
                //objet_ParametrosGenerales.ParametroGeneralID = 96;
                objet_AsientosContablesDetalle.PlanCuentaID = ViewState["CuentaPlanCuentaID"].ToString().Trim(); //objlg_ParametrosGenerales.fnSelParametrosGenerales(objet_ParametrosGenerales)[0].Valor.ToString().Trim(); // 12102-Factura por Cobrar Dolares  Cuenta Parametros Generales dataItem["BETarjetaCreditos.CuentaDolares"].Text.Trim();// ??
            }

            objet_AsientosContablesDetalle.AsientoContableDetalleIDTransferencia = "0";
            objet_AsientosContablesDetalle.PeriodoID = Convert.ToDateTime(txtFechaAsiento.DbSelectedDate).Month.ToString();

            if (ViewState["MonedaID"].ToString() == "1")
            {
                objet_AsientosContablesDetalle.ImporteSoles = SubTotal;// MyTable.Rows[i][30].ToString();
                objet_AsientosContablesDetalle.ImporteDolares = Math.Round(SubTotal / Convert.ToDecimal(ViewState["TC"]), 2, MidpointRounding.AwayFromZero);
            }
            else
            {
                objet_AsientosContablesDetalle.ImporteSoles = Math.Round(SubTotal * Convert.ToDecimal(ViewState["TC"]), 2, MidpointRounding.AwayFromZero);// MyTable.Rows[i][30].ToString();
                objet_AsientosContablesDetalle.ImporteDolares = SubTotal;
            }

            //Inicio Campos Auditores. //////////////////////////////////////////////////////////////////////////////////////////
            objet_AsientosContablesDetalle.BEAuditores.UsuarioID = Convert.ToInt32(Session["UsuarioID"]);
            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. //////////

            loList.Add(objet_AsientosContablesDetalle);
            objlg_AsientosContablesDetalle.fnInsUpdAsientosContablesDetalle(loList, Session["EmpresaID"].ToString(), Session["txtPeriodo"].ToString(), null,0);
            loList = null;
        }
        #endregion fin SUBTOTAl

        objlg_AsientosContablesDetalle = null;
        objet_AsientosContablesDetalle = null;
        objlg_ParametrosGenerales = null;
        objet_ParametrosGenerales = null;
        objlg_DocumentosPagos = null;
        objet_DocumentosPagos=null;
        loList = null;
        tk_Grid.Rebind();
        lblTotalSoles.Text = "0.0";
        this.irAsiento.HRef = "../frmListaAsientos.aspx?ID=" + ViewState["SubDiarioID"] + "&UNG=&ARA=&HTL=&FD=" + this.txtDesde.SelectedDate.ToString().Substring(0, 10) + "&FH=" + this.txtHasta.SelectedDate.ToString().Substring(0, 10) + "&CI=&CF=";


    }
    
    protected void showMessage(string strMessage)
    {
        ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", "alert('" + strMessage + "');", true);
    }
    protected void tk_Grid_DataBound(object sender, EventArgs e)
    {
        //CheckBox chkbx = (CheckBox)e;
        //GridDataItem item = (GridDataItem)(sender as CheckBox).NamingContainer; 

        //if (item["UsuarioIDPreConcilia"].Text.Trim() == "1")
        //{
        //    chkbx.Checked = true;
        //}
        //else
        //{
        //    chkbx.Checked = false;
        //}

    }
    protected void tk_Grid_ItemDataBound(object sender, GridItemEventArgs e)
    {
        String strTipo;
        if (e.Item is GridDataItem)
        {
            GridDataItem dataItem = (GridDataItem)e.Item;
            //CheckBox chkbx = (CheckBox)sender;
            //GridTemplateColumn item = (GridTemplateColumn)e.Item.TemplateControl.

            strTipo = dataItem["UsuarioIDPreConcilia"].Text.ToString();
        }
    }

    protected void Exportar_Data(object sender, EventArgs e)
    {
        tk_Grid.ExportSettings.ExportOnlyData = true;
        tk_Grid.ExportSettings.IgnorePaging = true;
        tk_Grid.ExportSettings.OpenInNewWindow = true;

        switch (  (e as GridCommandEventArgs).CommandName)
        {
            case "ExportExcel":
                //if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                //{
                    tk_Grid.MasterTableView.ExportToExcel();
                //}
                //else
                //{
                //    showMessage("No posee los privilegios necesario para completar la operación");
                //}
                break;
            case "ExportPDF":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                {
                    tk_Grid.MasterTableView.ExportToPdf();
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
            case "ExportWord":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                {
                    tk_Grid.MasterTableView.ExportToWord();
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
            case "ExportCSV":
                if (Cls_Propiedades.PrivilegiosUsuario[0].Exporta == 1)
                {
                    tk_Grid.MasterTableView.ExportToCSV();
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
            case "Print":

                if (Cls_Propiedades.PrivilegiosUsuario[0].Imprime == 1)
                {
                    Response.Write(Cls_Utilitaria.f_Imprime());
                }
                else
                {
                    showMessage("No posee los privilegios necesario para completar la operación");
                }
                break;
        }

    }



}
