示例#1
0
        protected void InitTicket(Ticket ticket)
        {
            if (ticket.Estado != Ticket.Estados.Pendiente)
            {
                return;
            }
            if (ticket.Vehiculo == null)
            {
                throw new ApplicationException("No se puede iniciar el ticket porque no tiene un vehiculo asignado");
            }
            var ciclo = new CicloLogisticoHormigon(ticket, DaoFactory, new MessageSaver(DaoFactory));

            ciclo.ProcessEvent(new InitEvent(DateTime.UtcNow));
        }
示例#2
0
        protected void btIniciar_Click(object sender, EventArgs e)
        {
            mpePanel.Hide();
            if (TicketToInitId.Get() <= 0)
            {
                return;
            }

            var date = dtHora.SelectedDate;

            if (!date.HasValue)
            {
                ThrowMustEnter("FECHA");
            }

            var ticket = DAOFactory.TicketDAO.FindById(TicketToInitId.Get());

            TicketToInitId.Set(-1);

            SetStartDate(ticket, SecurityExtensions.ToDataBaseDateTime(date.Value));

            var messageSaver = new MessageSaver(DAOFactory);

            var ciclo = new CicloLogisticoHormigon(ticket, DAOFactory, messageSaver);

            var evento = new InitEvent(DateTime.UtcNow);

            try
            {
                ciclo.ProcessEvent(evento);
                ShowInfo(CultureManager.GetSystemMessage("CLOG_START_SENT") + ticket.Vehiculo.Interno);
                Bind();
                if (TieneDocumentosVencidos.Get())
                {
                    messageSaver.Save(MessageCode.CicloLogisticoIniciadoDocumentosInvalidos.GetMessageCode(),
                                      ticket.Vehiculo, evento.Date.AddSeconds(1), null, string.Empty);
                }
            }
            catch (NoVehicleException)
            {
                ShowError(new ApplicationException(CultureManager.GetError("TICKET_NO_VEHICLE_ASSIGNED")));
            }
            catch //AlreadyOpenException, QueueException, Exception
            {
                ShowError(new ApplicationException(CultureManager.GetError("CLOG_MESSAGE_NOT_SENT") + ticket.Vehiculo.Interno));
            }
        }
示例#3
0
        protected override void Regenerate()
        {
            if (EditObject.Vehiculo == null)
            {
                ThrowMustEnter("Entities", "PARENTI03");
            }

            var ticket = DAOFactory.TicketDAO.FindById(EditObject.Id);
            var ciclo  = new CicloLogisticoHormigon(ticket, DAOFactory, null /*new MessageSaver(DAOFactory)*/);

            ciclo.Regenerate();

            ShowInfo(CultureManager.GetSystemMessage("TCIKET_REGENERATE_DONE"));
            Bind();
            updRefreshTabGeneral.Update();
            updRefreshTabDetalles.Update();
        }
示例#4
0
        protected void btOpenedCerrarTicket_Click(object sender, EventArgs e)
        {
            if (TicketToInitId.Get() <= 0)
            {
                return;
            }

            var ticket = DAOFactory.TicketDAO.FindById(TicketToInitId.Get());

            var opened = DAOFactory.TicketDAO.FindEnCurso(ticket.Vehiculo.Dispositivo);

            if (opened != null)
            {
                opened.UserField3 += "(cerrado manual x inicio)";
                var ciclo  = new CicloLogisticoHormigon(opened, DAOFactory, new MessageSaver(DAOFactory));
                var evento = new CloseEvent(DateTime.UtcNow);
                ciclo.ProcessEvent(evento);
            }

            StartTicketWindow(ticket);
        }
示例#5
0
        protected void lnkbtnEstado_Command(object sender, CommandEventArgs commandEventArgs)
        {
            var index  = Convert.ToInt32(commandEventArgs.CommandArgument);
            var id     = Convert.ToInt32(Grid.DataKeys[index].Value);
            var ticket = DAOFactory.TicketDAO.FindById(id);

            switch (commandEventArgs.CommandName)
            {
            case "Start":
                StartTicketWindow(ticket);
                break;

            case "Close":
                ticket.UserField3 += "(cerrado manual)";
                var ciclo  = new CicloLogisticoHormigon(ticket, DAOFactory, new MessageSaver(DAOFactory));
                var evento = new CloseEvent(DateTime.UtcNow);
                ciclo.ProcessEvent(evento);
                Bind();
                break;
            }
        }
示例#6
0
        public Respuesta <bool> Anular(string sessionId, string company, string branch, string code, string reason)
        {
            try
            {
                ValidateLoginInfo(sessionId, Securables.WebServiceTickets);

                var empresa = GetEmpresaByCode(company);
                var linea   = string.IsNullOrEmpty(branch) ? null : GetLineaByCode(branch, empresa);
                var codigo  = code.Trim();
                if (string.IsNullOrEmpty(codigo))
                {
                    throw new ApplicationException("El codigo no puede estar vacío");
                }

                var ticket = DAOFactory.TicketDAO.FindByCode(new[] { empresa.Id }, new[] { linea != null ? linea.Id : -1 }, codigo);

                if (ticket == null)
                {
                    throw new ApplicationException("No se encontró un ticket con el código: " + code);
                }

                if (ticket.Estado == Ticket.Estados.EnCurso)
                {
                    var ciclo        = new CicloLogisticoHormigon(ticket, DAOFactory, new MessageSaver(DAOFactory));
                    var eventoCierre = EventFactory.GetCloseEvent();
                    ciclo.ProcessEvent(eventoCierre);
                }
                ticket.Anular(reason, Usuario);

                DAOFactory.TicketDAO.SaveOrUpdate(ticket);

                return(Respuesta <bool> .Create(true));
            }
            catch (Exception e)
            {
                STrace.Error("WebService Tickets", e.Message);
                return(Respuesta <bool> .CreateError(e.Message));
            }
        }
