Ejemplo n.º 1
0
        private void CargaProgramaCliente()
        {
            SqlDataReader dr;

            SqlParameter[] _param = new SqlParameter[1];
            _param[0]       = new SqlParameter("@Cliente", SqlDbType.Int);
            _param[0].Value = Cliente;

            try
            {
                dr = _data.LoadData("spEDFProgramaLecturaClienteConsulta", CommandType.StoredProcedure, _param);

                Programacion oProg;
                int          intCliente;
                byte         bytCadaCuanto;
                _ProgramacionesAsignadas = new ArrayList();

                while (dr.Read())
                {
                    intCliente    = Convert.ToInt32(dr["Cliente"]);
                    bytCadaCuanto = Convert.ToByte(dr["CadaCuanto"]);
                    switch (dr["Programa"].ToString())
                    {
                    case "PM":
                        oProg = new Programacion(intCliente, (Convert.ToByte(dr["Dia"])), bytCadaCuanto);
                        _ProgramacionesAsignadas.Add(oProg);
                        break;

                    case "PC":
                        oProg = new Programacion(intCliente, ((SigaMetClasses.Enumeradores.enumCardinalidad)(Convert.ToInt32(dr["Cardinalidad"]))),
                                                 ((SigaMetClasses.Enumeradores.enumDiaSemana)(Convert.ToInt32(dr["Dia"]))), bytCadaCuanto);
                        _ProgramacionesAsignadas.Add(oProg);
                        break;
                    }
                }
            }

            catch (Exception ex)
            {
                throw new Exception("Error al leer los datos.", ex);
            }
            finally
            {
                _data.CloseConnection();
            }
        }
Ejemplo n.º 2
0
        public Calculo(int Cliente)
        {
            _Cliente = Cliente;
            System.Globalization.DateTimeFormatInfo x = new System.Globalization.DateTimeFormatInfo();
            x.FirstDayOfWeek = DayOfWeek.Monday;
            int          DiaDeLaSemana = (int)(DateTime.Now.DayOfWeek);
            DateTime     SourceDate    = DateTime.MinValue;
            string       strCalculo    = "";
            Programacion oProg;

            oProg = new Programacion(_Cliente);
            int _TotalRegistros = oProg.ProgramacionesAsignadas.Count;

            if (_TotalRegistros <= 0)
            {
                throw new ApplicationException("El cliente " + _Cliente.ToString() + " no tiene programaciones asignadas.");
            }
            //Carga de los ultimos 5 pedidos de gas del cliente, ordenados cronológicamente
            SqlDataReader dr;
            ////Dim cn As New SqlConnection(SigaMetClasses.LeeInfoConexion(False))
            SqlConnection cn  = SigaMetClasses.DataLayer.Conexion;
            SqlCommand    cmd = new SqlCommand("spCCConsultaUltimos5PedidosCliente", cn);

            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@Cliente", SqlDbType.Int);
            cmd.Parameters[0].Value = _Cliente;
            try
            {
                cn.Open();
                dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo conectar a la base de datos.", ex);
            }
            //Exit Sub


            //		//**CALCULO PARA LA FECHA ORÍGEN
            ////Leo el primer registro
            dr.Read();

            try
            {
                //	//Checo cuál es el status de ese pedido

                switch (((String)(dr["Status"])).Trim())
                {
                case "SURTIDO":                                         ////Si está surtido...
                    SourceDate  = ((DateTime)(dr["FSuministro"])).Date; ////Tomo en cuenta su fecha de suministro
                    strCalculo += "SURTIDO - Pedido: " + dr["PedidoReferencia"].ToString().Trim() + "// Fecha Orígen: " + SourceDate.ToShortDateString();
                    break;

                case "CANCELADO":                                            //Si está cancelado...
                    strCalculo += " ***EL ULTIMO PEDIDO FUE CANCELADO*** ";
                    if (((byte)(dr["TipoPedido"]) == 2))                     //Si era programado...
                    {
                        SourceDate  = ((DateTime)(dr["FCancelacion"])).Date; //Tomo en cuenta su fecha de cancelación (REGLA)
                        strCalculo += "CANCELADO - Pedido: " + dr["PedidoReferencia"].ToString().Trim() + "/ Fecha Orígen: " + SourceDate.ToShortDateString();
                    }
                    else                             //De lo contrario tomo en cuenta la fecha del último pedido suministrado (REGLA)
                    {
                        strCalculo += " //Leyendo el histórico.../// ";

                        while (dr.Read())
                        {
                            if (((String)(dr["Status"])).Trim() == "SURTIDO")
                            {
                                SourceDate  = (((DateTime)(dr["FSuministro"]))).Date;
                                strCalculo += "SURTIDO - Pedido: " + dr["PedidoReferencia"].ToString().Trim() + "/ Fecha Orígen: " + SourceDate.ToShortDateString();
                            }
                            else
                            {
                                //De plano si no tiene un pedido surtido en su historial, lo programo para mañana!
                                SourceDate  = FechaServidor.AddDays(1);
                                strCalculo += "El cliente no tiene histórico pedidos surtidos.  Se programará para el día de mañana " + SourceDate.ToShortDateString();
                            }
                        }
                    }
                    break;

                case "ACTIVO":                         //Si está activo
                    SourceDate  = (((DateTime)(dr["FCompromiso"]))).Date;
                    strCalculo += " [El último pedido está activo.  Se tomará en cuenta la fecha de compromiso de éste [" + SourceDate.ToShortDateString() + "]";
                    break;
                }
            }

            catch (Exception ex)
            {
                throw new Exception("Error fatal!", ex);
            }

            //De plano... DE PLANO si no se pudo determinar la fecha orígen... entonces hay un error!
            if (SourceDate == DateTime.MinValue)
            {
                throw new Exception("No se pudo determinar la fecha orígen para la programación.");
            }
            _Calculo = strCalculo;
            if (cn.State == ConnectionState.Open)
            {
                cn.Close();
            }

            _FProximoPedido = SiguienteFecha(_FOrigen, _Cliente);
        }
