0

I have a custom object called Invoice which inside is a select field called Payment Terms which contains the different billing dates. Some dates calculate the end of the month and then add the days, some just add the days (for example 30 days, 60 and so on..) . I have an entry that calculates 30 days from the end of the month AND adds another 10 days. I can't make it work, when I create the invoice and the invoice is valid, it only adds the 2 months but not the ten days more.

I leave you my apex code

public class FatturaHandlerScadenza {    
    public static void ScadenzaFat (List<Fattura__c> LeFatture){
        Map<String, TerminiDiPagamento__c> MapOfTermini = new Map<String, TerminiDiPagamento__c>();
        List<TerminiDiPagamento__c> Term = [Select name, Termini_Di_Pagamento__c, Numero_di_giorno__c, Fine_Mese__c,Numero_di_mesi__c FROM TerminiDiPagamento__c ];
        for(TerminiDiPagamento__c t : Term){
            MapOfTermini.put(t.Termini_Di_Pagamento__c, t);
        }
        for(Fattura__c f : LeFatture){
            date DataValidazioneFattura=f.Data_Fattura__c;
            Integer dayToRemove = DataValidazioneFattura.day()-1;
            for(TerminiDiPagamento__c t : Term){
                if(MapOfTermini.get(f.Termini__c)!=null ){
                    if(MapOfTermini.get(f.Termini__c).Fine_Mese__c == true && (MapOfTermini.get(f.Termini__c).Numero_di_mesi__c!= 0 && MapOfTermini.get(f.Termini__c).Numero_di_mesi__c != null)){
                        f.Data_Scadenza__c = DataValidazioneFattura.addMonths((Integer.valueOf(MapOfTermini.get(f.Termini__c).Numero_di_mesi__c))).toStartofMonth();
                        // System.debug('è entrato per il fine del mese corrente');
                    } else if(MapOfTermini.get(f.Termini__c).Numero_di_giorno__c != 0 && MapOfTermini.get(f.Termini__c).Numero_di_giorno__c != null){ 
                        // System.debug('è entrato e nn è fine mese ');
                        f.Data_Scadenza__c = DataValidazioneFattura + Integer.valueOf(MapOfTermini.get(f.Termini__c).Numero_di_giorno__c) ;
                    } else if(MapOfTermini.get(f.Termini__c).Fine_Mese__c == true && MapOfTermini.get(f.Termini__c).Numero_di_mesi__c !=0  && MapOfTermini.get(f.Termini__c).Numero_di_mesi__c != null && MapOfTermini.get(f.Termini__c).Numero_di_giorno__c!=0 && MapOfTermini.get(f.Termini__c).Numero_di_giorno__c !=null){
                        //System.debug('è entrato in fattura 30gg fine mese + 10);
                        f.Data_Scadenza__c = DataValidazioneFattura.addMonths((Integer.valueOf(MapOfTermini.get(f.Termini__c).Numero_di_mesi__c))).toStartofMonth();
                        f.Data_Scadenza__c = DataValidazioneFattura.addDays(10);
                    } else 
                        f.Data_Scadenza__c = DataValidazioneFattura.addDays(1);          
                    // System.debug('è entrato ed è a vistas');
                }
            }
        }
    }
}

I also have an active workflow, I tried here too but without results:

IF (ISPICKVAL( Termini__c , ''),
IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '15 gg data Fattura'), Data_Fattura__c +15,

IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '30 gg data Fattura'), Data_Fattura__c +30,
IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '45 gg data Fattura'), Data_Fattura__c +45,
IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '50 gg data Fattura'), Data_Fattura__c +50,
IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '60 gg data Fattura'), Data_Fattura__c +60,
IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '90 gg data Fattura'), Data_Fattura__c +90,
IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '120 gg data Fattura'), Data_Fattura__c +120,


IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '30 gg fine mese data Fattura'), DATE(YEAR(Data_Fattura__c), MONTH(Data_Fattura__c)+1,1)+ 30,
IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '60 gg fine mese data Fattura'), DATE(YEAR(Data_Fattura__c), MONTH(Data_Fattura__c)+1, 1)+60,
IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '90 gg fine mese data Fattura'), DATE(YEAR(Data_Fattura__c), MONTH(Data_Fattura__c)+1,1)+90,
IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '120 gg fine mese data Fattura'), DATE(YEAR(Data_Fattura__c), MONTH(Data_Fattura__c)+1,1)+120,
IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, '30 gg fine mese + 10'), DATE(YEAR(Data_Fattura__c), MONTH(Data_Fattura__c)+1,1)+30,

IF( ISPICKVAL(Azienda__r.Termini_di_Pagamento__c, 'Fine mese data Fattura'), DATE(YEAR(Data_Fattura__c), MONTH(Data_Fattura__c),
IF(MONTH(Data_Fattura__c)=2,28,
IF(OR(MONTH(Data_Fattura__c)=11,
MONTH(Data_Fattura__c)=4,
MONTH(Data_Fattura__c)=6,
MONTH(Data_Fattura__c)=11),30,31)))

,TODAY())

1 Answer 1

0

Bienvenuto a Salesforce Stack Exchange (SFSE)!

It seems to me that in this section of code, where it appears that you are trying to add the extra 10 giorni...

} else if(MapOfTermini.get(f.Termini__c).Fine_Mese__c == true && MapOfTermini.get(f.Termini__c).Numero_di_mesi__c !=0  && MapOfTermini.get(f.Termini__c).Numero_di_mesi__c != null && MapOfTermini.get(f.Termini__c).Numero_di_giorno__c!=0 && MapOfTermini.get(f.Termini__c).Numero_di_giorno__c !=null){
    //System.debug('è entrato in fattura 30gg fine mese + 10);
    f.Data_Scadenza__c = DataValidazioneFattura.addMonths((Integer.valueOf(MapOfTermini.get(f.Termini__c).Numero_di_mesi__c))).toStartofMonth();
    f.Data_Scadenza__c = DataValidazioneFattura.addDays(10);
}

...in your second assignment to f.Data_Scadenza__c you are overwriting what you just assigned.

I have not tested these, but I think that you should try either:

f.Data_Scadenza__c = DataValidazioneFattura.addMonths((Integer.valueOf(MapOfTermini.get(f.Termini__c).Numero_di_mesi__c))).toStartofMonth().addDays(10);

or

f.Data_Scadenza__c = DataValidazioneFattura.addMonths((Integer.valueOf(MapOfTermini.get(f.Termini__c).Numero_di_mesi__c))).toStartofMonth();
f.Data_Scadenza__c = f.Data_Scadenza__c.addDays(10);
1
  • Hello and thanks for the reply! Unfortunately it doesn't work, I've already tried it. I forgot to mention that I also have an active workflow, I tried here too but without results. The copy below
    – FRANCI
    Commented Nov 24, 2022 at 18:35

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .