/// <summary> /// Obtém a imagem engenharia do projeto, com as quotas posicionadas e calculadas de acordo com o item projeto. /// </summary> public Imagem[] ObterImagemEngenharia(int idItemProjeto, float percentualImagem) { var itemProjeto = ItemProjetoDAO.Instance.GetElementByPrimaryKey(idItemProjeto); var retorno = new List <Imagem>(); var imgUrl = UtilsProjeto.GetFiguraAssociadaUrl((uint)idItemProjeto, itemProjeto.IdProjetoModelo); byte[] imagem = Utils.GetImageFromRequest(HttpContext.Current, imgUrl); if (imagem.Length == 0) { return(null); } imagem = ManipulacaoImagem.Redimensionar(imagem, 0, 0, percentualImagem); if (retorno.Count > 0 && retorno[retorno.Count - 1].Imagem2 == null) { retorno[retorno.Count - 1].Imagem2 = imagem; } else { Imagem nova = new Imagem(); nova.Chave = (uint)idItemProjeto; nova.Imagem1 = imagem; retorno.Add(nova); } return(retorno.ToArray()); }
public Glass.Api.Projeto.ItemProjeto CalcularMedidas(int idTipoEntrega, Glass.Api.Projeto.ItemProjeto itemProjeto) { try { var pecasProjMod = PecaProjetoModeloDAO.Instance.GetByModelo((uint)itemProjeto.IdProjetoModelo); var pecasMateriaisProjeto = ItemProjetoDAO.Instance.CriarPecasMateriaisProjeto(itemProjeto, pecasProjMod, itemProjeto.Pecas, itemProjeto.Medidas, idTipoEntrega, UserInfo.GetUserInfo.IdCliente.GetValueOrDefault()); var medidasProjetoModelo = MedidaProjetoModeloDAO.Instance.GetByProjetoModelo(null, (uint)itemProjeto.IdProjetoModelo, true); // Carrega a relação dos identificador único da peça associado a peça do modelo var pecasUids = itemProjeto.Pecas.Select(f => new { Uid = f.IdPecaItemProj, IdPecaProjMod = f.IdPecaProjMod }).ToList(); itemProjeto.Pecas.Clear(); itemProjeto.Pecas.AddRange(pecasMateriaisProjeto.PecasItemProjeto .Select(f => new Glass.Api.Projeto.PecaItemProjeto( f, // Recupera o identificador único da peça pecasUids.FirstOrDefault(pecaUid => pecaUid.IdPecaProjMod == f.IdPecaProjMod)?.Uid ?? Guid.NewGuid()))); if (itemProjeto.Pecas.All(f => !f.IdProd.HasValue || f.IdProd.Value == 0)) { throw new Exception("Não foram encontrados vidros compatíveis com a espessura e cor informados."); } itemProjeto.Materiais.Clear(); itemProjeto.Materiais.AddRange(pecasMateriaisProjeto.MateriaisItemProjeto.Select(f => new Glass.Api.Projeto.MaterialItemProjeto(f))); itemProjeto.PosicoesPeca.Clear(); foreach (var p in PosicaoPecaModeloDAO.Instance.GetPosicoes((uint)itemProjeto.IdProjetoModelo)) { p.IdItemProjeto = itemProjeto.IdItemProjeto; p.Valor = UtilsProjeto.CalcExpressao(null, p.Calc, itemProjeto, itemProjeto.Pecas, medidasProjetoModelo, itemProjeto.Medidas, null); itemProjeto.PosicoesPeca.Add(new Projeto.PosicaoPeca(p)); } foreach (var peca in itemProjeto.Pecas) { foreach (var p in PosicaoPecaIndividualDAO.Instance.GetPosicoes(peca.IdPecaProjMod, peca.Item.StrParaInt())) { p.IdPecaItemProj = peca.IdPecaItemProj; p.Valor = UtilsProjeto.CalcExpressao(null, p.Calc, itemProjeto, itemProjeto.Pecas, medidasProjetoModelo, itemProjeto.Medidas, null); peca.PosicoesPeca.Add(new Projeto.PosicaoPecaIndividual(p)); } } return(itemProjeto); } catch (Exception ex) { throw ex; } }
protected override Colosoft.Reports.IReportDocument LoadReport(ref LocalReport report, ref List <ReportParameter> lstParam, HttpRequest PageRequest, System.Collections.Specialized.NameValueCollection Request, object[] outrosParametros, LoginUsuario login, string diretorioLogotipos) { // Verifica qual relatório será chamado switch (Request["rel"]) { case "imagemProjeto": report.ReportPath = NomeArquivoRelatorioImagemProjeto; // Identifica se foi selecionado para imprimir alumínios e ferragens. bool imprAlumFerr = Request["imprAlumFerr"] == "true"; uint idProjeto = !String.IsNullOrEmpty(Request["idProjeto"]) ? Glass.Conversoes.StrParaUint(Request["idProjeto"]) : 0; var projeto = idProjeto > 0 ? ProjetoDAO.Instance.GetElement(idProjeto) : new Data.Model.Projeto(); ItemProjeto[] itemProjeto = ItemProjetoDAO.Instance.GetByString(Request["idItemProjeto"]); List <PecaItemProjeto> lstPeca = new List <PecaItemProjeto>(); List <MaterialItemProjeto> lstMaterial = new List <MaterialItemProjeto>(); List <Imagem> lstImagens = new List <Imagem>(); List <MedidaItemProjeto> lstMedidas = new List <MedidaItemProjeto>(); // Busca o pedido, se houver, relacionado à este projeto projeto.IdPedido = ProjetoDAO.Instance.GetIdPedidoByProjeto(idProjeto); if (projeto.IdPedido == 0) { // Tenta buscar o pedido pelo item projeto. if (itemProjeto[0].IdPedido > 0) { projeto.IdPedido = itemProjeto[0].IdPedido.Value; } else if (itemProjeto[0].IdPedidoEspelho > 0) { projeto.IdPedido = itemProjeto[0].IdPedidoEspelho.Value; } else if (itemProjeto[0].IdOrcamento > 0) { projeto.IdPedido = PedidoDAO.Instance.GetIdPedidoByOrcamento(itemProjeto[0].IdOrcamento.Value); } } if (projeto.IdPedido > 0) { var idCliente = PedidoDAO.Instance.ObtemIdCliente(null, projeto.IdPedido); projeto.NomeCliente = ClienteDAO.Instance.GetNome(idCliente); projeto.Rota = RotaDAO.Instance.ObtemCodRota(idCliente); projeto.NomeFunc = FuncionarioDAO.Instance.GetNome(PedidoDAO.Instance.ObtemIdFunc(null, projeto.IdPedido)); projeto.DataCad = PedidoDAO.Instance.ObtemDataPedido(null, projeto.IdPedido); projeto.TipoEntrega = PedidoDAO.Instance.ObtemTipoEntrega(null, projeto.IdPedido); projeto.Obs = PedidoDAO.Instance.ObtemObs(null, projeto.IdPedido); projeto.ObsLiberacao = PedidoDAO.Instance.ObtemObsLiberacao(projeto.IdPedido); } for (int i = 0; i < itemProjeto.Length; i++) { var pcp = itemProjeto[i].IdPedidoEspelho.HasValue; ProjetoModelo modelo = ProjetoModeloDAO.Instance.GetElementByPrimaryKey(itemProjeto[i].IdProjetoModelo); lstPeca.AddRange(PecaItemProjetoDAO.Instance.GetByItemProjetoRpt(itemProjeto[i].IdItemProjeto, itemProjeto[i].IdProjetoModelo, pcp)); // Caso a imagem da peça tenha sido editada então a impressão não deve exibir se a peça possui arquivo de otimização. for (var x = 0; x < lstPeca.Count; x++) { var pecaPossuiFiguraAssociada = PecaItemProjetoDAO.Instance.PossuiFiguraAssociada(null, lstPeca[x].IdPecaItemProj); var pecaPossuiEdicaoCadProject = lstPeca[x].IdProdPed != null ? lstPeca[x].ImagemEditada && ProdutosPedidoEspelhoDAO.Instance.PossuiEdicaoCadProject((uint)lstPeca[x].IdProdPed, pcp):false; var produtoPossuiImagemEditada = pcp && ProdutosPedidoEspelhoDAO.Instance.PossuiImagemAssociada(null, (uint)lstPeca[x]?.IdProdPed.GetValueOrDefault()); if (lstPeca[x].IdArquivoMesaCorte > 0 && lstPeca[x].TipoArquivoMesaCorte > 0) { if ((produtoPossuiImagemEditada || lstPeca[x].ImagemEditada || pecaPossuiFiguraAssociada) && lstPeca[x].TipoArquivoMesaCorte != (int)TipoArquivoMesaCorte.FMLBasico && !pecaPossuiEdicaoCadProject) { lstPeca[x].IdArquivoMesaCorte = null; lstPeca[x].TipoArquivoMesaCorte = null; } } } int atual = lstMaterial.Count; lstMaterial.AddRange(MaterialItemProjetoDAO.Instance.GetForRptItemProjeto(itemProjeto[i].IdItemProjeto, false)); int numeroMateriais = lstMaterial.Count - atual; // Verifica se os materiais do itemProjeto deverão ser impressos também itemProjeto[i].MostrarMateriais = imprAlumFerr && numeroMateriais > 0; // Pega a imagem do projeto com as medidas já desenhadas e o modelo da imagem if (modelo.IdGrupoModelo != (uint)UtilsProjeto.GrupoModelo.Outros) { itemProjeto[i].ImagemProjeto = Data.Helper.Utils.GetImageFromRequest(UtilsProjeto.GetFiguraAssociadaUrl(itemProjeto[i].IdItemProjeto, modelo)); // Salva a imagem na memória, recupera os bytes e os salva na propriedade ImagemProjetoModelo. // Chamado 50315 - o nome da imagem deve ser recuperado dentro do try para não retornar erro quando o mesmo for null. try { var arquivo = System.IO.Path.Combine(Glass.Data.Helper.Utils.ModelosProjetoPath(Context), modelo.NomeFigura); if (System.IO.File.Exists(arquivo)) { using (var image = new Bitmap(arquivo)) using (var ms = new System.IO.MemoryStream()) { image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); itemProjeto[i].ImagemProjetoModelo = ms.ToArray(); } } } catch { } itemProjeto[i].ImagemProjetoModelo = Data.Helper.Utils.GetImageFromRequest("../../Handlers/LoadImage.ashx?path=" + Data.Helper.Utils.ModelosProjetoPath(Context) + modelo.NomeFigura + "&altura=" + modelo.AlturaFigura + "&largura=" + modelo.LarguraFigura); } // Copia o idPedidoEspelho para o idPedido if (itemProjeto[i].IdPedido == null) { itemProjeto[i].IdPedido = itemProjeto[i].IdPedidoEspelho; } lstImagens.AddRange(ImagemDAO.Instance.GetPecasAlteradas(itemProjeto[i].IdItemProjeto, Glass.Configuracoes.ProjetoConfig.RelatorioImagemProjeto.PercentualTamanhoImagemRelatorio)); lstMedidas.AddRange(MedidaItemProjetoDAO.Instance.GetListByItemProjeto(itemProjeto[i].IdItemProjeto)); } lstParam.Add(new ReportParameter("Pedido_PedCli", projeto.IdPedido > 0 ? PedidoDAO.Instance.ObtemPedCli(null, projeto.IdPedido) : string.Empty)); lstParam.Add(new ReportParameter("FastDelivery", PedidoDAO.Instance.IsFastDelivery(null, projeto.IdPedido).ToString())); lstParam.Add(new ReportParameter("ExibirImagemModelo", (true).ToString())); lstParam.Add(new ReportParameter("CorObs", Glass.Configuracoes.ProjetoConfig.RelatorioImagemProjeto.CorObsNoRelatorio)); lstParam.Add(new ReportParameter("TemEdicaoCadProject", "true")); lstParam.Add(new ReportParameter("ImagensPecasIndividuais", "true")); lstParam.Add(new ReportParameter("AgruparBeneficiamentos", PedidoConfig.RelatorioPedido.AgruparBenefRelatorio.ToString())); report.DataSources.Add(new ReportDataSource("Projeto", new Data.Model.Projeto[] { projeto })); report.DataSources.Add(new ReportDataSource("ItemProjeto", itemProjeto)); report.DataSources.Add(new ReportDataSource("PecaItemProjeto", lstPeca.ToArray())); report.DataSources.Add(new ReportDataSource("MaterialItemProjeto", lstMaterial.ToArray())); report.DataSources.Add(new ReportDataSource("Imagem", lstImagens.ToArray())); report.DataSources.Add(new ReportDataSource("MedidaItemProjeto", lstMedidas.ToArray())); break; case "totaisProjeto": report.ReportPath = Data.Helper.Utils.CaminhoRelatorio("Relatorios/Projeto/rptTotaisProjeto{0}.rdlc"); bool exibirCusto = UserInfo.GetUserInfo.TipoUsuario == (uint)Data.Helper.Utils.TipoFuncionario.Administrador || UserInfo.GetUserInfo.TipoUsuario == (uint)Data.Helper.Utils.TipoFuncionario.Gerente; string titulo = String.Empty; string nomeCliente = String.Empty; string tipoEntrega = String.Empty; float taxaPrazo = 0; uint idProjeto_Totais = Glass.Conversoes.StrParaUint(Request["idProjeto"]); uint idOrcamento_Totais = Glass.Conversoes.StrParaUint(Request["idOrcamento"]); uint idPedido_Totais = Glass.Conversoes.StrParaUint(Request["idPedido"]); uint idPedidoEspelho_Totais = Glass.Conversoes.StrParaUint(Request["idPedidoEspelho"]); if (idProjeto_Totais > 0) { var projeto_Totais = ProjetoDAO.Instance.GetElementByPrimaryKey(idProjeto_Totais); titulo = "Impressão Projeto N.º " + idProjeto_Totais; nomeCliente = projeto_Totais.IdCliente > 0 ? ClienteDAO.Instance.GetNome(projeto_Totais.IdCliente.Value) : projeto_Totais.NomeCliente; tipoEntrega = projeto_Totais.DescrTipoEntrega; taxaPrazo = projeto_Totais.TaxaPrazo; } else if (idOrcamento_Totais > 0) { var orcamento_Totais = OrcamentoDAO.Instance.GetElementByPrimaryKey(idOrcamento_Totais); titulo = "Impressão dos Projetos do Orçamento N.º " + idOrcamento_Totais; nomeCliente = orcamento_Totais.IdCliente > 0 ? orcamento_Totais.IdCliente + " - " + ClienteDAO.Instance.GetNome(orcamento_Totais.IdCliente.Value) : orcamento_Totais.NomeCliente; tipoEntrega = orcamento_Totais.DescrTipoEntrega; taxaPrazo = orcamento_Totais.TaxaPrazo; } else if (idPedido_Totais > 0 || idPedidoEspelho_Totais > 0) { Glass.Data.Model.Pedido pedido_Totais = PedidoDAO.Instance.GetElementByPrimaryKey(idPedido_Totais > 0 ? idPedido_Totais : idPedidoEspelho_Totais); titulo = idPedido_Totais > 0 ? "Impressão dos Projetos do Pedido N.º " + idPedido_Totais : "Impressão dos Projetos da Conferência do Pedido N.º " + idPedidoEspelho_Totais; nomeCliente = pedido_Totais.IdCli + " - " + ClienteDAO.Instance.GetNome(pedido_Totais.IdCli); tipoEntrega = pedido_Totais.DescrTipoEntrega; taxaPrazo = pedido_Totais.TaxaPrazo; } lstParam.Add(new ReportParameter("Titulo", titulo)); lstParam.Add(new ReportParameter("NomeCliente", nomeCliente)); lstParam.Add(new ReportParameter("TipoEntrega", tipoEntrega)); lstParam.Add(new ReportParameter("TaxaPrazo", taxaPrazo.ToString())); lstParam.Add(new ReportParameter("ExibirCusto", exibirCusto.ToString())); lstParam.Add(new ReportParameter("ExibirJuros", "false")); lstParam.Add(new ReportParameter("ExibirLinhaVermelhaSaida", "true")); List <MaterialItemProjeto> lstMaterial_Totais = MaterialItemProjetoDAO.Instance.GetForRptTotaisItens(idProjeto_Totais, idOrcamento_Totais, idPedido_Totais, idPedidoEspelho_Totais); report.DataSources.Add(new ReportDataSource("MaterialItemProjeto", lstMaterial_Totais.ToArray())); break; case "ImpressaoModeloProjeto": report.ReportPath = "Relatorios/Projeto/rptImpressaoModeloProjeto.rdlc"; ProjetoModelo projModelo = ProjetoModeloDAO.Instance.GetByCodigo(Request["projModeloCod"]); if (projModelo.IdGrupoModelo != (uint)UtilsProjeto.GrupoModelo.Outros) { // Salva a imagem na memória, recupera os bytes e os salva na propriedade ImagemProjetoModelo. // Chamado 50315 - o nome da imagem deve ser recuperado dentro do try para não retornar erro quando o mesmo for null. try { var arquivo = System.IO.Path.Combine(Glass.Data.Helper.Utils.ModelosProjetoPath(Context), projModelo.NomeFigura); if (System.IO.File.Exists(arquivo)) { using (var image = new Bitmap(arquivo)) using (var ms = new System.IO.MemoryStream()) { image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); projModelo.ImagemProjetoModelo = ms.ToArray(); } } } catch { } } report.DataSources.Add(new ReportDataSource("ProjetoModelo", new ProjetoModelo[] { projModelo })); PecaProjetoModelo[] pecasModelo = PecaProjetoModeloDAO.Instance.GetByModelo(projModelo.IdProjetoModelo).ToArray(); report.DataSources.Add(new ReportDataSource("PecaProjetoModelo", pecasModelo)); MaterialProjetoModelo[] materialModelo = MaterialProjetoModeloDAO.Instance.GetByProjetoModelo(projModelo.IdProjetoModelo, null).ToArray(); report.DataSources.Add(new ReportDataSource("MaterialProjetoModelo", materialModelo)); MedidaProjetoModelo[] medidaModelo = MedidaProjetoModeloDAO.Instance.GetByProjetoModelo(projModelo.IdProjetoModelo, false).ToArray(); report.DataSources.Add(new ReportDataSource("MedidaProjetoModelo", medidaModelo)); Imagem[] imagensPecasModelo = ImagemDAO.Instance.GetPecasModelo(projModelo.IdProjetoModelo); report.DataSources.Add(new ReportDataSource("Imagem", imagensPecasModelo)); break; case "LstModeloProjeto": report.ReportPath = "Relatorios/Projeto/rptLstModeloProjeto.rdlc"; Imagem[] imagensProjModelo = ImagemDAO.Instance.GetProjetosModelo(Request["cod"], Request["desc"], Glass.Conversoes.StrParaUint(Request["grupo"]), Request["situacao"].StrParaInt()); report.DataSources.Add(new ReportDataSource("Imagem", imagensProjModelo)); break; } // Atribui parâmetros ao relatório lstParam.Add(new ReportParameter("Logotipo", Logotipo.GetReportLogo(PageRequest))); lstParam.Add(new ReportParameter("TextoRodape", Geral.TextoRodapeRelatorio(login.Nome))); lstParam.Add(new ReportParameter("CorRodape", "DimGray")); return(null); }
protected void btnAplicar_Click(object sender, EventArgs e) { try { for (int i = 0; i < grdPecas.Rows.Count; i++) { Table tblImagens = (Table)grdPecas.Rows[i].FindControl("tblImagens"); for (int j = 0; j < tblImagens.Rows.Count; j++) { int item = Glass.Conversoes.StrParaInt(tblImagens.Rows[j].Cells[0].Attributes["item"]); FileUpload f = (FileUpload)tblImagens.Rows[j].FindControl("flu" + j); if (f == null || !f.HasFile) { continue; } uint idPecaItemProj = Glass.Conversoes.StrParaUint(tblImagens.Rows[j].Cells[0].Attributes["idPecaItemProj"]); // Garante que a imagem pode ser alterada na peça if (idPecaItemProj > 0 && !UtilsProjeto.PodeAlterarImagemPeca(PecaItemProjetoDAO.Instance.GetElementExt(null, idPecaItemProj, true), item, j + 1, false)) { continue; } string extensao = f.FileName.Substring(f.FileName.LastIndexOf('.')); if (!Arquivos.IsImagem(extensao)) { throw new Exception("Apenas imagens podem ser selecionadas."); } HiddenField h = (HiddenField)grdPecas.Rows[i].FindControl("hdfIdProdPed"); var idPedido = Request["idPedido"].StrParaUint(); var idProdPed = h.Value.StrParaUint(); if (Request["tipo"] == "pedido" && !PedidoEspelhoDAO.Instance.ExisteEspelho(idPedido) && (ProdutosPedidoDAO.Instance.TemProdutoLamComposicao(idPedido) || Request["pecaAvulsa"] == "True")) { var urlImagem = ProdutosPedidoDAO.Instance.ObterUrlImagemSalvar(idProdPed); ManipulacaoImagem.SalvarImagem(urlImagem, f.FileBytes); // Cria Log de alteração da Imagem do Produto Pedido LogAlteracaoDAO.Instance.Insert(new LogAlteracao { Tabela = (int)LogAlteracao.TabelaAlteracao.ImagemProdPed, IdRegistroAlt = (int)idProdPed, Campo = "Imagem Produto Pedido", ValorAtual = f.FileName, DataAlt = DateTime.Now, IdFuncAlt = UserInfo.GetUserInfo.CodUser, Referencia = "Imagem do Produto Pedido " + idProdPed, NumEvento = LogAlteracaoDAO.Instance.GetNumEvento(null, LogAlteracao.TabelaAlteracao.ImagemProdPed, (int)idProdPed) }); } if (Request["tipo"] == "pcp") { ProdutosPedidoEspelho ppe = ProdutosPedidoEspelhoDAO.Instance.GetElementByPrimaryKey(Glass.Conversoes.StrParaUint(h.Value)); if (ppe != null) { var nomeImagem = string.Empty; if (item > 0) { ppe.Item = item; nomeImagem = ppe.ImagemUrlSalvarItem; } else { nomeImagem = ppe.ImagemUrlSalvar; } ManipulacaoImagem.SalvarImagem(Server.MapPath(nomeImagem), f.FileBytes); // Cria Log de alteração da Imagem do Produto Pedido Espelho LogAlteracaoDAO.Instance.Insert(new LogAlteracao { Tabela = (int)LogAlteracao.TabelaAlteracao.ImagemProdPedEsp, IdRegistroAlt = (int)ppe.IdProdPed, Campo = "Imagem Produto Pedido Espelho", ValorAtual = f.FileName, DataAlt = DateTime.Now, IdFuncAlt = UserInfo.GetUserInfo.CodUser, Referencia = "Imagem do Produto Pedido Espelho " + ppe.IdProdPed, NumEvento = LogAlteracaoDAO.Instance.GetNumEvento(null, LogAlteracao.TabelaAlteracao.ImagemProdPedEsp, (int)ppe.IdProdPed) }); if (idPecaItemProj > 0) { LogAlteracaoDAO.Instance.LogImagemProducao(idPecaItemProj, item.ToString(), "Nova imagem atribuída à peça"); } } } } } Glass.MensagemAlerta.ShowMsg("Imagens alteradas.", Page); Response.Redirect(Request.Url.ToString()); } catch (Exception ex) { Glass.MensagemAlerta.ErrorMsg("Falha ao salvar imagem.", ex, Page); } }
protected void tblImagens_Load(object sender, EventArgs e) { try { Table tblImagens = (Table)sender; GridViewRow row = tblImagens.Parent.Parent as GridViewRow; HiddenField h = (HiddenField)row.FindControl("hdfIdProdPed"); var idPedido = Request["idPedido"].StrParaUint(); if (Request["tipo"] == "pedido" && !PedidoEspelhoDAO.Instance.ExisteEspelho(idPedido) && (ProdutosPedidoDAO.Instance.TemProdutoLamComposicao(idPedido) || Request["pecaAvulsa"] == "True")) { var pp = !IsPostBack ? row.DataItem as ProdutosPedido : ProdutosPedidoDAO.Instance.GetElement(null, h.Value.StrParaUint(), false, true, false); CriaLinhaTabela(tblImagens, true, "", null, null, pp, string.Empty); return; } ProdutosPedidoEspelho ppe = !IsPostBack ? row.DataItem as ProdutosPedidoEspelho : ProdutosPedidoEspelhoDAO.Instance.GetElement(Glass.Conversoes.StrParaUint(h.Value), true); PecaItemProjeto peca = null; if (ppe.IdMaterItemProj > 0) { uint?idPecaItemProj = MaterialItemProjetoDAO.Instance.ObtemIdPecaItemProj(null, ppe.IdMaterItemProj.Value); if (idPecaItemProj.GetValueOrDefault() == 0) { return; } peca = PecaItemProjetoDAO.Instance.GetElementExt(null, idPecaItemProj.Value, true); } string msgErro = "Item possui arquivo de otimização (mesa de<br/ >corte) gerado. Não é possível alterá-lo."; // Mostra imagem apenas se for instalação if (peca != null && peca.Tipo == 1) { // Controla o número da etiqueta de acordo com a quantidade (1/3) int itemEtiqueta = 1; // Para cada item desta peça. Ex.: 1 e 2 ou 3 e 4 foreach (string item in UtilsProjeto.GetItensFromPeca(peca.Item)) { ppe.Item = Glass.Conversoes.StrParaInt(item); bool permitirAlterarImagem = UtilsProjeto.PodeAlterarImagemPeca(peca, ppe.Item, itemEtiqueta++, false, ref msgErro); if (permitirAlterarImagem && Request["tipo"] != "pcp") { permitirAlterarImagem = false; msgErro = "Alteração de imagem apenas no PCP"; } CriaLinhaTabela(tblImagens, permitirAlterarImagem, item, peca, ppe, null, msgErro); } } else if (peca == null) { string result = ppe.EtiquetasLegenda; msgErro = String.IsNullOrEmpty(ppe.EtiquetasLegenda) ? String.Empty : msgErro; // Verifica se é permitido alterar imagem da peça var situacaoPedidoEspelho = PedidoEspelhoDAO.Instance.ObtemSituacao(ppe.IdPedido); var permitirAlterarImagem = situacaoPedidoEspelho == PedidoEspelho.SituacaoPedido.Finalizado || Config.PossuiPermissao(Config.FuncaoMenuPCP.AlterarImagemPecaAposImpressao); if (permitirAlterarImagem) { string[] itens = result != null?result.ToUpper().Replace(" E ", ",").Split(',') : null; itens = itens.Select(f => f.Trim()).ToArray(); permitirAlterarImagem = itens != null && itens.Length > 0 && !string.IsNullOrEmpty(itens[0]); // Recupera o setor de marcação Setor setor = SetorDAO.Instance.ObterSetorPorNome(null, "Marcação"); // Se for permitido alterar imagem da peça, verifica se o item não tem arquivo sag e se não passou pelo setor de marcação if (setor != null && setor.IdSetor > 0 && permitirAlterarImagem && itens != null && itens.Length > 0) { foreach (string etiq in itens) { permitirAlterarImagem = permitirAlterarImagem && !EtiquetaArquivoOtimizacaoDAO.Instance.TemArquivoSAG(etiq) && !LeituraProducaoDAO.Instance.PassouSetor(null, etiq, (uint)setor.IdSetor); } } } else if (PedidoDAO.Instance.IsMaoDeObra(null, ppe.IdPedido)) { permitirAlterarImagem = true; } else { msgErro = String.IsNullOrEmpty(result) ? "Apenas vidros que serão produzidos<br/ >podem ter imagens anexadas." : "Etiqueta já impressa. Não é<br />possível alterar a imagem"; } CriaLinhaTabela(tblImagens, permitirAlterarImagem, "", null, ppe, null, msgErro); } } catch (Exception ex) { MensagemAlerta.ErrorMsg("Falha ao exibir imagens.", ex, Page); var urlErro = Request.Url.ToString() == null || Request.Url.ToString() == "" ? "Sel Imagem Peça" : Request.Url.ToString(); ErroDAO.Instance.InserirFromException(urlErro, ex); } }
/// <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)); }
/// <summary> /// Retorna os itens de uma peça pelo seu produto pedido espelho. /// </summary> /// <param name="idProdPed"></param> /// <returns></returns> public string[] GetItensByProdPedEsp(uint idProdPedEsp) { PecaItemProjeto peca = GetByProdPedEsp(idProdPedEsp); return(peca != null?UtilsProjeto.GetItensFromPeca(peca.Item) : new string[0]); }
public void Inserir(GDASession sessao, uint idProdNf, string idsItemProjeto) { foreach (string id in idsItemProjeto.Split(',')) { ProdutoNfItemProjeto item = new ProdutoNfItemProjeto { IdProdNf = idProdNf, IdItemProjeto = Glass.Conversoes.StrParaUint(id) }; #region Gera o novo item de projeto se for "apenas vidros" if (ItemProjetoDAO.Instance.ApenasVidros(item.IdItemProjeto) && FiscalConfig.NotaFiscalConfig.UsarProdutoCestaSeApenasVidros) { ItemProjeto ip = ItemProjetoDAO.Instance.GetElementByPrimaryKey(sessao, item.IdItemProjeto); ProjetoModelo pm = ProjetoModeloDAO.Instance.GetElementByPrimaryKey(sessao, ip.IdProjetoModelo); uint?idCliente = ip.IdCliente; int? tipoEntrega = ip.TipoEntrega; uint?idObra = ip.IdPedido > 0 ? PedidoDAO.Instance.GetIdObra(null, ip.IdPedido.Value) : ip.IdPedidoEspelho > 0 ? PedidoDAO.Instance.GetIdObra(null, ip.IdPedidoEspelho.Value) : null; ip.IdOrcamento = null; ip.IdPedido = null; ip.IdPedidoEspelho = null; ip.IdProjeto = null; ip.ApenasVidros = false; ip.IdCorAluminio = (uint)CorAluminioDAO.Instance.GetAll().FirstOrDefault().IdCorAluminio; ip.IdCorFerragem = (uint)CorFerragemDAO.Instance.GetAll().FirstOrDefault().IdCorFerragem; List <PecaItemProjeto> pecasItemProjeto = PecaItemProjetoDAO.Instance.GetByItemProjeto(item.IdItemProjeto, ip.IdProjetoModelo); // Corrige projetos de medida exata, calculando área do vão // Segundo Sidinei, usar altura da peça item "1" e largura somada de todas // as outras peças bool medidaExata = ip.MedidaExata; var medidas = ((List <MedidaItemProjeto>)MedidaItemProjetoDAO.Instance.GetListByItemProjeto(item.IdItemProjeto)).ToArray(); if (medidaExata) { ip.MedidaExata = false; int altura = 0, largura = 0; if (pecasItemProjeto.Count > 0) { PecaItemProjeto p = pecasItemProjeto.Find(x => { string[] itens = UtilsProjeto.GetItensFromPeca(x.Item); return(Array.Exists(itens, y => y == "1")); }); altura = p != null ? p.Altura : pecasItemProjeto[0].Altura; pecasItemProjeto.ForEach(x => largura += x.Largura); } ip.M2Vao = Glass.Global.CalculosFluxo.ArredondaM2(largura, altura, ip.Qtde, 0, false); #region Corrige as medidas do projeto var idLarguraVao = 2; var idAlturaVao = 3; if (Array.FindIndex(medidas, x => x.IdMedidaProjeto == idLarguraVao) == -1) { idLarguraVao = (int)MedidaProjetoDAO.Instance.FindByDescricao(0, "larg vão").GetValueOrDefault(); } if (Array.FindIndex(medidas, x => x.IdMedidaProjeto == idAlturaVao) == -1) { idAlturaVao = (int)MedidaProjetoDAO.Instance.FindByDescricao(0, "alt vão").GetValueOrDefault(); } // Qtde int index = Array.FindIndex(medidas, x => x.IdMedidaProjeto == 1); if (index > -1) { medidas[index].Valor = ip.Qtde; } // Largura index = Array.FindIndex(medidas, x => x.IdMedidaProjeto == idLarguraVao); if (index > -1) { medidas[index].Valor = largura; } // Altura index = Array.FindIndex(medidas, x => x.IdMedidaProjeto == idAlturaVao); if (index > -1) { medidas[index].Valor = altura; } #endregion } ip.IdItemProjeto = ItemProjetoDAO.Instance.Insert(sessao, ip); foreach (MedidaItemProjeto m in medidas) { MedidaItemProjetoDAO.Instance.InsereMedida(sessao, ip.IdItemProjeto, m.IdMedidaProjeto, m.Valor); } List <PecaProjetoModelo> pecasModelo = PecaProjetoModeloDAO.Instance.GetByModelo(pm.IdProjetoModelo); //Preenche a altura e largura da peça para que o sistema crie corretamente o //material item projeto para dar baixa nas peças de cesta foreach (var pecas in pecasModelo) { if (pecas.Altura == 0 || pecas.Largura == 0) { pecas.Altura = 1; pecas.Largura = 1; } } foreach (PecaItemProjeto p in pecasItemProjeto) { pecasModelo.Find(x => x.IdPecaProjMod == p.IdPecaProjMod).IdProd = p.IdProd.GetValueOrDefault(); pecasModelo.Find(x => x.IdPecaProjMod == p.IdPecaProjMod).Qtde = p.Qtde; p.Beneficiamentos = p.Beneficiamentos; p.IdPecaItemProj = 0; p.IdItemProjeto = ip.IdItemProjeto; // Utiliza apenas peças com qtd maior que zero if (p.Qtde > 0) { PecaItemProjetoDAO.Instance.Insert(sessao, p); } } // Calcula os materiais do projeto, muda para medida exata para que a altura e largura dos materiais tenham // valor, caso contrário apenas as folgas serão salvas nos campos altura e largura ip.MedidaExata = true; MaterialItemProjetoDAO.Instance.InserePecasVidro(sessao, idObra, idCliente, tipoEntrega, ip, pm, pecasModelo.Where(f => f.Qtde > 0).ToList(), true); ip.MedidaExata = false; foreach (MaterialItemProjeto m in ItemProjetoDAO.Instance.CalculaMateriais(sessao, ip, idCliente, tipoEntrega, true)) { MaterialItemProjetoDAO.Instance.InsertFromNovoItemProjeto(sessao, m); } item.IdItemProjeto = ip.IdItemProjeto; } #endregion Insert(sessao, item); } }
public Imagem[] GetPecasAlteradas(GDASession sessao, uint idItemProjeto, float percentualImagem) { ItemProjeto itemProj = ItemProjetoDAO.Instance.GetElementByPrimaryKey(sessao, idItemProjeto); PecaItemProjeto[] pecas = PecaItemProjetoDAO.Instance.GetByItemProjetoRpt(sessao, idItemProjeto, itemProj.IdProjetoModelo).ToArray(); List <Imagem> retorno = new List <Imagem>(); foreach (PecaItemProjeto p in pecas) { if (p.Tipo != 1) { continue; } ProdutosPedidoEspelho ppe = p.IdProdPed.GetValueOrDefault() == 0 ? null : ProdutosPedidoEspelhoDAO.Instance.GetForImagemPeca(sessao, p.IdProdPed.Value); foreach (int item in Array.ConvertAll(UtilsProjeto.GetItensFromPeca(p.Item), x => Glass.Conversoes.StrParaInt(x))) { //Se o item da peça for 99(geração dinâmica e não houver etiqueta, não gera a imagem. if ((item == 90 || item == 91 || item == 92 || item == 93 || item == 94 || item == 95 || item == 96 || item == 97 || item == 98 || item == 99) && string.IsNullOrEmpty(p.Etiquetas)) { continue; } if (item == 90 || item == 91 || item == 92 || item == 93 || item == 94 || item == 95 || item == 96 || item == 97 || item == 98 || item == 99) { string[] etiquetas = p.Etiquetas.Split(','); foreach (string etq in etiquetas) { string imgUrl = UtilsProjeto.GetFiguraAssociadaUrl(sessao, idItemProjeto, itemProj.IdProjetoModelo, p.IdPecaItemProj, item); imgUrl += "&numEtiqueta=" + etq; byte[] imagem = Utils.GetImageFromRequest(HttpContext.Current, imgUrl); if (imagem.Length == 0) { continue; } imagem = ManipulacaoImagem.Redimensionar(imagem, 0, 0, percentualImagem); if (retorno.Count > 0 && retorno[retorno.Count - 1].Imagem2 == null) { retorno[retorno.Count - 1].Imagem2 = imagem; } else { Imagem nova = new Imagem(); nova.Chave = idItemProjeto; nova.Imagem1 = imagem; retorno.Add(nova); } } } else { string urlImagem = null; if (ppe != null) { ppe.Item = item; urlImagem = ppe.ImagemUrl; } else if (itemProj.IdPedido > 0) { MaterialItemProjeto mip = MaterialItemProjetoDAO.Instance.GetMaterialByPeca(sessao, p.IdPecaItemProj); if (mip != null) { // Se estiver imprimindo projeto de pedido que está no comercial, // busca a imagem que pode ter sido editada do comercial urlImagem = Utils.GetPecaComercialVirtualPath + ProdutosPedidoDAO.Instance.GetIdProdPedByMaterItemProj(sessao, itemProj.IdPedido.Value, mip.IdMaterItemProj).ToString().PadLeft(10, '0') + "_" + item + ".jpg"; if (!File.Exists(HttpContext.Current.Server.MapPath(urlImagem))) { urlImagem = null; } } } if (urlImagem == null) { urlImagem = UtilsProjeto.GetFiguraAssociadaUrl(sessao, idItemProjeto, itemProj.IdProjetoModelo, p.IdPecaItemProj, item); } byte[] imagem = Utils.GetImageFromRequest(HttpContext.Current, urlImagem); if (imagem.Length == 0) { continue; } imagem = ManipulacaoImagem.Redimensionar(imagem, 0, 0, percentualImagem); if (retorno.Count > 0 && retorno[retorno.Count - 1].Imagem2 == null) { retorno[retorno.Count - 1].Imagem2 = imagem; } else { Imagem nova = new Imagem(); nova.Chave = idItemProjeto; nova.Imagem1 = imagem; retorno.Add(nova); } } } } return(retorno.ToArray()); }