예제 #1
0
        /// <summary>
        /// Cria
        /// </summary>
        public List <IPecaItemProjeto> CriarPelaPecaProjetoModelo(GDASession sessao, IItemProjeto itemProjeto, List <PecaProjetoModelo> pecasProjetoModelo,
                                                                  IEnumerable <IMedidaItemProjeto> medidasItemProjeto, List <MedidaProjetoModelo> medidasProjetoModelo)
        {
            var pecasItemProjeto = new List <IPecaItemProjeto>();

            if (itemProjeto.MedidaExata)
            {
                foreach (var pecaProjetoModelo in pecasProjetoModelo)
                {
                    var peca = itemProjeto.Pecas.FirstOrDefault(f => f.IdPecaProjMod == pecaProjetoModelo.IdPecaProjMod);

                    if (!(peca is PecaItemProjeto))
                    {
                        var pecaItemProjeto = new PecaItemProjeto();
                        pecaItemProjeto.IdPecaProjMod   = peca.IdPecaProjMod;
                        pecaItemProjeto.Item            = peca.Item;
                        pecaItemProjeto.IdProd          = pecaProjetoModelo.IdProd;
                        pecaItemProjeto.Altura          = peca.Altura;
                        pecaItemProjeto.Largura         = peca.Largura;
                        pecaItemProjeto.Qtde            = peca.Qtde;
                        pecaItemProjeto.Tipo            = peca.Tipo;
                        pecaItemProjeto.Redondo         = peca.Redondo;
                        pecaItemProjeto.Beneficiamentos = pecaProjetoModelo.Beneficiamentos.ToPecasItemProjeto();

                        pecasItemProjeto.Add(pecaItemProjeto);
                    }
                }
            }
            else
            {
                foreach (var pecaProjetoModelo in pecasProjetoModelo)
                {
                    // Verifica se há fórmula para calcular a qtd de peças
                    var qtdPeca = !string.IsNullOrEmpty(pecaProjetoModelo.CalculoQtde) && !itemProjeto.MedidaExata ?
                                  (int)UtilsProjeto.CalcExpressao(sessao, pecaProjetoModelo.CalculoQtde, itemProjeto, null, medidasProjetoModelo, medidasItemProjeto, null) : pecaProjetoModelo.Qtde;

                    /* Chamado 22322. */
                    if (!PCPConfig.CriarClone && !itemProjeto.MedidaExata && !string.IsNullOrEmpty(pecaProjetoModelo.CalculoQtde))
                    {
                        qtdPeca = pecaProjetoModelo.Qtde;
                    }

                    if (qtdPeca == 0)
                    {
                        continue;
                    }

                    var pecaItemProjeto = new PecaItemProjeto();
                    pecaItemProjeto.IdPecaProjMod   = pecaProjetoModelo.IdPecaProjMod;
                    pecaItemProjeto.Item            = pecaProjetoModelo.Item;
                    pecaItemProjeto.IdProd          = pecaProjetoModelo.IdProd;
                    pecaItemProjeto.Altura          = pecaProjetoModelo.Altura;
                    pecaItemProjeto.Largura         = pecaProjetoModelo.Largura;
                    pecaItemProjeto.Qtde            = qtdPeca;
                    pecaItemProjeto.Tipo            = pecaProjetoModelo.Tipo;
                    pecaItemProjeto.Redondo         = pecaProjetoModelo.Redondo;
                    pecaItemProjeto.Item            = pecaProjetoModelo.Item;
                    pecaItemProjeto.Beneficiamentos = pecaProjetoModelo.Beneficiamentos.ToPecasItemProjeto();

                    pecasItemProjeto.Add(pecaItemProjeto);
                }
            }

            itemProjeto.M2Vao = UtilsProjeto.CalculaAreaVao(sessao, pecasItemProjeto, medidasItemProjeto, itemProjeto.MedidaExata);

            return(pecasItemProjeto);
        }
예제 #2
0
        /// <summary>
        /// Insere peças do item_projeto passado a partir da lista de peças passada, guardando o id gerado na
        /// lista lstPecaModelo
        /// </summary>
        public void InsertFromPecaModelo(GDASession sessao, ItemProjeto itemProj, ref List <PecaProjetoModelo> lstPecaModelo, bool eCommerce)
        {
            bool inserirPecas = objPersistence.ExecuteSqlQueryCount(sessao, "Select Count(*) From peca_item_projeto Where idItemProjeto=" + itemProj.IdItemProjeto) == 0;

            foreach (PecaProjetoModelo ppm in lstPecaModelo.OrderBy(f => f.Tipo).ThenBy(f => f.IdPecaProjMod).ToList())
            {
                /* Chamado 48920. */
                if (eCommerce && ppm.IdPecaItemProj > 0 && ppm.Tipo != ObtemTipo(sessao, ppm.IdPecaItemProj))
                {
                    throw new Exception("Não é possível alterar o tipo de peça do projeto pelo E-Commerce.");
                }

                // Verifica se há fórmula para calcular a qtd de peças
                var qtdPeca = !string.IsNullOrEmpty(ppm.CalculoQtde) && !itemProj.MedidaExata ? (int)UtilsProjeto.CalcExpressao(sessao, ppm.CalculoQtde, itemProj) : ppm.Qtde;

                /* Chamado 22322. */
                if (!PCPConfig.CriarClone &&
                    !itemProj.MedidaExata &&
                    !string.IsNullOrEmpty(ppm.CalculoQtde) &&
                    itemProj.IdPedidoEspelho.GetValueOrDefault() > 0)
                {
                    qtdPeca = ppm.Qtde;
                }

                if (qtdPeca == 0)
                {
                    // A quantidade de peças deve ser zerada, pois pode ser que o usuário esteja tentando zerar a peça
                    // mas como entra neste continue não estava zerando
                    if (!inserirPecas)
                    {
                        objPersistence.ExecuteCommand(sessao, "Update peca_item_projeto set qtde=0 where idPecaItemProj=" + ppm.IdPecaItemProj);
                    }

                    continue;
                }

                if (inserirPecas || (ppm.IdPecaItemProj == 0 && ppm.IdProd > 0 && ppm.Qtde > 0))
                {
                    PecaItemProjeto pip = new PecaItemProjeto();
                    pip.IdItemProjeto   = itemProj.IdItemProjeto;
                    pip.IdProd          = (uint)ppm.IdProd;
                    pip.Altura          = ppm.Altura;
                    pip.Largura         = ppm.Largura;
                    pip.Qtde            = qtdPeca;
                    pip.Tipo            = ppm.Tipo;
                    pip.Redondo         = ppm.Redondo;
                    pip.Beneficiamentos = ppm.Beneficiamentos.ToPecasItemProjeto();

                    ppm.IdPecaItemProj = Insert(sessao, pip);
                }
                else
                {
                    objPersistence.ExecuteCommand(sessao, "Update peca_item_projeto set idprod=" + ppm.IdProd + ", altura=" + ppm.Altura +
                                                  ", largura=" + ppm.Largura + ", qtde=" + qtdPeca + ", tipo=" + ppm.Tipo + " where idPecaItemProj=" + ppm.IdPecaItemProj);
                }
            }

            // Atualiza este item_projeto com a qtd e m² Vão
            ItemProjetoDAO.Instance.AtualizaQtdM2(sessao, itemProj.IdItemProjeto, itemProj.Qtde, UtilsProjeto.CalculaAreaVao(sessao, itemProj.IdItemProjeto, itemProj.MedidaExata));
        }