Determining a date from the format 'Xth Day Of Yth Month' (e.g. general assembly)

Hi Sam, Sven,

I worked out a function to determine the Xth Day of the Yth Month (e.g. to determine the date corresponding to the date of the general assembly of shareholders coupled to a given book year), where this date is often determined in the statutory documents as the ‘3rd Wednesday of May’ or something like that.

Now this code works (even with translations), I just wondered whether some parts of it can be done in a more efficient way. If you’ve got any tips/tricks in this regard, please let me know :-). Thanks!

{% capture CUS_FUN_DetermineDateFromXthDayOfYthMonth %}

{% comment %}Geef een volgnummer aan de gekozen maand{% endcomment %}
{% case custom.vergadering.month_chosen %}
{% when 'januari' %}
  {% assign str_Vergadering_Month = 'January' %}
  {% assign int_Vergadering_Month_Number = 1 %}
{% when 'februari' %}
  {% assign str_Vergadering_Month = 'February' %}
  {% assign int_Vergadering_Month_Number = 2 %}
{% when 'maart' %}
  {% assign str_Vergadering_Month = 'March' %}
  {% assign int_Vergadering_Month_Number = 3 %}
{% when 'april' %}
  {% assign str_Vergadering_Month = 'April' %}
  {% assign int_Vergadering_Month_Number = 4 %}
{% when 'mei' %}
  {% assign str_Vergadering_Month = 'May' %}
  {% assign int_Vergadering_Month_Number = 5 %}
{% when 'juni' %}
  {% assign str_Vergadering_Month = 'June' %}
  {% assign int_Vergadering_Month_Number = 6 %}
{% when 'juli' %}
  {% assign str_Vergadering_Month = 'July' %}
  {% assign int_Vergadering_Month_Number = 7 %}
{% when 'augustus' %}
  {% assign str_Vergadering_Month = 'August' %}
  {% assign int_Vergadering_Month_Number = 8 %}
{% when 'september' %}
  {% assign str_Vergadering_Month = 'September' %}
  {% assign int_Vergadering_Month_Number = 9 %}
{% when 'oktober' %}
  {% assign str_Vergadering_Month = 'October' %}
  {% assign int_Vergadering_Month_Number = 10 %}
{% when 'november' %}
  {% assign str_Vergadering_Month = 'November' %}
  {% assign int_Vergadering_Month_Number = 11 %}
{% when 'december' %}
  {% assign str_Vergadering_Month = 'December' %}
  {% assign int_Vergadering_Month_Number = 12 %}
{% endcase %}

{% comment %}Step: Bepaal de het volgnummer van de maand waarin het boekjaar afloopt{% endcomment %}
{% assign int_BookYear_EndDate_Month_Number = period.year_end_date | date:'%m' | plus:0 %}

{% comment %}Afgeleide variabelen{% endcomment %}
{% if int_Vergadering_Month_Number < int_BookYear_EndDate_Month_Number %}
  {% assign int_NextYear = period.year_end_date | date:'%Y' | plus:1 %}
{% else %}
  {% assign int_NextYear = period.year_end_date | date:'%Y' %}
{% endif %}

{% comment %}Step: Geef een volgnummer aan de doeldag{% endcomment %}
{% case custom.vergadering.weekday_chosen %}
{% when 'maandag' or 'lundi' or 'Monday' %}
  {% assign int_str_WeekDay_Name_SequenceNumber = 1 %}
{% when 'dinsdag' or 'mardi' or 'Tuesday' %}
  {% assign int_str_WeekDay_Name_SequenceNumber = 2 %}
{% when 'woensdag' or 'mercredi' or 'Wednesday' %}
  {% assign int_str_WeekDay_Name_SequenceNumber = 3 %}
{% when 'donderdag' or 'jeudi' or 'Thursday' %}
  {% assign int_str_WeekDay_Name_SequenceNumber = 4 %}
{% when 'vrijdag' or 'vendredi' or 'Friday' %}
  {% assign int_str_WeekDay_Name_SequenceNumber = 5 %}
{% when 'zaterdag' or 'samedi' or 'Saturday' %}
  {% assign int_str_WeekDay_Name_SequenceNumber = 6 %}
{% when 'zondag' or 'dimanche' or 'Sunday' %}
  {% assign int_str_WeekDay_Name_SequenceNumber = 7 %}
{% endcase %}

{% comment %}Step: Bepaal de weekdag voor de eerste dag van de maand str_Vergadering_Month/int_NextYear{% endcomment %}
{% assign str_FirstDayOfMonth_FullString = str_Vergadering_Month | append:' ' | append:1 | append:', ' | append:int_NextYear %}
{% assign str_FirstDayOfMonth_Day = str_FirstDayOfMonth_FullString | date: '%A' %}

{% comment %}Step: Geef een volgnummer aan de eerste dag van de maand{% endcomment %}
{% case str_FirstDayOfMonth_Day %}
{% when 'maandag' or 'lundi' or 'Monday' %}
  {% assign int_str_AimDay_Name_SequenceNumber = 1 %}
{% when 'dinsdag' or 'mardi' or 'Tuesday' %}
  {% assign int_str_AimDay_Name_SequenceNumber = 2 %}
{% when 'woensdag' or 'mercredi' or 'Wednesday' %}
  {% assign int_str_AimDay_Name_SequenceNumber = 3 %}
{% when 'donderdag' or 'jeudi' or 'Thursday' %}
  {% assign int_str_AimDay_Name_SequenceNumber = 4 %}
{% when 'vrijdag' or 'vendredi' or 'Friday' %}
  {% assign int_str_AimDay_Name_SequenceNumber = 5 %}
{% when 'zaterdag' or 'samedi' or 'Saturday' %}
  {% assign int_str_AimDay_Name_SequenceNumber = 6 %}
{% when 'zondag' or 'dimanche' or 'Sunday' %}
  {% assign int_str_AimDay_Name_SequenceNumber = 7 %}
{% endcase %}

{% comment %}Step: Bepaal de coëfficient waarmee moet worden vermenigvuld{% endcomment %}
{% if int_str_WeekDay_Name_SequenceNumber >= int_str_AimDay_Name_SequenceNumber %}
  {% assign int_Coef = custom.vergadering.xthday | minus:1 %}
{% else %}
  {% assign int_Coef = custom.vergadering.xthday %}
{% endif %}

{% comment %}Step: Doe eindbewerkingen{% endcomment %}
{% assign int_DoelDag_Volgnummer = 7 | times:int_Coef | plus:1 | plus:int_str_WeekDay_Name_SequenceNumber | minus:int_str_AimDay_Name_SequenceNumber %}
{% assign int_Date_Day = int_DoelDag_Volgnummer | integer %}
{% assign str_DoelDatum = str_Vergadering_Month | append:' ' | append:int_Date_Day | append:', ' | append:int_NextYear %}

{{str_DoelDatum | date: '%A %d/%m/%Y'}}

{% endcapture %}

{{CUS_FUN_DetermineDateFromXthDayOfYthMonth}}

Thanks @Bart_Verhaeghe, greatly appreciate your effort! :muscle:

This is on my list to review asap :blush: