You need to sign in to do that
Don't have an account?
Admin Process
How to get fiscal year and Period year from date
Hi,
It is my first post in this Community, I have not experience in Apex Code, I am learning it.
We need to update two custom fields based on the fiscal calendar set in my organization.
We have the custom field INVOICEDATE _ C which contains the date on which the invoice was made, based on this date we have to look for the year and fiscal period that corresponds for each invoice.
The following code was made in the window execute Anonymous but sent the following error message.
Line: 20, Column: 1
Invalid loop variable type expected SObject was SAF263SPPISalesPaymentPromotionInvoice__c
CODE APEX
Map<Date, String> mapYear;
Map<Date, Integer> mapPeriod;
mapYear = new Map<Date, String>();
mapPeriod = new Map<Date, Integer>();
//List<SAF263SPPISalesPaymentPromotionInvoice__c> dINVOICEDATE = [SELECT ID, INVOICEDATE__c FROM SAF263SPPISalesPaymentPromotionInvoice__c WHERE FiscalYear__c = NULL AND FiscalPeriod__c = NULL];
for(Period GetYearPeriod : [SELECT FiscalYearSettings.Name, Number, StartDate, EndDate
FROM Period where FiscalYearSettings.YearType = 'Custom' And Type = 'Month'])
{
mapYear.put(GetYearPeriod.StartDate, GetYearPeriod.FiscalYearSettings.Name);
mapPeriod.put(GetYearPeriod.StartDate, GetYearPeriod.Number);
}
System.debug('En SAF263 mapYear: ' + mapYear.KeySet());
System.debug('En SAF263 mapYear: ' + mapYear.Values());
System.debug('En SAF263 mapPeriod: ' + mapPeriod.KeySet());
System.debug('En SAF263 mapPeriod: ' + mapPeriod.Values());
for (SAF263SPPISalesPaymentPromotionInvoice__c objYearPeriod : Trigger.new)
{
if(mapYear.containsKey(objYearPeriod.INVOICEDATE__c))
{
objYearPeriod.FiscalYear__c = mapYear.get(objYearPeriod.INVOICEDATE__c);
}
System.debug('EN CuotaUsuario_tgr objYearPeriod.FiscalYear__c: ' + objYearPeriod.FiscalYear__c);
if(mapPeriod.containsKey(objYearPeriod.INVOICEDATE__c))
{
objYearPeriod.FiscalPeriod__c = mapPeriod.get(objYearPeriod.INVOICEDATE__c);
}
System.debug('EN CuotaUsuario_tgr objYearPeriod.FPeriod__c: ' + objYearPeriod.FPeriod__c);
}
Could you help me? to know what I have wrong or if there is any other way to perform the update of the two custom fields.
I'll thank you very much for your support.
It is my first post in this Community, I have not experience in Apex Code, I am learning it.
We need to update two custom fields based on the fiscal calendar set in my organization.
We have the custom field INVOICEDATE _ C which contains the date on which the invoice was made, based on this date we have to look for the year and fiscal period that corresponds for each invoice.
The following code was made in the window execute Anonymous but sent the following error message.
Line: 20, Column: 1
Invalid loop variable type expected SObject was SAF263SPPISalesPaymentPromotionInvoice__c
CODE APEX
Map<Date, String> mapYear;
Map<Date, Integer> mapPeriod;
mapYear = new Map<Date, String>();
mapPeriod = new Map<Date, Integer>();
//List<SAF263SPPISalesPaymentPromotionInvoice__c> dINVOICEDATE = [SELECT ID, INVOICEDATE__c FROM SAF263SPPISalesPaymentPromotionInvoice__c WHERE FiscalYear__c = NULL AND FiscalPeriod__c = NULL];
for(Period GetYearPeriod : [SELECT FiscalYearSettings.Name, Number, StartDate, EndDate
FROM Period where FiscalYearSettings.YearType = 'Custom' And Type = 'Month'])
{
mapYear.put(GetYearPeriod.StartDate, GetYearPeriod.FiscalYearSettings.Name);
mapPeriod.put(GetYearPeriod.StartDate, GetYearPeriod.Number);
}
System.debug('En SAF263 mapYear: ' + mapYear.KeySet());
System.debug('En SAF263 mapYear: ' + mapYear.Values());
System.debug('En SAF263 mapPeriod: ' + mapPeriod.KeySet());
System.debug('En SAF263 mapPeriod: ' + mapPeriod.Values());
for (SAF263SPPISalesPaymentPromotionInvoice__c objYearPeriod : Trigger.new)
{
if(mapYear.containsKey(objYearPeriod.INVOICEDATE__c))
{
objYearPeriod.FiscalYear__c = mapYear.get(objYearPeriod.INVOICEDATE__c);
}
System.debug('EN CuotaUsuario_tgr objYearPeriod.FiscalYear__c: ' + objYearPeriod.FiscalYear__c);
if(mapPeriod.containsKey(objYearPeriod.INVOICEDATE__c))
{
objYearPeriod.FiscalPeriod__c = mapPeriod.get(objYearPeriod.INVOICEDATE__c);
}
System.debug('EN CuotaUsuario_tgr objYearPeriod.FPeriod__c: ' + objYearPeriod.FPeriod__c);
}
Could you help me? to know what I have wrong or if there is any other way to perform the update of the two custom fields.
I'll thank you very much for your support.
thanks in advance, but in our fiscal year the periods are combined with the last week of the previous month, for example:
FY19 Period 10 from Febraury 25th to March 24th.
I have managed to get the right code, the annex for future reference or if someone is useful.
List<SAF263SPPISalesPaymentPromotionInvoice__c> dINVOICEDATE = [SELECT ID, INVOICEDATE__c FROM SAF263SPPISalesPaymentPromotionInvoice__c WHERE FiscalYear__c = NULL AND FiscalPeriod__c = NULL AND INVOICEDATE__c = THIS_FISCAL_QUARTER];
List<Period> GetYearPeriod = [SELECT FiscalYearSettings.Name, Number, StartDate, EndDate
FROM Period where FiscalYearSettings.YearType = 'Custom' And Type = 'Month' And StartDate >= LAST_FISCAL_YEAR];
for (SAF263SPPISalesPaymentPromotionInvoice__c objYearPeriod : dINVOICEDATE)
{
for(Period pp: GetYearPeriod){
if((objYearPeriod.INVOICEDATE__c >= pp.StartDate) && ( objYearPeriod.INVOICEDATE__c <= pp.EndDate ))
{
objYearPeriod.FiscalYear__c = pp.FiscalYearSettings.Name;
objYearPeriod.FiscalPeriod__c = pp.Number;
}
}
}
update dINVOICEDATE;
All Answers
&" - FY"
&CASE(
MONTH( StartDate ),
1, (Year( StartDate )),
2, (Year( StartDate )),
3, (Year( StartDate )),
4, (Year( StartDate )),
5, (Year( StartDate )),
6, (Year( StartDate )),
7, (Year( StartDate )),
(Year( StartDate ))+1)
&" - "
&CASE(
MONTH( StartDate ),
1, "January",
2, "February",
3, "March",
4, "April",
5, "May",
6, "June",
7, "July",
8, "August",
9, "September",
10, "October",
11, "November",
"December")
&" - "
&Team_Leader__c
Solution:
&TEXT(CASE(
MONTH( StartDate ),
1, (Year( StartDate )),
2, (Year( StartDate )),
3, (Year( StartDate )),
4, (Year( StartDate )),
5, (Year( StartDate )),
6, (Year( StartDate )),
7, (Year( StartDate )),
(Year( StartDate ))+1)
)
&" - "
I hope you find the above solution helpful. If it does, please mark as Best Answer to help others too.
Thanks.
Deepali Kulshrestha
thanks in advance, but in our fiscal year the periods are combined with the last week of the previous month, for example:
FY19 Period 10 from Febraury 25th to March 24th.
I have managed to get the right code, the annex for future reference or if someone is useful.
List<SAF263SPPISalesPaymentPromotionInvoice__c> dINVOICEDATE = [SELECT ID, INVOICEDATE__c FROM SAF263SPPISalesPaymentPromotionInvoice__c WHERE FiscalYear__c = NULL AND FiscalPeriod__c = NULL AND INVOICEDATE__c = THIS_FISCAL_QUARTER];
List<Period> GetYearPeriod = [SELECT FiscalYearSettings.Name, Number, StartDate, EndDate
FROM Period where FiscalYearSettings.YearType = 'Custom' And Type = 'Month' And StartDate >= LAST_FISCAL_YEAR];
for (SAF263SPPISalesPaymentPromotionInvoice__c objYearPeriod : dINVOICEDATE)
{
for(Period pp: GetYearPeriod){
if((objYearPeriod.INVOICEDATE__c >= pp.StartDate) && ( objYearPeriod.INVOICEDATE__c <= pp.EndDate ))
{
objYearPeriod.FiscalYear__c = pp.FiscalYearSettings.Name;
objYearPeriod.FiscalPeriod__c = pp.Number;
}
}
}
update dINVOICEDATE;