/// <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()); } }
/// <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()); }