Ejemplo n.º 3
0
        private DateTime SiguienteFecha(DateTime FechaOrigen, int Cliente)
        {
            DateTime     FechaResultado = DateTime.MinValue;
            Programacion oProg;

            oProg = new Programacion(Cliente);
            Programacion.enumPrograma _Programa;
            byte _CadaCuanto;
            byte _Dia;

            SigaMetClasses.Enumeradores.enumCardinalidad _Cardinalidad;
            Programacion.enumTipoPeriodo _TipoPeriodo;
            int TotalRegistros = oProg.ProgramacionesAsignadas.Count;

            if (TotalRegistros == 1)
            {
                oProg         = (Programacion)(oProg.ProgramacionesAsignadas[0]);
                _Programa     = oProg.Programa;
                _CadaCuanto   = oProg.CadaCuanto;
                _Dia          = oProg.Dia;
                _Cardinalidad = oProg.Cardinalidad;
                _TipoPeriodo  = oProg.TipoPeriodo;
                switch (_Programa)
                {
                case Programacion.enumPrograma.PP:
                    int _TotalDiasSuma = 0;

                    switch (_TipoPeriodo)
                    {
                    case Programacion.enumTipoPeriodo.Dia:
                        _TotalDiasSuma = _CadaCuanto;
                        break;

                    case Programacion.enumTipoPeriodo.Semana:
                        _TotalDiasSuma = _CadaCuanto * 7;
                        break;

                    case Programacion.enumTipoPeriodo.Mes:
                        _TotalDiasSuma = _CadaCuanto * 30;
                        break;
                    }
                    FechaResultado = FechaOrigen;
                    FechaResultado = FechaResultado.AddDays(_TotalDiasSuma);
                    if (!EsDiaLaborable(FechaResultado))
                    {
                        FechaResultado = this.DiaLaborableAnterior(FechaResultado);
                    }
                    break;

                case Programacion.enumPrograma.PS:
                    FechaResultado = FechaOrigen;
                    while ((int)(FechaResultado.DayOfWeek) != _Dia)
                    {
                        FechaResultado = FechaResultado.AddDays(1);
                    }
                    if (!EsDiaLaborable(FechaResultado))
                    {
                        FechaResultado = this.DiaLaborableAnterior(FechaResultado);
                    }
                    break;

                case Programacion.enumPrograma.PM:
                    if (FechaOrigen <= FechaServidor)
                    {
                        if (FechaOrigen.Month < FechaServidor.Month)
                        {
                        }
                        else
                        {
                            throw new Exception("");
                        }
                    }
                    break;
                }
            }

            return(FechaResultado);
        }