Пример #1
0
        /// <summary>
        /// Apaga os dados da rota.
        /// </summary>
        /// <param name="rota"></param>
        /// <returns></returns>
        public Colosoft.Business.DeleteResult ApagarRota(Entidades.Rota rota)
        {
            rota.Require("rota").NotNull();

            using (var session = SourceContext.Instance.CreateSession())
            {
                var resultado = rota.Delete(session);
                if (!resultado)
                {
                    return(resultado);
                }

                return(session.Execute(false).ToDeleteResult());
            }
        }
Пример #2
0
        /// <summary>
        /// Valida a atualização da rota.
        /// </summary>
        /// <param name="rota"></param>
        /// <returns></returns>
        IMessageFormattable[] Entidades.IValidadorRota.ValidaAtualizacao(Entidades.Rota rota)
        {
            if (string.IsNullOrWhiteSpace(rota.CodInterno))
            {
                return new IMessageFormattable[] { "Informe um código para a rota.".GetFormatter() }
            }
            ;

            if (string.IsNullOrWhiteSpace(rota.Descricao))
            {
                return new IMessageFormattable[] { "Informe uma descrição para a rota.".GetFormatter() }
            }
            ;

            // Verifica se já foi inserida uma rota com o código interno passado
            var consulta = SourceContext.Instance.CreateQuery()
                           .From <Data.Model.Rota>()
                           .Where("CodInterno=?codInterno")
                           .Add("?codInterno", rota.CodInterno);

            if (rota.ExistsInStorage)
            {
                consulta.WhereClause
                .And("IdRota<>?idRota")
                .Add("?idRota", rota.IdRota);
            }

            if (rota.Situacao == Situacao.Inativo && SourceContext.Instance.CreateQuery()
                .From <Data.Model.RotaCliente>()
                .Where("IdRota=?idRota")
                .Add("?idRota", rota.IdRota)
                .ProcessLazyResult <Entidades.RotaCliente>()
                .Count() > 0)
            {
                return new IMessageFormattable[]
                       {
                           "Não é possível inativar uma rota que possui clientes vinculados.".GetFormatter()
                       }
            }
            ;

            if (consulta.ExistsResult())
            {
                return new IMessageFormattable[]
                       {
                           "O código informado já está sendo usado em outra rota.".GetFormatter()
                       }
            }
            ;

            return(new IMessageFormattable[0]);
        }

        /// <summary>
        /// Valida a existencia da rota.
        /// </summary>
        /// <param name="rota"></param>
        /// <returns></returns>
        IMessageFormattable[] Entidades.IValidadorRota.ValidaExistencia(Entidades.Rota rota)
        {
            var mensagens = new List <string>();

            // Handler para tratar o resultado da consulta de validação
            var tratarResultado = new Func <string, Colosoft.Query.QueryCallBack>(mensagem =>
                                                                                  (sender, query, result) =>
            {
                if (result.Select(f => f.GetInt32(0)).FirstOrDefault() > 0 &&
                    !mensagens.Contains(mensagem))
                {
                    mensagens.Add(mensagem);
                }
            });

            var consulta = SourceContext.Instance.CreateMultiQuery();

            var adicionaConsulta = new Action <Type, string, char>((tipo, nome, genero) =>
            {
                consulta.Add(SourceContext.Instance.CreateQuery()
                             .From(new Colosoft.Query.EntityInfo(tipo.FullName))
                             .Where("IdRota=?id")
                             .Add("?id", rota.IdRota)
                             .Count(),

                             tratarResultado(String.Format(
                                                 "Esta rota não pode ser excluída por possuir {0} relacionad{1}s à mesma.",
                                                 nome, genero)));
            });

            adicionaConsulta(typeof(Data.Model.OrdemCarga), "ordens de carga", 'a');
            adicionaConsulta(typeof(Data.Model.Cte.ComplCte), "conhecimentos de transporte", 'o');
            adicionaConsulta(typeof(Data.Model.RotaCliente), "clientes", 'o');

            consulta.Execute();

            return(mensagens.Select(f => f.GetFormatter()).ToArray());
        }