public QuotaPesoVm SalvarAgendamentoDeCarregamento(AgendamentoDeCarregamentoCadastroVm agendamentoDeCarregamentoCadastroVm)
        {
            try
            {
                _unitOfWork.BeginTransaction();
                Quota quota = _quotas.BuscaPorId(agendamentoDeCarregamentoCadastroVm.IdQuota);
                quota.InformarAgendamento(agendamentoDeCarregamentoCadastroVm);

                _quotas.Save(quota);
                _unitOfWork.Commit();
                return(_builderQuotaPeso.BuildSingle(quota));
            }
            catch (Exception)
            {
                _unitOfWork.RollBack();
                throw;
            }
        }
Beispiel #2
0
        public void Salvar(DateTime data, IList <QuotaSalvarVm> quotasSalvarVm)
        {
            try
            {
                _unitOfWork.BeginTransaction();
                //consulta as quotas que estão salvas na data
                IList <Quota> quotasSalvas = _quotas.FiltraPorData(data).List();

                #region Remover Quotas
                IList <Quota> quotasParaRemover = quotasSalvas
                                                  .Where(qs => quotasSalvarVm.All(qc =>
                                                                                  qc.Data != qs.Data ||
                                                                                  qc.CodigoTerminal != qs.CodigoTerminal ||
                                                                                  qc.CodigoMaterial != (int)qs.Material ||
                                                                                  qc.CodigoFornecedor != qs.Fornecedor.Codigo)).ToList();

                foreach (var quota in quotasParaRemover)
                {
                    if (quota.Agendamentos.Any())
                    {
                        throw new ExcluirQuotaComAgendamentoException(quota.Fornecedor.Nome);
                    }
                    _quotas.Delete(quota);
                }
                #endregion

                #region Atualizar Quotas
                IList <Quota> quotasParaAtualizar = quotasSalvas
                                                    .Where(qs => quotasSalvarVm.Any(qc =>
                                                                                    qc.Data == qs.Data &&
                                                                                    qc.CodigoTerminal == qs.CodigoTerminal &&
                                                                                    qc.CodigoMaterial == (int)qs.Material &&
                                                                                    qc.CodigoFornecedor == qs.Fornecedor.Codigo)).ToList();

                foreach (var quota in quotasParaAtualizar)
                {
                    //obtem view model corresponde a entidade que quero atualizar
                    QuotaSalvarVm quotaSalvarVm = quotasSalvarVm.First(qa =>
                                                                       qa.Data == quota.Data &&
                                                                       qa.CodigoTerminal == quota.CodigoTerminal &&
                                                                       qa.CodigoMaterial == (int)quota.Material &&
                                                                       qa.CodigoFornecedor == quota.Fornecedor.Codigo);

                    //único campo que pode ser atualizado é o campo de peso

                    quota.AlterarPeso(quotaSalvarVm.Peso);

                    _quotas.Save(quota);
                }
                #endregion

                #region Adicionar Quotas
                IList <QuotaSalvarVm> quotasParaAdicionar = quotasSalvarVm.Where(qc =>
                                                                                 quotasSalvas.All(qs =>
                                                                                                  qc.Data != qs.Data ||
                                                                                                  qc.CodigoTerminal != qs.CodigoTerminal ||
                                                                                                  qc.CodigoMaterial != (int)qs.Material ||
                                                                                                  qc.CodigoFornecedor != qs.Fornecedor.Codigo)).ToList();


                foreach (var quotaSalvarVm in quotasParaAdicionar)
                {
                    string[]           codigoDosNovosFornecedores = quotasParaAdicionar.Select(x => x.CodigoFornecedor).Distinct().ToArray();
                    IList <Fornecedor> fornecedores = _fornecedores.BuscaListaPorCodigo(codigoDosNovosFornecedores).List();

                    var materialDeCarga =
                        (Enumeradores.MaterialDeCarga)
                        Enum.Parse(typeof(Enumeradores.MaterialDeCarga), Convert.ToString(quotaSalvarVm.CodigoMaterial));
                    Fornecedor fornecedor = fornecedores.First(x => x.Codigo == quotaSalvarVm.CodigoFornecedor);
                    var        quota      = new Quota(materialDeCarga, fornecedor, quotaSalvarVm.CodigoTerminal,
                                                      quotaSalvarVm.Data, quotaSalvarVm.Peso);

                    _quotas.Save(quota);
                }
                #endregion

                _unitOfWork.Commit();
            }
            catch (Exception)
            {
                _unitOfWork.RollBack();
                throw;
            }
        }