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