invoice previo
Tue Feb 25 2025 18:55:24 GMT+0000 (Coordinated Universal Time)
Saved by @jesus
public with sharing class facturaSAPToHUB { public String OppId {get; set;} private Opportunity OppObject=null; private Account AccObject=null; private Contact ContactObject=null; private User UserObject=null; private String IVAP0 ='IVAP0'; private String IVAP16 = 'IVAP16'; public facturaSAPToHUB(String Id) { this.OppId=Id; FillOpportunity(); } private void FillOpportunity(){ Opportunity opp; List<Opportunity> opportunityList = [Select Id,AccountId ,OwnerId, Name,E_mail_para_env_o_de_Factura_Elect_nica__c,FormaDePago_o__c,CurrencyIsoCode, FechaFactura_o__c, Comentarios__c,MembresaPagadaCon_o__c, Referencia_Numerica_del__c,InicioVigencia_o__c, FinVigencia_o__c, Tipo_de_Facturacion__c,EstatusFactura__c,CreatedDate,TipoCambio_o__c, Importe_Descuento__c, NumFact__c, Referencia_Bancaria__c,Orden_de_Compra__c,N_mero_de_Proveedor__c, Observaciones_SAP__c, Clasificaci_n_de_Factura__c,Banco__c, Importe__c, Referencia_Banc__c,NunOfertafisica_o__c,Estatus_de_pago__c, Fecha_de_Pago_Bancario__c,Concepto_de_Cobro__c,FechaPago__c, Cambio_Datos_de_Facturaci_n__c, Clave_metodo_pago__c, N_mero_de_Cuenta_Pago__c, Folio_Oportunidad_sustituida__c, N_Contable_en_SAP_Sustituida__c, Sustituir_Datos__c, EjecutivoAsig_o__c, Id_pedido__c, IdPago__c, codigo_error_SAP__c, Mensaje_error_de_SAP__c, Factura_Aprobada__c, Fecha_de_Pedido__c, Mensaje_de_error_pedido__c, Error_al_crear_pedido__c, IdBillingOcc__c, IsBillingOccText__c, ClienteSAP_venta_anterior__c, Hub_Sale__c, Navision_Draft_ID__c From Opportunity where Id =:this.OppId LIMIT 1]; if (opportunityList !=null ){ this.OppObject = opportunityList[0]; // system.debug('this.IdPedido'); // system.debug(this.IdPedido); } } private Integer getAliasVentas(String id){ List<User> ejecutivoList = [Select Alias from User where Id in (Select EjecutivoAsig_o__c From Opportunity where Id =: id)]; Integer ejecutivoName=-1; try{ if(ejecutivoList.size()!=0){ User ejecutivo = ejecutivoList[0]; ejecutivoName =Integer.valueOf(ejecutivo.Alias); } }catch(System.TypeException e){ return -1; } return ejecutivoName; } private void FillAccount(){ Account acc=null; // List<Account> accountList; String AccountId; system.debug('Facturo a una cuenta facturadora ' + this.OppObject.isBillingOccText__c); system.debug('Facturo a la cuenta de la venta ' + this.OppObject.AccountId); //validatation for crossaccount to invoice correct account if (this.OppObject.IsBillingOccText__c != null && this.OppObject.IsBillingOccText__c != '') { AccountId = this.OppObject.IsBillingOccText__c; } else { AccountId = this.OppObject.AccountId; } List<Account> accountList = [Select Clave_SAP__c,RazonSoc_o__c,Id, Personamf__c,Name, Phone,Telefono2_o__c,Fax, RFC_o__c,Website,Cliente_SAE__c,PaisFact_o__c, No_de_interior__c, No_de_Exterior__c, EstadoFact_o__c, DelegMunicFact_o__c, Colonia_de_Facturaci_n__c, CodigoPostalFact_o__c, CiudadFact_opcional_o__c, CalleFact_o__c, Cuenta_Virtual_Banamex__c, Correo_para_envio_factura__c, Regimen_Fiscal__c, Tipo_de_uso_de_CFDI__c From Account where Id =: AccountId LIMIT 1]; if (accountList !=null ) this.AccObject = accountList[0]; } private void FillContact(){ List<Contact> contactList = [Select Title, Phone, OtherPhone ,MobilePhone, FirstName, LastName, Fax, Email,Id From Contact c where Id in(Select ContactId From OpportunityContactRole o where OpportunityId =:This.OppObject.Id and IsPrimary=true )]; Contact contacto = null; if(contactList.size()!=0){ this.ContactObject = contactList[0]; }else{ this.ContactObject = new Contact(); this.ContactObject.FirstName='Nombre'; this.ContactObject.LastName='Apellido'; this.ContactObject.Phone='1234567890'; this.ContactObject.Title= 'Puesto'; this.ContactObject.Phone='1234567890'; this.ContactObject.MobilePhone='9012345678'; this.ContactObject.Email='correo@correo.com'; //Validar si son requerido y que se ha estado enviando } } private void FillUser(){ List<User> usersList = [SELECT Id, Name from User where Id =: This.OppObject.OwnerId LIMIT 1]; this.UserObject = usersList[0]; } public InvoiceSapClases.InvoiceSapDocument FillInvoiceSAPDocument (){ InvoiceSapClases.InvoiceSapDocument sapContract; boolean IsSustitution=false; String comentarioVigencia = 'Vigencia del ' + Utils.formatDate(this.OppObject.InicioVigencia_o__c) + ' al '+ Utils.formatDate(this.OppObject.FinVigencia_o__c); // String actualizaContacto=''; // //system.debug('account.Cambio_Datos_de_Facturaci_on__c: ' + this.OppObject.Cambio_Datos_de_Facturaci_n__c); // if (this.OppObject.Cambio_Datos_de_Facturaci_n__c==false){actualizaContacto='False';}else{actualizaContacto='True';} List<OpportunityLineItem> oppLines = [SELECT UnitPrice, TotalPrice, Quantity, PricebookEntryId, Discount from OpportunityLineItem where OpportunityId =: this.OppObject.Id]; List<InvoiceSapClases.InvoiceSapDocumentLine> documentLines= new List<InvoiceSapClases.InvoiceSapDocumentLine>(); InvoiceSapClases.InvoiceSapDocumentLine documentLine; double discount=0.0; if(oppLines.size() > 0){ for(OpportunityLineItem oppTemp : oppLines) { if (oppTemp.Discount==null){ discount=0.0; } else { discount=oppTemp.Discount; } PricebookEntry priceBook = [SELECT ProductCode FROM PricebookEntry WHERE Id =: oppTemp.PricebookEntryId LIMIT 1]; documentLine= new InvoiceSapClases.InvoiceSapDocumentLine(priceBook.ProductCode,oppTemp.Quantity*1.0,oppTemp.UnitPrice,discount); documentLines.add(documentLine); } } string TipoRelacion=''; string UUIDRelacion = ''; if (this.OppObject.Sustituir_Datos__c == true){ TipoRelacion='04'; UUIDRelacion = this.OppObject.N_Contable_en_SAP_Sustituida__c; } String importeFactura=''; String fechaPagoBanco=''; if (this.OppObject.Importe__c!=null) { importeFactura=this.OppObject.Importe__c.toPlainString(); } if (this.OppObject.Fecha_de_Pago_Bancario__c!=null) { fechaPagoBanco=Utils.formatDate(this.OppObject.Fecha_de_Pago_Bancario__c); } InvoiceSapClases.InvoiceSapBusinessPertner bp= GetInvoiceSapBusinessPartner(); InvoiceSapClases.InvoiceSapDocument dc= new InvoiceSapClases.InvoiceSapDocument(this.AccObject.Clave_SAP__c, this.OppObject.FechaFactura_o__c, this.OppObject.FechaPago__c, this.OppObject.InicioVigencia_o__c, this.OppObject.FinVigencia_o__c,comentarioVigencia,UtilsV2.obtainFacturaType(this.OppObject.Tipo_de_Facturacion__c), UtilsV2.obtainFacturaStatus(this.OppObject.EstatusFactura__c), this.OppObject.E_mail_para_env_o_de_Factura_Elect_nica__c,this.OppObject.CreatedDate,this.UserObject.Name,'',0,Utils.getCurrency(this.OppObject.CurrencyIsoCode),this.OppObject.NumFact__c, this.OppObject.Referencia_Bancaria__c,Utils.getInvoiceType(this.OppObject.Tipo_de_Facturacion__c),this.OppObject.Orden_de_Compra__c,this.OppObject.N_mero_de_Proveedor__c, TipoRelacion,UUIDRelacion,Utils.getMetodoPagoSAT(this.OppObject.Clave_metodo_pago__c),this.AccObject.Cuenta_Virtual_Banamex__c,this.OppObject.N_mero_de_Cuenta_Pago__c, Utils.getInvoiceClassification(this.OppObject.Clasificaci_n_de_Factura__c), Utils.getInvoiceStatus(this.OppObject.EstatusFactura__c), this.OppObject.Observaciones_SAP__c, 0, this.OppObject.ClienteSAP_venta_anterior__c, bp, documentLines); sapContract = dc; return sapContract; } private InvoiceSapClases.InvoiceSapBusinessPertner GetInvoiceSapBusinessPartner (){ Integer ejecutivoName=getAliasVentas(This.OppObject.EjecutivoAsig_o__c); String actualizaContacto=''; if (This.OppObject.Cambio_Datos_de_Facturaci_n__c==false){actualizaContacto='False';}else{actualizaContacto='True';} InvoiceSapClases.InvoiceSapAddress ad= new InvoiceSapClases.InvoiceSapAddress( this.AccObject.CalleFact_o__c,this.AccObject.Colonia_de_Facturaci_n__c,this.AccObject.CodigoPostalFact_o__c, '', this.AccObject.DelegMunicFact_o__c,this.AccObject.No_de_Exterior__c, this.AccObject.No_de_interior__c, UtilsV2.getCatalogKey('Estados',this.AccObject.EstadoFact_o__c), UtilsV2.getCatalogKey('Paises',this.AccObject.PaisFact_o__c)); system.debug('ad'); system.debug(ad); InvoiceSapClases.InvoiceSapContact sc= new InvoiceSapClases.InvoiceSapContact(This.ContactObject.FirstName + ' ' + This.ContactObject.LastName, This.ContactObject.Title, This.ContactObject.Phone, This.ContactObject.MobilePhone, This.ContactObject.Email); system.debug('sc'); system.debug(sc); InvoiceSapClases.InvoiceSapBusinessPertner bp= new InvoiceSapClases.InvoiceSapBusinessPertner(this.AccObject.Clave_SAP__c,this.AccObject.RazonSoc_o__c,this.AccObject.Name,this.AccObject.Phone,this.AccObject.RFC_o__c, ejecutivoName, this.AccObject.Id,This.ContactObject.Id,Utils.TERRITORIOS.get(this.AccObject.EstadoFact_o__c), calculateDefinicionImpuesto(), utils.getTaxRegime(this.AccObject.Regimen_Fiscal__c), ad, sc); system.debug('bp'); system.debug(bp); return bp; } private String calculateDefinicionImpuesto(){ if (OppObject.Tipo_de_Facturacion__c =='Credito - TheNetwork'){ return IVAP0; } else { return IVAP16; } } // @future(callout=true) public static void sendInvoiceToHUB(string oppId){ facturaSAPToHUB instance = new facturaSAPToHUB(oppId); InvoiceSapClases.ResponseInvoiceDocument response; InvoiceSapClases.InvoiceSapDocument sapContract= instance.FillInvoiceSAPDocument(); String accessToken = SalesToHub.getAccessToken(); String bodyRequest = JSON.serialize(sapContract); system.debug('Petición SAP'+bodyRequest); HttpResponse resp = getBodyRequest(accessToken, bodyRequest); response = (InvoiceSapClases.ResponseInvoiceDocument)JSON.deserialize(resp.getBody(), InvoiceSapClases.ResponseInvoiceDocument.class); if (resp.getStatusCode() == 200) { instance.OppObject.Id_pedido__c = String.valueOf(response.Data.DocNum); instance.OppObject.NunOfertafisica_o__c = String.valueOf(response.Data.DocumentoRelacionado.DocNum); instance.OppObject.Factura_Aprobada__c = true; if(response.Data.DocumentoRelacionado.DocNum == null){ instance.OppObject.Mensaje_SAP__c = 'Factura en proceso'; }else{ instance.OppObject.Mensaje_SAP__c = response.Data.DocumentoRelacionado.Mensaje; } } if(resp.getStatusCode() == 409){ if(String.valueOf(response.Data.DocNum) == instance.OppObject.Id_pedido__c){ instance.OppObject.Mensaje_SAP__c = response.Data.Mensaje; instance.OppObject.NunOfertafisica_o__c = String.valueOf(response.Data.DocumentoRelacionado.DocNum); } } else{ instance.OppObject.Mensaje_SAP__c = 'Error de prueba '+resp.getStatusCode(); } instance.OppObject.Fecha_de_Pedido__c = Datetime.now(); instance.OppObject.Fecha_de_solicitud_factura__c = Datetime.now(); update instance.OppObject; } private static HttpResponse getBodyRequest(String accessToken, String bodyRequest){ OCCMClasesV2.ServiceConnRequest conn = new OCCMClasesV2.ServiceConnRequest(); conn.UserName = IntegrationServices__c.getValues('InvoiceToHub').UserName__c; // conn.Password = IntegrationServices__c.getValues('CTSalesHub').Password__c; conn.UrlService = IntegrationServices__c.getValues('InvoiceToHub').URLService__c; conn.UrlMethod = IntegrationServices__c.getValues('InvoiceToHub').URLMethod__c; conn.Accept = IntegrationServices__c.getValues('InvoiceToHub').Accept__c; conn.ContentType = IntegrationServices__c.getValues('InvoiceToHub').Content_Type__c; conn.IsActive = IntegrationServices__c.getValues('InvoiceToHub').IsActive__c; conn.NumAttempts = Integer.valueOf(IntegrationServices__c.getValues('InvoiceToHub').NumAttempts__c); conn.DelayMillis = Integer.valueOf(IntegrationServices__c.getValues('InvoiceToHub').DelayMillis__c); conn.GeneratedToken ='Bearer '+ accessToken; httputils http = new httputils(conn); HttpResponse res = http.MakeAuthorizedCallOut(bodyRequest, 200); return res; } }
Comments