public EstimadoVersion(Estimado estimado, decimal version)
        {
            EstimadoDetVersionDTO estDetVer;
            EstimadoSKUVersionDTO estSKUVer;

            Cabecera         = new EstimadoCabVersionDTO(estimado.Cabecera);
            Cabecera.Version = version;

            Lineas = new List<EstimadoDetVersionDTO>();

            foreach (var estDet in estimado.Lineas)
            {
                estDetVer         = new EstimadoDetVersionDTO(estDet);
                estDetVer.Version = version;
                estDetVer.RecId   = 0;
                Lineas.Add(estDetVer);
            }

            SKUs = new List<EstimadoSKUVersionDTO>();

            foreach (var estSKU in estimado.SKUs)
            {
                estSKUVer         = new EstimadoSKUVersionDTO(estSKU);
                estSKUVer.Version = version;
                estSKUVer.RecId   = 0;
                SKUs.Add(estSKUVer);
            }
        }
        public static Estimado Confirmar(EstimadoCabDTO estimadoCab, List<EstimadoDetDTO> lineas, List<EstimadoSKUDTO> skus)
        {
            using (SqlTransaction tran = dao.IniciarTransaccion())
            {
                try
                {
                    Estimado estimado = new Estimado();
                    estimado.Cabecera = estimadoCab;
                    estimado.Lineas   = lineas;
                    estimado.SKUs     = skus;

                    dao.Update(estimado.Cabecera, estimado.Cabecera.RecId, tran);

                    EstimadoCabVersionDTO cabVer = new EstimadoCabVersionDTO(estimado.Cabecera);
                    cabVer.RecId = 0;
                    daoVer.Create(cabVer, tran);

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

                    foreach (var det in estimado.Lineas)
                    {
                        det.RecId     = 0;
                        det.DatareaId = estimadoCab.DatareaId;
                        det.PautaId   = estimadoCab.PautaId;
                        daoDetalle.Create(det, tran);

                        EstimadoDetVersionDTO detVer = new EstimadoDetVersionDTO(det);
                        detVer.Version = estimado.Cabecera.Version;
                        detVer.RecId = 0;
                        daoDetalleVer.Create(detVer, tran);
                    }

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

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

                        sku.RecId     = 0;
                        sku.DatareaId = estimado.Cabecera.DatareaId;
                        sku.PautaId   = estimado.Cabecera.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);

                        EstimadoSKUVersionDTO skuVer = new EstimadoSKUVersionDTO(sku);
                        skuVer.Version               = estimado.Cabecera.Version;
                        skuVer.RecId                 = 0;
                        daoSKUVer.Create(skuVer, tran);

                    }

                    dao.CommitTransaccion(tran);

                    return estimado;
                }
                catch (Exception)
                {
                    dao.RollbackTransaccion(tran);
                    throw;
                }
            }
        }