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 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 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;
                }
            }
        }