public Certificado(Estimado estimado, string usuario)
        {
            CertificadoDetDTO estDet;
            CertificadoSKUDTO estSKU;

            Cabecera = new CertificadoCabDTO(estimado.Cabecera);
            Lineas   = new List<CertificadoDetDTO>();

            foreach (var ordDet in estimado.Lineas)
            {
                estDet       = new CertificadoDetDTO(ordDet);
                estDet.RecId = 0;

                Lineas.Add(estDet);
            }

            SKUs = new List<CertificadoSKUDTO>();

            foreach (var ordSKU in estimado.SKUs)
            {
                estSKU       = new CertificadoSKUDTO(ordSKU);
                estSKU.RecId = 0;

                SKUs.Add(estSKU);
            }
        }
 public csOP_CALENDARIO_NUMERICO(string Estado, string Origen, string PautaId, CertificadoCabDTO Cabecera, List<CertificadoDetDTO> Detalle, List<CertificadoSKUDTO> SKUS, EspacioContDTO Espacio)
 {
     _PautaId = PautaId   ;
     _Origen = Origen     ;
     _Estado = Estado     ;
     _cCabecera = Cabecera;
     _cDetalle = Detalle  ;
     _cSKUS = SKUS        ;
     _Espacio = Espacio   ;
 }
        public csOP_Helper(string Estado, string Origen, string PautaId, CertificadoCabDTO Cabecera, List<CertificadoDetDTO> Detalles, List<CertificadoSKUDTO> SKUS, EspacioContDTO Espacio,string filename)
        {
            _Estado   = Estado;
            _Origen   = Origen;
            _PautaId  = PautaId;
            _Cabecera = Cabecera;
            _Detalle  = Detalles;
            _SKUS     = SKUS;
            _Espacio  = Espacio;

            Imprimir(Espacio.FormatoOP, filename);
            ArmarCabecera(Espacio.FormatoOP, filename);
            ArmarDetalle(Espacio.FormatoOP, filename);
        }
        private void RecargarDiaHora()
        {
            lblMsg.Text       = string.Empty;
            lblErrorHome.Text = string.Empty;

            string sIdentifOrigen  = string.Empty;
            EspacioContDTO espacio = GetEspacioContenido();

            if (botonbuscarpauta == "false" || botonbuscarpauta == "")
            {
                if (botonbuscarperiodo == "false" || botonbuscarperiodo == "")
                {
                    //selecciono directamente de la grilla
                    sIdentifOrigen = gvHome.GetSelectedFieldValues("IdentifOrigen")[0].ToString();
                    var miPauta    = gvHome.GetSelectedFieldValues("PautaId")[0].ToString()      ;
                    certificado    = Business.Certificados.Read(miPauta, sIdentifOrigen)         ;
                }
                else
                {
                    //botonbuscarperiodo = "true"
                    sIdentifOrigen = (string)ucIdentifOrigen1.SelectedValue;

                    certificado = Business.Certificados.Read((string)ucIdentifEspacio.SelectedValue, deAnoMes.Date.Year, deAnoMes.Date.Month, sIdentifOrigen);
                }
            }
            else
            {
                //botonbuscarpauta = "true"
                sIdentifOrigen = (string)ucIdentifOrigen2.SelectedValue;

                certificado = Business.Certificados.Read(txNroPauta.Text, sIdentifOrigen);
            }

            CostosDTO costos = Business.Certificados.FindCosto(Convert.ToString(ucIdentifEspacio.SelectedValue), deAnoMes.Date.Year, deAnoMes.Date.Month);

            if (certificado != null)
            {
                if (CertificadoCab.CertValido != null)
                {
                    certificado.CertValido = CertificadoCab.CertValido;
                    certificado.FecCertValido = CertificadoCab.FecCertValido;
                }

                CertificadoCab = certificado;
                mycert = Certificados.ReadAllLineas(certificado);

                Costos = costos;
                RefreshAbmGrid(gv);

                /// si el certificado esta cerrado oculto paneles de edicion.
                if (CertificadoCab.CertValido != "" && CertificadoCab.CertValido != null)
                {
                    ASPxPageControl2.Visible = false;
                    mnuDetalle.Visible = false;
                }
                else
                {
                    ASPxPageControl2.Visible = true;
                    mnuDetalle.Visible = true;
                }

                DateTime date = new DateTime();
                date = Convert.ToDateTime(deAnoMes.Date);

                deFechaDesdeOrigenCopiar.Date = new DateTime(date.Year, date.Month, 1);
                deFechaHastaOrigenCopiar.Date = new DateTime(date.Year, date.Month, 1).AddMonths(1).AddDays(-1);
                deFechaDesdeReemplazar.Date   = new DateTime(date.Year, date.Month, 1);
                deFechaHastaReemplazar.Date   = new DateTime(date.Year, date.Month, 1).AddMonths(1).AddDays(-1);

                if (espacio.HoraInicio != null)
                    deHoraDesdeOrigenReemplazar.DateTime = FormsHelper.ConvertToDateTime(espacio.HoraInicio.Value);
                else
                    deHoraDesdeOrigenReemplazar.DateTime = certificado.VigDesde.Date;

                if (espacio.HoraFin != null)
                    deHoraHastaOrigenReemplazar.DateTime = FormsHelper.ConvertToDateTime(espacio.HoraFin.Value);
                else if (certificado.HoraFin != null)
                    deHoraHastaOrigenReemplazar.DateTime = FormsHelper.ConvertToDateTime(certificado.HoraFin);
                else
                    deHoraHastaOrigenReemplazar.DateTime = certificado.VigHasta.Date.AddHours(23.9999);//origen

                deFechaDesdeDestinoCopiar.Date = deFechaDesdeOrigenCopiar.Date;

            }
            else
            {
                if (costos != null)
                {
                    Costos = costos;
                    //Cargo controles.
                    spPautaID.Number = Business.Certificados.GetNextPautaId();

                    if (ucIdentifFrecuencia.SelectedValue == null)
                        ucIdentifFrecuencia.SelectedValue = espacio.IdentifFrecuencia;

                    if (ucIdentifIntervalo.SelectedValue == null)
                        ucIdentifIntervalo.SelectedValue = espacio.IdentifIntervalo;

                    if (espacio.HoraInicio.HasValue)
                    {
                        teHoraInicio.DateTime = FormsHelper.ConvertToDateTime(espacio.HoraInicio.Value);
                        teHoraInicioInsertar.DateTime = teHoraInicio.DateTime;
                    }

                    if (espacio.HoraFin.HasValue)
                    {
                        teHoraFin.DateTime = FormsHelper.ConvertToDateTime(espacio.HoraFin.Value);
                        teHoraFinInsertar.DateTime = teHoraFin.DateTime;
                    }

                    //Actualizo controles.
                    ucFrecuenciaChanged();

                    ASPxPageControl1.Visible = true;
                    trPauta.Visible          = true;
                    trFind.Visible           = false;

                    //Inicializo Fechas origen para copia
                    deFechaDesdeOrigenCopiar.Date = costos.VigDesde;  //origen
                    deFechaHastaOrigenCopiar.Date = costos.VigHasta; //origen
                    deFechaDesdeReemplazar.Date   = costos.VigDesde;//origen
                    deFechaHastaReemplazar.Date   = costos.VigHasta;//origen

                    //Inicializo Fechas origen para copia
                    DateTime date = new DateTime();
                    date = Convert.ToDateTime(deAnoMes.Date);
                    deFechaDesdeOrigenCopiar.Date = new DateTime(date.Year, date.Month, 1);
                    deFechaHastaOrigenCopiar.Date = new DateTime(date.Year, date.Month, 1).AddMonths(1).AddDays(-1);
                    deFechaDesdeReemplazar.Date   = new DateTime(date.Year, date.Month, 1);
                    deFechaHastaReemplazar.Date   = new DateTime(date.Year, date.Month, 1).AddMonths(1).AddDays(-1);

                    //inicializo horas origen
                    if (espacio.HoraInicio != null)
                        deHoraDesdeOrigenReemplazar.DateTime = FormsHelper.ConvertToDateTime(espacio.HoraInicio.Value);
                    else
                        deHoraDesdeOrigenReemplazar.DateTime = costos.VigDesde.Date;

                    if (espacio.HoraFin != null)
                        deHoraHastaOrigenReemplazar.DateTime = FormsHelper.ConvertToDateTime(espacio.HoraFin.Value);
                    else if (certificado != null)
                        if (certificado.HoraFin != null)
                            deHoraHastaOrigenReemplazar.DateTime = FormsHelper.ConvertToDateTime(certificado.HoraFin);

                    //fecha inicio de destino
                    deFechaDesdeDestinoCopiar.Date = costos.VigDesde; //destino

                    certificado                     = new CertificadoCabDTO();
                    certificado.AnoMes              = Convert.ToInt32(deAnoMes.Date.Year.ToString() + deAnoMes.Date.Month.ToString("00"));
                    certificado.CantSalidas         = 0;                      //Cantidad de salidas total
                    certificado.Costo               = 0;                      //Costo Total de la Pauta
                    certificado.CostoOp             = 0;                      //Costo de la Pauta para la Orden de Publicidad
                    certificado.CostoOpUni          = 0;                      //Costo de la Pauta para la Orden de Publicidad por unidad (segundos, página)
                    certificado.CostoUni            = 0;                      //Costo Total por unidad (segundos, página)
                    certificado.DatareaId           = 0;
                    certificado.DuracionTot         = 0;                      //Total Duración o Cantidad
                    certificado.FecCosto            = DateTime.Now;           //Fecha en qué se calculo el costo por última vez
                    certificado.HoraInicio          = FormsHelper.ConvertToTimeSpan(teHoraInicio.DateTime);
                    certificado.HoraFin             = FormsHelper.ConvertToTimeSpan(teHoraFin.DateTime);
                    certificado.IdentifEspacio      = Convert.ToString(ucIdentifEspacio.SelectedValue);
                    certificado.IdentifFrecuencia   = Convert.ToString(ucIdentifFrecuencia.SelectedValue);
                    certificado.IdentifIntervalo    = Convert.ToString(ucIdentifIntervalo.SelectedValue);
                    certificado.PautaId             = Convert.ToString(spPautaID.Number);
                    certificado.RecId               = 0;
                    certificado.CertValido          = "";                     //Usuario que cerró
                    certificado.UsuCosto            = costos.Confirmado;      //Usuario qué calculo el costo
                    certificado.VersionCosto        = costos.Version.Value;   //Versión del registro
                    certificado.VigDesde            = costos.VigDesde;        //Fecha desde la cual está vigente el Costo
                    certificado.VigHasta            = costos.VigHasta;        //Fecha hasta la cual estará vigente el Costo

                    CertificadoCab = certificado;

                    RefreshHomeGrid(gvHome);

                    string msg = string.Empty;

                    if (!ValidarFranjaHoraria(ref msg))
                        lblErrorLineas.Text = msg;

                    msg = string.Empty;

                    if (!ValidarFrecuencia(ref msg))
                        lblErrorLineas.Text = msg;

                    msg = string.Empty;

                    if (!ValidarIntervalo(ref msg))
                        lblErrorLineas.Text = msg;
                }
                else
                {
                    lblMsg.Text = "No existen costos Confirmados para este Espacio – Vigencia.";
                    ASPxPageControl1.Visible = true;
                    trPauta.Visible = false;
                    trFind.Visible = true;

                }
            }
        }
        private void ReCargarControles(CertificadoCabDTO certificado)
        {
            EspacioContDTO espacio = GetEspacioContenido();

            lblErrorLineas.Text = string.Empty;
            Labelx.Text = string.Empty;

            //Controles de la pauta.
            spPautaID.Number                  = Convert.ToInt32(certificado.PautaId);
            ucIdentifFrecuencia.SelectedValue = certificado.IdentifFrecuencia;
            ucIdentifIntervalo.SelectedValue  = certificado.IdentifIntervalo;

            if (FormsHelper.ConvertToDateTime(certificado.HoraInicio) != Convert.ToDateTime("00:00:00"))
                teHoraInicio.DateTime = FormsHelper.ConvertToDateTime(certificado.HoraInicio);

            teHoraInicioInsertar.DateTime = teHoraInicio.DateTime;

            if (FormsHelper.ConvertToDateTime(certificado.HoraFin) != Convert.ToDateTime("00:00:00"))
                teHoraFin.DateTime = FormsHelper.ConvertToDateTime(certificado.HoraFin);

            teHoraFinInsertar.DateTime = teHoraFin.DateTime;

            //Controles de solo lectura.
            spVersionCosto.Value = certificado.VersionCosto;
            txUsuCosto.Text      = certificado.UsuCosto;
            deFecCosto.Date      = certificado.FecCosto;
            deFecCosto.Value     = certificado.FecCosto;
            txUsuCierre.Text     = certificado.CertValido;

            if (certificado.FecCertValido.ToShortDateString() == "01/01/1900" || certificado.FecCertValido == DateTime.MinValue)
                deFecCierre.Value = "";
            else
                deFecCierre.Value = certificado.FecCertValido;

            spCantSalidas.Value = certificado.CantSalidas;

            string Espacio   = string.Empty;
            string DeAnioMes = string.Empty;

            if (botonbuscarpauta == "true")
            {
                if (gvHome.Selection.Count > 0)
                {
                    Espacio   = gvHome.GetSelectedFieldValues("Espacio")[0].ToString();
                    DeAnioMes = gvHome.GetSelectedFieldValues("Año")[0].ToString() + "-" + gvHome.GetSelectedFieldValues("Mes")[0].ToString().PadLeft(2, '0');
                }
                else
                {
                    Espacio   = certificado.IdentifEspacio;
                    DeAnioMes = certificado.VigDesde.Date.Year.ToString() + "-" + certificado.VigDesde.Date.Month.ToString().PadLeft(2, '0');
                }

            }
            else
            {
                if (botonbuscarperiodo == "true")
                {
                    Espacio   = ucIdentifEspacio.SelectedText;
                    DeAnioMes = deAnoMes.Date.ToString("yyyy-MM");
                }
                else
                {
                    //tocó la grilla
                    Espacio = gvHome.GetCurrentPageRowValues("IdentifEspacio")[0].ToString();

                    switch (botonbuscarpauta)
                    {
                        case "true": break;
                        case "":
                            {
                                DeAnioMes = certificado.VigDesde.Date.Year.ToString() + "-" + certificado.VigDesde.Date.Month.ToString().PadLeft(2, '0');
                                break;
                            }
                        case "false":
                            {
                                switch (botonbuscarperiodo)
                                {
                                    case "true": { DeAnioMes = certificado.VigDesde.Date.Year.ToString() + "-" + certificado.VigDesde.Date.Month.ToString().PadLeft(2, '0'); break; }
                                    case "": { break; }
                                    case "false": { DeAnioMes = gvHome.GetSelectedFieldValues("año")[0].ToString() + "-" + gvHome.GetSelectedFieldValues("mes")[0].ToString().PadLeft(2, '0'); break; }
                                }
                                break;
                            }
                    }
                }

            }

            litCambiarPauta.Text = string.Format("Espacio: {0} | Período: {1} | Origen: {2}", Espacio, DeAnioMes, certificado.IdentifOrigen);

            //Actualizo controles.
            ucFrecuenciaChanged();

            ASPxPageControl1.Visible = true;
            trPauta.Visible          = true;
            trFind.Visible           = false;

            //Solo se pueden modificar certificados NO cerrados.
            if (certificado.FecCertValido.Year == 1 || certificado.FecCertValido.Year == 1900)
            {
                btnSave.Enabled    = true;
                btnValidar.Enabled = true;
                ucIdentifFrecuencia.ComboBox.Enabled = true;
            }
            else
            {
                btnSave.Enabled    = false;
                btnValidar.Enabled = false;
                ucIdentifFrecuencia.ComboBox.Enabled = false;
            }

            //Inicializo Fechas...

            deHoraDesdeOrigenReemplazar.DateTime = FormsHelper.ConvertToDateTime(certificado.HoraInicio);
            deHoraHastaOrigenReemplazar.DateTime = FormsHelper.ConvertToDateTime(certificado.HoraFin);

            DateTime date = new DateTime();
            date = Convert.ToDateTime(deAnoMes.Date);

            deFechaDesdeDestinoCopiar.Date = new DateTime(date.Year, date.Month, 1);
            deFechaDesdeOrigenCopiar.Date  = new DateTime(date.Year, date.Month, 1);
            deFechaHastaOrigenCopiar.Date  = new DateTime(date.Year, date.Month, 1).AddMonths(1).AddDays(-1);
            deFechaDesdeReemplazar.Date    = new DateTime(date.Year, date.Month, 1);
            deFechaHastaReemplazar.Date    = new DateTime(date.Year, date.Month, 1).AddMonths(1).AddDays(-1);
        }
        private void CargarCertificado()
        {
            lblMsg.Text = string.Empty;
            lblErrorHome.Text = string.Empty;

            string sIdentifOrigen = string.Empty;

            if (botonbuscarperiodo != "")
            {
                if (botonbuscarperiodo == "true")
                {
                    sIdentifOrigen = (string)ucIdentifOrigen1.SelectedValue;
                    certificado = Business.Certificados.Read((string)ucIdentifEspacio.SelectedValue, deAnoMes.Date.Year, deAnoMes.Date.Month, sIdentifOrigen);
                }
                else
                {
                    sIdentifOrigen = gvHome.GetSelectedFieldValues("IdentifOrigen")[0].ToString();
                    certificado = Business.Certificados.Read((string)ucIdentifEspacio.SelectedValue, deAnoMes.Date.Year, deAnoMes.Date.Month, sIdentifOrigen);
                }
            }
            else
            {
                if (botonbuscarpauta == "")
                {
                    if (botonbuscarpauta == "true")
                    {
                        sIdentifOrigen = gvHome.GetSelectedFieldValues("IdentifOrigen")[0].ToString();
                        certificado    = Business.Certificados.Read(txNroPauta.Text, sIdentifOrigen);
                    }
                    else
                    {
                        sIdentifOrigen = gvHome.GetSelectedFieldValues("IdentifOrigen")[0].ToString();
                        var miPauta    = gvHome.GetSelectedFieldValues("PautaId")[0].ToString();
                        certificado    = Business.Certificados.Read(miPauta, sIdentifOrigen);
                    }
                }
                else
                {
                    sIdentifOrigen = (string)ucIdentifOrigen2.SelectedValue;
                    certificado    = Business.Certificados.Read(txNroPauta.Text, sIdentifOrigen);
                }

            }

            ASPxPageControl1.Visible = true;
            trPauta.Visible = true;
            trFind.Visible = false;
            EspacioContDTO espacio = GetEspacioContenido();

            if (botonbuscarpauta == "false" || botonbuscarpauta == "")
            {
                if (botonbuscarperiodo == "false" || botonbuscarperiodo == "")
                    spOrigenCertificado.Value = gvHome.GetSelectedFieldValues("IdentifOrigen")[0].ToString();
                else
                    spOrigenCertificado.Value = certificado.IdentifOrigen;
            }
            else
            {
                spOrigenCertificado.Value = certificado.IdentifOrigen;
            }

            if (certificado != null)
                ReCargarControles(certificado);
            else
            {
                if (gvHome.Selection.Count > 0)
                {
                    string EspacioX = string.Empty;
                    string DeAnioMes = string.Empty;
                    string IDOrigen = string.Empty;

                    EspacioX  = gvHome.GetSelectedFieldValues("IdentifEspacio")[0].ToString();
                    DeAnioMes = gvHome.GetSelectedFieldValues("año")[0].ToString() + "-" + gvHome.GetSelectedFieldValues("mes")[0].ToString().PadLeft(2, '0');
                    IDOrigen  = gvHome.GetSelectedFieldValues("IdentifOrigen")[0].ToString();

                    litCambiarPauta.Text = string.Format("Espacio: {0} | Período: {1} | Origen: {2}", EspacioX, DeAnioMes, IDOrigen);

                    EspacioContDTO espacio0 = GetEspacioContenido();

                    lblErrorLineas.Text = string.Empty;
                    Labelx.Text = string.Empty;

                    //Controles de la pauta.
                    spPautaID.Number = Convert.ToDecimal(gvHome.GetSelectedFieldValues("PautaId")[0]);

                    certificado = Business.Certificados.Read(spPautaID.Number.ToString(), IDOrigen);

                    ucIdentifFrecuencia.SelectedValue = certificado.IdentifFrecuencia;
                    ucIdentifIntervalo.SelectedValue  = certificado.IdentifIntervalo;

                    if (FormsHelper.ConvertToDateTime(certificado.HoraInicio) != Convert.ToDateTime("00:00:00"))
                        teHoraInicio.DateTime = FormsHelper.ConvertToDateTime(certificado.HoraInicio);

                    teHoraInicioInsertar.DateTime = teHoraInicio.DateTime;

                    if (FormsHelper.ConvertToDateTime(certificado.HoraFin) != Convert.ToDateTime("00:00:00"))
                        teHoraFin.DateTime = FormsHelper.ConvertToDateTime(certificado.HoraFin);

                    teHoraFinInsertar.DateTime = teHoraFin.DateTime;

                    //Controles de solo lectura.
                    spVersionCosto.Value = certificado.VersionCosto;
                    txUsuCosto.Text      = certificado.UsuCosto;
                    deFecCosto.Date      = certificado.FecCosto;
                    deFecCosto.Value     = certificado.FecCosto;
                    txUsuCierre.Text     = certificado.CertValido;
                    deFecCierre.Value    = certificado.FecCertValido;
                    spCantSalidas.Value  = certificado.CantSalidas;

                    //Actualizo controles.
                    ucFrecuenciaChanged();

                    ASPxPageControl1.Visible = true;
                    trPauta.Visible          = true;
                    trFind.Visible           = false;

                    //Solo se pueden modificar certificados NO cerrados.
                    if (certificado.FecCertValido.Year == 1)
                    {
                        btnSave.Enabled     = true;
                        btnValidar.Enabled  = true;
                        ucIdentifFrecuencia.ComboBox.Enabled = true;
                    }
                    else
                    {
                        btnSave.Enabled     = false;
                        btnValidar.Enabled  = false;
                        ucIdentifFrecuencia.ComboBox.Enabled = false;

                    }

                    deHoraDesdeOrigenReemplazar.DateTime = FormsHelper.ConvertToDateTime(certificado.HoraInicio);
                    deHoraHastaOrigenReemplazar.DateTime = FormsHelper.ConvertToDateTime(certificado.HoraFin);

                    DateTime date = new DateTime();
                    date = Convert.ToDateTime(deAnoMes.Date);

                    deFechaDesdeDestinoCopiar.Date  = new DateTime(date.Year, date.Month, 1);
                    deFechaDesdeOrigenCopiar.Date   = new DateTime(date.Year, date.Month, 1);
                    deFechaHastaOrigenCopiar.Date   = new DateTime(date.Year, date.Month, 1).AddMonths(1).AddDays(-1);
                    deFechaDesdeReemplazar.Date     = new DateTime(date.Year, date.Month, 1);
                    deFechaHastaReemplazar.Date     = new DateTime(date.Year, date.Month, 1).AddMonths(1).AddDays(-1);
                }

            }

            RecargarDiaHora();

            spEspacio.Value           = GetEspacioContenido().IdentifEspacio;
            spMedio.Value             = GetEspacioContenido().IdentifMedio;
            spAnioMes.Value           = CertificadoCab.AnoMes.ToString().Substring(0, 4) + "-" + CertificadoCab.AnoMes.ToString().Substring(4);
            spOrigenCertificado.Value = certificado.IdentifOrigen;
        }
        public static void Update(CertificadoCabDTO certificado, List<CertificadoDetDTO> lineas)
        {
            CertificadoSKUDTO sku;

            using (SqlTransaction tran = dao.IniciarTransaccion())
            {
                try
                {
                    dao.Update(certificado, certificado.RecId, tran);

                    //Elimino toda las lineas del ordenado y las re-creo.
                    daoDetalle.Delete(
                        string.Format("PautaId = '{0}' AND IdentifOrigen = '{1}'",
                        certificado.PautaId,
                        certificado.IdentifOrigen),
                        tran);

                    foreach (CertificadoDetDTO linea in lineas)
                    {
                        linea.RecId = 0;
                        linea.DatareaId = certificado.DatareaId;
                        linea.PautaId = certificado.PautaId;
                        linea.IdentifOrigen = certificado.IdentifOrigen;

                        daoDetalle.Create(linea, tran);
                    }

                    //Elimino toda las lineas del ordenado y las re-creo.
                    daoSKU.Delete(
                        string.Format("PautaId = '{0}'",
                        certificado.PautaId),
                        tran);

                    var dtSKU = BuildAllSKU(lineas);
                    foreach (System.Data.DataRow dr in dtSKU.Rows)
                    {
                        sku = new CertificadoSKUDTO();

                        sku.RecId = 0;
                        sku.DatareaId = certificado.DatareaId;
                        sku.PautaId = certificado.PautaId;
                        sku.IdentifOrigen = certificado.IdentifOrigen;

                        if (dr["Duracion"] != DBNull.Value)
                            sku.Duracion = Convert.ToDecimal(dr["Duracion"]);
                        else
                            sku.Duracion = null;

                        sku.CantSalidas = Convert.ToDecimal(dr["CantSalidas"]);
                        sku.IdentifAviso = Convert.ToString(dr["IdentifAviso"]);
                        sku.IdentifSKU = Convert.ToString(dr["IdentifSKU"]);

                        daoSKU.Create(sku, tran);
                    }

                    dao.CommitTransaccion(tran);
                }
                catch (Exception)
                {
                    dao.RollbackTransaccion(tran);
                    throw;
                }
            }
        }
        public static void Update(CertificadoCabDTO certificado, string sWhere)
        {
            using (SqlTransaction tran = dao.IniciarTransaccion())
            {
                try
                {
                    dao.Update(certificado, sWhere, tran);

                    dao.CommitTransaccion(tran);

                }
                catch
                {
                    dao.RollbackTransaccion(tran);
                }

            }
        }
        public static List<CertificadoDetDTO> ReadAllLineas(CertificadoCabDTO certificado)
        {
            if (certificado.IdentifOrigen != "NULL")
            {
                List<CertificadoDetDTO> mycert = daoDetalle.ReadAll(string.Format("PautaId = '{0}' AND IdentifOrigen = '{1}'", certificado.PautaId,certificado.IdentifOrigen));

                return mycert;
            }
            return daoDetalle.ReadAll(string.Format("PautaId = '{0}' AND IdentifOrigen != 'NULL'", certificado.PautaId));
        }
        //(int id)
        public static void Delete(CertificadoCabDTO certificado)
        {
            using (SqlTransaction tran = dao.IniciarTransaccion())
            {
                try
                {   //Elimino toda las lineas del certificado detalle
                    daoDetalle.Delete( string.Format("PautaId = '{0}' AND IdentifOrigen = '{1}'", certificado.PautaId,certificado.IdentifOrigen), tran);
                    //Elimino toda las lineas del certificado sku
                    daoSKU.Delete( string.Format("PautaId = '{0}' AND IdentifOrigen = '{1}'", certificado.PautaId,certificado.IdentifOrigen), tran);
                    //elimino certificado.
                    dao.Delete(string.Format("PautaId = '{0}' AND IdentifOrigen = '{1}'", certificado.PautaId, certificado.IdentifOrigen), tran);

                    dao.CommitTransaccion(tran);
                }
                catch (Exception)
                {
                    dao.RollbackTransaccion(tran);
                    throw;
                }
            }
        }
        public static void Create(CertificadoCabDTO certificado, List<CertificadoDetDTO> lineas)
        {
            CertificadoSKUDTO sku;

            using (SqlTransaction tran = dao.IniciarTransaccion())
            {
                try
                {
                    certificado.PautaId = SaveNextPautaId(tran).ToString();
                    certificado         = dao.Create(certificado, tran);

                    foreach (CertificadoDetDTO linea in lineas)
                    {
                        linea.RecId     = 0;
                        linea.DatareaId = certificado.DatareaId;
                        linea.PautaId   = certificado.PautaId;

                        daoDetalle.Create(linea, tran);
                    }

                    var dtSKU = BuildAllSKU(lineas);
                    foreach (System.Data.DataRow dr in dtSKU.Rows)
                    {
                        sku = new CertificadoSKUDTO();

                        sku.RecId     = 0;
                        sku.DatareaId = certificado.DatareaId;
                        sku.PautaId   = certificado.PautaId;

                        if (dr["Duracion"] != DBNull.Value)
                            sku.Duracion = Convert.ToDecimal(dr["Duracion"]);
                        else
                            sku.Duracion = null;

                        sku.CantSalidas  = Convert.ToDecimal(dr["CantSalidas"]);
                        sku.IdentifAviso = Convert.ToString(dr["IdentifAviso"]);
                        sku.IdentifSKU   = Convert.ToString(dr["IdentifSKU"]);

                        daoSKU.Create(sku, tran);
                    }

                    dao.CommitTransaccion(tran);
                }
                catch (Exception)
                {
                    dao.RollbackTransaccion(tran);
                    throw;
                }
            }
        }
        public static void CalcularCosto(CertificadoCabDTO certificadoCAB, CostosDTO costoCab, List<CertificadoDetDTO> lineas, string usuario)
        {
            decimal costo = 0;
            decimal costoAcum = 0;

            //Lockeo la seccion para que otro thread no me descontrole los calculos.
            lock (typeof(Estimado))
            {
                using (SqlTransaction tran = dao.IniciarTransaccion())
                {
                    try
                    {
                        //La recargo para asegurarme de tener la version mas reciente...
                        certificadoCAB = dao.Read(string.Format("PautaId='{0}'", certificadoCAB.PautaId));

                        if (costoCab == null)
                        {
                            throw new Exception("No hay costos confirmados para realizar el costeo de la Pauta: " + certificadoCAB.PautaId.ToString());
                        }

                        //Inicializo en '0' los registros de trabajo.
                        dao.MoverCeros(certificadoCAB.PautaId, tran);
                        daoDetalle.MoverCeros(certificadoCAB.PautaId, tran);
                        daoSKU.MoverCeros(certificadoCAB.PautaId, tran);

                        //•	Seleccionar la Tabla CostoProveedorVersion
                        var costosProveedorVersion = Costos.ReadAllProveedorVersiones(certificadoCAB.IdentifEspacio, costoCab.VigDesde, costoCab.VigHasta, costoCab.Version.Value);

                        //Por cada registro seleccionado:
                        foreach (var costoProveedorVersion in costosProveedorVersion)
                        {
                            //•	Calcular Tipo de cambio
                            var tipoCambioValor = Monedas.GetTipoCambioValor(costoProveedorVersion.IdentifMon);
                            var costoCur = costoProveedorVersion.Costo * tipoCambioValor;

                            //•	Calcular GrossingUp
                            var costoGros = costoCur * costoProveedorVersion.GrossingUp;

                            //•	Actualizar Tabla DET
                            var certificadoDetalles = daoDetalle.ReadAll(string.Format("PautaId='{0}'", certificadoCAB.PautaId));
                            foreach (var certificadoDET in certificadoDetalles)
                            {
                                if (costoProveedorVersion.TipoCosto == "FIJO_MENSUAL")
                                {
                                    if (certificadoCAB.DuracionTot > 0)
                                    {
                                        if (certificadoDET.Duracion != null)
                                        {
                                            costo = (costoGros / certificadoCAB.DuracionTot) * certificadoDET.Duracion.Value;
                                        }
                                        else
                                        {
                                            decimal? divisor = 0;

                                            costo = (costoGros / certificadoCAB.DuracionTot) * divisor.Value;
                                        }

                                    }
                                    else
                                    {
                                        costo = costoGros;
                                    }

                                }
                                else if (costoProveedorVersion.TipoCosto == "SEGUNDO_FIJO")
                                {
                                    costo = costoGros * certificadoDET.Duracion.Value;
                                }
                                else if (costoProveedorVersion.TipoCosto == "SALIDA")
                                {
                                    costo = costoGros;
                                }
                                else if (costoProveedorVersion.TipoCosto == "UNIDAD_PAUTADA")
                                {
                                    costo = costoGros;
                                }
                                else
                                {
                                    throw new Exception("Proveedor.TipoCosto Desconocido.");
                                }

                                certificadoDET.Costo += costo;

                                if (certificadoDET.Duracion != null)
                                {

                                    if (certificadoDET.Duracion > 0)
                                    {
                                        certificadoDET.CostoUni = certificadoDET.Costo / certificadoDET.Duracion.Value;
                                    }
                                    else
                                    {
                                        certificadoDET.CostoUni = certificadoDET.Costo;
                                    }

                                }
                                else
                                {
                                    certificadoDET.CostoUni = certificadoDET.Costo;
                                }

                                if (costoProveedorVersion.IncluidoOP)
                                {
                                    certificadoDET.CostoOp += costo;

                                    if (certificadoDET.Duracion != null)
                                    {
                                        certificadoDET.CostoOpUni = certificadoDET.CostoOp / certificadoDET.Duracion.Value;
                                    }
                                    else
                                    {
                                        certificadoDET.CostoOpUni = certificadoDET.CostoOp;
                                    }

                                }

                                costoAcum += costo;

                                //o	Actualizar la Tabla DET
                                daoDetalle.Update(certificadoDET, certificadoDET.RecId, tran);
                            }

                            //•	Actualizar Tabla SKU
                            foreach (var certificadoDET in certificadoDetalles)
                            {
                                //o	Seleccionar la Tabla SKU con SKU.PautaID = PautaId enviado y SKU.IdentifAviso = DET.IdentifAviso
                                var ordenadoSKUs = daoSKU.ReadAll(string.Format("PautaId='{0}' AND IdentifAviso='{1}'", certificadoCAB.PautaId, certificadoDET.IdentifAviso));

                                //o	Seleccionar la Tabla Avisos con IdentifAviso... >>
                                var aviso = Avisos.Read(string.Format("IdentifAviso='{0}'", certificadoDET.IdentifAviso));
                                var productosPiezaArte = PiezasArte.ReadAllProductos(aviso.IdentifPieza);
                                foreach (var ordenadoSKU in ordenadoSKUs)
                                {
                                    //o	>> ... y luego la tabla PiezasArteSKU con IdentifPieza, TipoProd = “Primario” y IdentifSKU = SKU.IdentifSKU
                                    var productoPiezaArte = productosPiezaArte.Find(x => x.TipoProd.Trim().ToUpper() == "PRIMARIO" && x.IdentifSKU == ordenadoSKU.IdentifSKU);

                                    ordenadoSKU.Costo += (productoPiezaArte.Coeficiente.Value * costo);

                                    if (ordenadoSKU.Duracion != null)
                                    {
                                        ordenadoSKU.CostoUni = (ordenadoSKU.Costo / ordenadoSKU.Duracion.Value);
                                    }
                                    else
                                    {
                                        ordenadoSKU.CostoUni = (ordenadoSKU.Costo);
                                    }

                                    //•	Si campo CostoProveedorVersion.IncluidoOP = “Si”
                                    if (costoProveedorVersion.IncluidoOP)
                                    {
                                        ordenadoSKU.CostoOp += (productoPiezaArte.Coeficiente.Value * costo);

                                        if (ordenadoSKU.Duracion != null)
                                        {
                                            ordenadoSKU.CostoOpUni = (ordenadoSKU.CostoOp / ordenadoSKU.Duracion.Value);
                                        }
                                        else
                                        {
                                            ordenadoSKU.CostoOpUni = (ordenadoSKU.CostoOp);
                                        }

                                    }

                                    //o	Actualizar Tabla SKU
                                    daoSKU.Update(ordenadoSKU, ordenadoSKU.RecId, tran);
                                }
                            }

                            certificadoCAB.Costo = costoAcum;

                            if (certificadoCAB.DuracionTot > 0)
                            {
                                certificadoCAB.CostoUni = certificadoCAB.Costo / certificadoCAB.DuracionTot;
                            }
                            else
                            {
                                certificadoCAB.CostoUni = certificadoCAB.Costo;
                            }

                            if (costoProveedorVersion.IncluidoOP)
                            {
                                certificadoCAB.CostoOp = certificadoCAB.Costo;

                                if (certificadoCAB.DuracionTot > 0)
                                {
                                    certificadoCAB.CostoOpUni = certificadoCAB.CostoOp / certificadoCAB.DuracionTot;
                                }
                                else
                                {
                                    certificadoCAB.CostoOpUni = certificadoCAB.CostoOp;
                                }

                            }

                            certificadoCAB.VersionCosto = costoCab.Version.Value;
                            certificadoCAB.VigDesde = costoCab.VigDesde;
                            certificadoCAB.VigHasta = costoCab.VigHasta;
                            certificadoCAB.FecCosto = DateTime.Now;
                            certificadoCAB.UsuCosto = usuario;

                            dao.Update(certificadoCAB, certificadoCAB.RecId, tran);
                        }

                        dao.CommitTransaccion(tran);
                    }
                    catch (Exception ex)
                    {
                        dao.RollbackTransaccion(tran);
                        throw new Exception("CalcularCosto", ex);
                    }
                }
            }
        }