{"id":17341,"date":"2021-05-04T10:01:13","date_gmt":"2021-05-04T09:01:13","guid":{"rendered":"https:\/\/developers.primaverabss.com\/en\/questions\/criacao-de-oportunidade-de-venda\/"},"modified":"2021-05-04T10:01:14","modified_gmt":"2021-05-04T09:01:14","slug":"criacao-de-oportunidade-de-venda","status":"publish","type":"cma_thread","link":"https:\/\/developers.ila.cegid.com\/en\/forum\/criacao-de-oportunidade-de-venda\/","title":{"rendered":"Cria\u00e7\u00e3o de Oportunidade de venda"},"content":{"rendered":"<p>Bom dia, tenho uma fun\u00e7\u00e3o que gera uma Oportunidade de venda e uma proposta sobre essa OPV<\/p>\n<p>O codigo gera a proposta e a oportunidade de venda corretamente, no entanto, na tabela cabecoportunidade de venda, os totais s\u00e3o est\u00e3o a ser atualizados:<\/p>\n<p>Campos esses:<\/p>\n<p>MargemOV<\/p>\n<p>MargempercOV<\/p>\n<p>ValorTotalOV<\/p>\n<p>&nbsp;<\/p>\n<p>O que \u00e9 que est\u00e1 a faltar?<\/p>\n<p>Alguem me pode ajudar?<\/p>\n<p>Obrigado<\/p>\n<p>Segue abaixo o codigo<\/p>\n<p>try<br \/>\n{<br \/>\nCrmBEOportunidadeVenda opv;<br \/>\nCrmBEPropostaOPV sProp;<br \/>\nCrmBELinhaPropostaOPV linProp;<br \/>\nStdBELista stdLinProp;<br \/>\nint numProp;<br \/>\nBoolean temPropostasSelecionadas;<br \/>\nstring optOrigem;<\/p>\n<p>temPropostasSelecionadas = false;<br \/>\nif (dgvDuplicaPropostas.SelectedRows.Count==0)<br \/>\n{<br \/>\nthis.ContextService.PSO.Dialogos.MostraAviso(&#8220;Impossivel duplicar OPV.&#8221; +<br \/>\n&#8221; Tem de selecionar pelo menos um numero de proposta.&#8221;);<br \/>\nreturn;<br \/>\n}<\/p>\n<p>if (this.ContextService.BSO.Base.Clientes.Existe(txtCliente.Text)==false)<br \/>\n{<br \/>\nthis.ContextService.PSO.Dialogos.MostraAviso(&#8220;Impossivel duplicar OPV.&#8221; +<br \/>\n&#8221; Tem de selecionar pelo menos cliente v\u00e1lido.&#8221;);<br \/>\nreturn;<br \/>\n}<br \/>\noptOrigem = this.ContextService.OportunidadeVenda.Oportunidade;<br \/>\nopv = new CrmBEOportunidadeVenda();<br \/>\nopv.Oportunidade = DaProximoNumOPV();<br \/>\nopv.CicloVenda = this.ContextService.BSO.CRM.OportunidadesVenda.DaValorAtributo(optOrigem, &#8220;ciclovenda&#8221;);<br \/>\nopv.Descricao = this.ContextService.BSO.CRM.OportunidadesVenda.DaValorAtributo(optOrigem, &#8220;descricao&#8221;);<br \/>\nopv.TipoEntidade = &#8220;C&#8221;;<br \/>\nopv.Entidade = txtCliente.Text;<br \/>\nopv.Moeda = this.ContextService.BSO.Contexto.MoedaBase;<br \/>\nopv.Vendedor = this.ContextService.BSO.CRM.OportunidadesVenda.DaValorAtributo(optOrigem,&#8221;vendedor&#8221;);<br \/>\nopv.DataCriacao = DateTime.Now;<br \/>\nopv.DataExpiracao= new DateTime(DateTime.Now.Year, 12, 31);<br \/>\nthis.ContextService.BSO.CRM.OportunidadesVenda.Actualiza(opv);<\/p>\n<p>if (opv.LinhasContacto.Count() == 0)<br \/>\n{<br \/>\nif (this.ContextService.PSO.Dialogos.MostraPerguntaSimples(&#8220;N\u00e3o existe nenhum contacto associado a esta OPV. Deseja associar um?&#8221;) == true)<br \/>\n{<br \/>\nusing (var result = this.ContextService.BSO.Extensibility.CreateCustomFormInstance(typeof(PriFrmContactos)))<br \/>\n{<br \/>\n(result.Result as PriFrmContactos).sOrig = &#8220;OPV&#8221;;<br \/>\n(result.Result as PriFrmContactos).sTipoEnt = opv.TipoEntidade;<br \/>\n(result.Result as PriFrmContactos).codEntidadeEmUso = opv.Entidade;<br \/>\n(result.Result as PriFrmContactos).sPermiteEnviarEmail = false;<br \/>\n(result.Result as PriFrmContactos).ShowDialog();<\/p>\n<p>string sCodContacto;<\/p>\n<p>sCodContacto = (result.Result as PriFrmContactos).sContactoSelecionado;<br \/>\nif (sCodContacto.Length &gt; 0)<br \/>\n{<br \/>\nopv.LinhasContacto.RemoveTodos();<\/p>\n<p>BasBELinhaContactoOVEnda lincnt;<br \/>\nlincnt = new BasBELinhaContactoOVEnda();<br \/>\nopv = this.ContextService.BSO.CRM.OportunidadesVenda.Edita(opv.Oportunidade);<br \/>\nlincnt.IDCabecOVenda = opv.ID;<br \/>\nlincnt.IDContacto = this.ContextService.BSO.Base.Contactos.DaValorAtributo(sCodContacto, &#8220;ID&#8221;);<br \/>\nlincnt.Avaliacao = &#8220;0&#8221;;<br \/>\nopv.LinhasContacto.Insere(lincnt);<br \/>\nthis.ContextService.BSO.CRM.OportunidadesVenda.Actualiza(opv);<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n}<\/p>\n<p>\/\/sProp = new CrmBEPropostaOPV();<br \/>\n\/\/sProp.IdOportunidade = opv.ID;<br \/>\nnumProp = 0;<br \/>\nfor (int i = 0; i &lt;= dgvDuplicaPropostas.Rows.Count &#8211; 1; i++)<br \/>\n{<\/p>\n<p>if (dgvDuplicaPropostas.Rows[i].Selected==true)<br \/>\n{<br \/>\nsProp = new CrmBEPropostaOPV();<br \/>\nsProp.IdOportunidade = opv.ID;<br \/>\nnumProp += 1;<br \/>\nstdLinProp = this.ContextService.BSO.Consulta(&#8220;select linha,isnull(artigo,&#8221;)artigo,isnull(descricao,&#8221;)descricao,quantidade,isnull(unidade,&#8221;)unidade,factorconv,precocusto,precovenda,desconto,desconto1,desconto2,desconto3,valordesconto,rentabilidade,margem,isnull(observacoes,&#8221;)observacoes,cdu_grupo,cdu_ordem,isnull(cdu_desccomp,&#8221;)cdu_desccomp,cdu_newlinha,isnull(cdu_fornecedor,&#8221;)cdu_fornecedor,isnull(cdu_ref_forn,&#8221;)cdu_ref_forn,isnull(cdu_ref_fabricante,&#8221;)cdu_ref_fabricante from linhaspropostasopv(nolock) where idoportunidade in (select id from CabecOportunidadesVenda(nolock) where Oportunidade='&#8221; + optOrigem + &#8220;&#8216;) and numproposta=&#8221; + dgvDuplicaPropostas.CurrentRow.Cells[&#8220;proposta&#8221;].Value + &#8220;&#8221;);<br \/>\nwhile (!stdLinProp.NoFim())<br \/>\n{<br \/>\nlinProp = new CrmBELinhaPropostaOPV();<br \/>\nlinProp.NumProposta = numProp;<br \/>\nlinProp.Linha = stdLinProp.Valor(&#8220;linha&#8221;);<br \/>\nlinProp.IdOportunidade = opv.ID;<br \/>\nlinProp.Artigo = stdLinProp.Valor(&#8220;artigo&#8221;);<br \/>\nlinProp.Descricao = stdLinProp.Valor(&#8220;descricao&#8221;);<br \/>\nlinProp.Quantidade = stdLinProp.Valor(&#8220;quantidade&#8221;);<br \/>\nlinProp.Unidade = stdLinProp.Valor(&#8220;unidade&#8221;);<br \/>\nlinProp.FactorConv = stdLinProp.Valor(&#8220;factorconv&#8221;);<br \/>\nlinProp.PrecoCusto = stdLinProp.Valor(&#8220;precocusto&#8221;);<br \/>\nlinProp.PrecoVenda = stdLinProp.Valor(&#8220;precovenda&#8221;);<br \/>\nlinProp.Desconto = stdLinProp.Valor(&#8220;desconto&#8221;);<br \/>\nlinProp.Desconto1 = stdLinProp.Valor(&#8220;desconto1&#8221;);<br \/>\nlinProp.Desconto2 = stdLinProp.Valor(&#8220;desconto2&#8221;);<br \/>\nlinProp.Desconto3 = stdLinProp.Valor(&#8220;desconto3&#8221;);<br \/>\nlinProp.ValorDesconto = stdLinProp.Valor(&#8220;valordesconto&#8221;);<br \/>\nlinProp.Rentabilidade = stdLinProp.Valor(&#8220;rentabilidade&#8221;);<br \/>\nlinProp.Margem = stdLinProp.Valor(&#8220;margem&#8221;);<br \/>\nlinProp.Observacoes = stdLinProp.Valor(&#8220;observacoes&#8221;);<br \/>\nlinProp.CamposUtil[&#8220;cdu_grupo&#8221;].Valor = stdLinProp.Valor(&#8220;cdu_grupo&#8221;);<br \/>\nlinProp.CamposUtil[&#8220;cdu_ordem&#8221;].Valor = stdLinProp.Valor(&#8220;cdu_ordem&#8221;);<br \/>\nlinProp.CamposUtil[&#8220;cdu_desccomp&#8221;].Valor = stdLinProp.Valor(&#8220;cdu_desccomp&#8221;);<br \/>\nlinProp.CamposUtil[&#8220;cdu_newlinha&#8221;].Valor = stdLinProp.Valor(&#8220;cdu_newlinha&#8221;);<br \/>\nlinProp.CamposUtil[&#8220;cdu_fornecedor&#8221;].Valor = stdLinProp.Valor(&#8220;cdu_fornecedor&#8221;);<br \/>\nlinProp.CamposUtil[&#8220;cdu_ref_forn&#8221;].Valor = stdLinProp.Valor(&#8220;cdu_ref_forn&#8221;);<br \/>\nlinProp.CamposUtil[&#8220;cdu_ref_fabricante&#8221;].Valor = stdLinProp.Valor(&#8220;cdu_ref_fabricante&#8221;);<br \/>\nsProp.NumProposta = numProp;<br \/>\nsProp.Linhas.Insere (linProp);<br \/>\nstdLinProp.Seguinte();<br \/>\n}<br \/>\nsProp.IdOportunidade = opv.ID;<br \/>\nthis.ContextService.BSO.CRM.PropostasOPV.Actualiza(sProp);<br \/>\n}<br \/>\n}<br \/>\nthis.ContextService.PSO.Dialogos.MostraAviso(&#8220;Registo duplicado com sucesso. Foi gerada a OPV n\u00ba: &#8221; + opv.Oportunidade);<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bom dia, tenho uma fun\u00e7\u00e3o que gera uma Oportunidade de venda e uma proposta sobre essa OPV O codigo gera a proposta e a oportunidade de venda corretamente, no entanto, na tabela cabecoportunidade de venda, os totais s\u00e3o est\u00e3o a ser atualizados: Campos esses: MargemOV MargempercOV ValorTotalOV &nbsp; O que \u00e9 que est\u00e1 a faltar? [&hellip;]<\/p>\n","protected":false},"author":789,"featured_media":0,"template":"","tags":[],"cma_category":[],"cma_difficulty_level":[],"forum-tag":[374],"class_list":["post-17341","cma_thread","type-cma_thread","status-publish","hentry","forum-tag-v10-en","forum-languages-pt"],"_links":{"self":[{"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/cma_thread\/17341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/cma_thread"}],"about":[{"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/types\/cma_thread"}],"author":[{"embeddable":true,"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/users\/789"}],"wp:attachment":[{"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/media?parent=17341"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/tags?post=17341"},{"taxonomy":"cma_category","embeddable":true,"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/cma_category?post=17341"},{"taxonomy":"cma_difficulty_level","embeddable":true,"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/cma_difficulty_level?post=17341"},{"taxonomy":"forum-tag","embeddable":true,"href":"https:\/\/developers.ila.cegid.com\/en\/wp-json\/wp\/v2\/forum-tag?post=17341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}