示例#7
0
        public Respuesta <bool> AssignAndInit(string sessionId, string company, string branch, DateTime utcDate, string clientCode, string deliveryPointCode, int tripNo, string vehicle, string driver, string load)
        {
            try
            {
                ValidateLoginInfo(sessionId, Securables.WebServiceTickets);

                var empresa = GetEmpresaByCode(company);

                var linea = string.IsNullOrEmpty(branch) ? null : GetLineaByCode(branch, empresa);

                Ticket ticket;
                if (tripNo > 0)
                {
                    ticket = DAOFactory.TicketDAO.FindByOrdenDiario(empresa != null ? empresa.Id : -1,
                                                                    linea != null ? linea.Id : -1, utcDate, tripNo);

                    if (ticket == null)
                    {
                        throw new ApplicationException("No se encontro un ticket con un orden " + tripNo + " para el dia " + utcDate.ToString("dd/MM/yyyy"));
                    }

                    if (ticket.Cliente.Codigo != clientCode)
                    {
                        throw new ApplicationException("El ticket con orden " + tripNo + " para el dia " + utcDate.ToString("dd/MM/yyyy") + " no tiene el mismo cliente que el ingresado. Ingresado: " + clientCode + " - Ticket " + ticket.Codigo + ": " + ticket.Cliente.Codigo);
                    }
                }
                else
                {
                    var respuesta = Respuesta <bool> .Create(true);

                    respuesta.Mensaje = "No se recibió número de viaje. Ticket omitido.";
                    return(respuesta);

                    //var cliente = GetClienteByCode(clientCode);

                    //var puntoEntrega = GetPuntoEntregaByCode(deliveryPointCode, cliente);

                    //var tickets = DAOFactory.TicketDAO.GetList(new[] { empresa != null ? empresa.Id : -1 },
                    //                                           new[] { linea != null ? linea.Id : -1 },
                    //                                           new[] { -1 },
                    //                                           new[] { -1 },
                    //                                           new[] { -1 },
                    //                                           new[] { -1 },
                    //                                           new int[] { Ticket.Estados.Pendiente },
                    //                                           new[] { cliente.Id },
                    //                                           new[] { puntoEntrega != null ? puntoEntrega.Id : -1 },
                    //                                           new[] { -1 },
                    //                                           utcDate.Date, utcDate.Date.AddDays(1));

                    //ticket = tickets.Where(t => t.Estado == Ticket.Estados.Pendiente).FirstOrDefault();

                    //if (ticket == null) throw new ApplicationException("No se encontro un ticket para el cliente " + clientCode);
                }

                var vehiculo = GetCocheByInterno(empresa, linea, vehicle);

                if (vehiculo.Dispositivo == null)
                {
                    throw new ApplicationException("El vehiculo " + vehiculo.Interno + " no tiene un dispositivo asignado.");
                }

                var multiplesRemitos = ticket.Pedido != null && ticket.Pedido.EsMinimixer;
                var ticketVehiculo   = DAOFactory.TicketDAO.FindEnCurso(vehiculo.Dispositivo);
                if (ticketVehiculo != null)
                {
                    if (!multiplesRemitos || ticketVehiculo.Pedido == null || ticket.Pedido == null || ticketVehiculo.Pedido.Id != ticket.Pedido.Id)
                    {
                        ticketVehiculo.UserField3 += "(auto cerrado ws)";
                        var cicloAnterior = new CicloLogisticoHormigon(ticketVehiculo, DAOFactory, new MessageSaver(DAOFactory));
                        var eventoCierre  = EventFactory.GetCloseEvent();
                        cicloAnterior.ProcessEvent(eventoCierre);
                    }
                    else
                    {
                        ticket.Anular("Multiples remitos: " + ticketVehiculo.Codigo + " (ws)", Usuario);
                        DAOFactory.TicketDAO.SaveOrUpdate(ticket);
                        ticket = ticketVehiculo;
                    }
                }

                ticket.Vehiculo           = vehiculo;
                ticket.Dispositivo        = vehiculo.Dispositivo;
                ticket.CantidadCargaReal += load;
                ticket.UserField3         = "(iniciado via " + (tripNo > 0 ? "nro viaje" : "ws") + ")";

                var ciclo = new CicloLogisticoHormigon(ticket, DAOFactory, new MessageSaver(DAOFactory));
                ciclo.ProcessEvent(EventFactory.GetInitEvent());

                STrace.Trace("WebService Tickets", vehiculo.Dispositivo.Id, String.Format("Ticket {0} iniciado correctamente. {1}", ticket.Codigo, tripNo > 0 ? "Por nro de viaje" : "Por datos"));
                return(Respuesta <bool> .Create(true));
            }
            catch (Exception e)
            {
                STrace.Error("WebService Tickets", e.Message);
                return(Respuesta <bool> .CreateError(e.Message));
            }
        }