NAME Calendar::Indonesia::Holiday - List Indonesian public holidays VERSION version 0.02 SYNOPSIS use Calendar::Indonesia::Holiday qw( list_id_holidays enum_id_workdays count_id_workdays ); # list Indonesian holidays for the year 2011, without the joint leave days # ("cuti bersama"), show only the dates my $res = list_id_holidays(year => 2011, is_joint_leave=>0); # sample result [200, "OK", [ '2011-01-01', '2011-02-03', '2011-02-16', '2011-03-05', '2011-04-22', '2011-05-17', '2011-06-02', '2011-06-29', '2011-08-17', '2011-08-31', '2011-09-01', '2011-11-07', '2011-11-27', '2011-12-25', ]]; # list religious Indonesian holidays, show full details my $res = list_id_holidays(year => 2011, has_tags => ['religious'], detail=>1); # sample result [200, "OK", [ {date => '2011-02-16', day => 16, month => 2, year => 2011, id_name => 'Maulid Nabi Muhammad', en_name => 'Mawlid', en_aliases => ['Mawlid An-Nabi'], id_aliases => ['Maulud'], is_holiday => 1, tags => [qw/religious religion=islam calendar=lunar/], }, ... ]]; # check whether 2011-02-16 is a holiday my $res = list_id_holidays(date => '2011-02-16'); print "2011-02-16 is a holiday\n" if @{$res->[2]}; # enumerate working days for a certain period my $res = enum_id_workdays(year=>2011, month=>7); # idem, but returns a number instead. year/month defaults to current # year/month. my $res = count_id_workdays(); DESCRIPTION This module provides one function: list_id_holidays. This module uses Log::Any logging framework. This module's functions has Sub::Spec specs. FUNCTIONS None are exported by default, but they are exportable. count_id_workdays(%args) -> [STATUS_CODE, ERR_MSG, RESULT] Count working days in a certain period (month/year). Working day is defined as day that is not Saturday*/Sunday/holiday/joint leave days*. If work_saturdays is set to true, Saturdays are also counted as working days. If observe_joint_leaves is set to false, joint leave days are also counted as working days. Returns a 3-element arrayref. STATUS_CODE is 200 on success, or an error code between 3xx-5xx (just like in HTTP). ERR_MSG is a string containing error message, RESULT is the actual result. Arguments ("*" denotes required arguments): * month* => *int* * observe_joint_leaves => *bool* (default 1) If set to 0, do not observe joint leave as holidays. * work_saturdays => *bool* (default 0) If set to 1, Saturday is a working day. * year* => *int* enum_id_workdays(%args) -> [STATUS_CODE, ERR_MSG, RESULT] Enumerate working days in a certain period (month/year). Working day is defined as day that is not Saturday*/Sunday/holiday/joint leave days*. If work_saturdays is set to true, Saturdays are also counted as working days. If observe_joint_leaves is set to false, joint leave days are also counted as working days. Returns a 3-element arrayref. STATUS_CODE is 200 on success, or an error code between 3xx-5xx (just like in HTTP). ERR_MSG is a string containing error message, RESULT is the actual result. Arguments ("*" denotes required arguments): * month* => *int* * observe_joint_leaves => *bool* (default 1) If set to 0, do not observe joint leave as holidays. * work_saturdays => *bool* (default 0) If set to 1, Saturday is a working day. * year* => *int* list_id_holidays(%args) -> [STATUS_CODE, ERR_MSG, RESULT] List Indonesian holidays in calendar. List holidays and joint leave days ("cuti bersama"). Contains data from years 2008 to 2012 (joint leave days until 2012). Returns a 3-element arrayref. STATUS_CODE is 200 on success, or an error code between 3xx-5xx (just like in HTTP). ERR_MSG is a string containing error message, RESULT is the actual result. Field selection arguments ("*" denotes required arguments): * detail => *bool* (default 0) Return detailed data (all fields). * fields => *array* Select fields to return. When off, will return an array of values without field names (array/list). Default is off, will be turned on by default when 'fields' or 'detail' options are specified. * show_field_names => *bool* Show field names in result (as hash/assoc). When off, will return an array of values without field names (array/list). When on, will return an array of field names and values (hash/associative array). Filter arguments: * q => *str* Search. Filter for date arguments: * date => *str* Only return results having certain value of date. * date_contain => *str* Only return results with date containing certain text. * date_match => *str* Only return results with date matching specified regex. * date_not_contain => *str* Only return results with date not containing certain text. * date_not_match => *str* Only return results with date matching specified regex. * max_date => *str* Only return results having a certain maximum value of date. * min_date => *str* Only return results having a certain minimum value of date. Filter for day arguments: * day => *int* Only return results having certain value of day. * max_day => *int* Only return results having a certain maximum value of day. * min_day => *int* Only return results having a certain minimum value of day. Filter for dow arguments: * dow => *int* Only return results having certain value of dow. * max_dow => *int* Only return results having a certain maximum value of dow. * min_dow => *int* Only return results having a certain minimum value of dow. Filter for is_holiday arguments: * is_holiday => *bool* (default 0) Only return results having a true is_holiday value. Filter for is_joint_leave arguments: * is_joint_leave => *bool* (default 0) Only return results having a true is_joint_leave value. Filter for month arguments: * max_month => *int* Only return results having a certain maximum value of month. * min_month => *int* Only return results having a certain minimum value of month. * month => *int* Only return results having certain value of month. Filter for tags arguments: * has_tags => *array* Only return results having specified values in tags. * lacks_tags => *array* Only return results not having specified values in tags. Filter for year arguments: * max_year => *int* Only return results having a certain maximum value of year. * min_year => *int* Only return results having a certain minimum value of year. * year => *int* Only return results having certain value of year. Order arguments: * random => *bool* (default 0) If on, return result in random order. * sort => *str* Order data according to certain fields. A list of field names separated by comma. Each field can be prefixed with '-' to specify descending order instead of the default ascending. Paging arguments: * result_limit => *int* Only return a certain number of results. * result_start => *int* (default 1) Only return results from a certain position. FAQ What is "joint leave"? Workers are normally granted 12 days of paid leave per year. They are free to spend it on whichever days they want. The joint leave ("cuti bersama") is a government program of recent years (since 2008) to recommend that some of these leave days be spent together nationally on certain days, especially during Lebaran (Eid Ul-Fitr). It is not mandated, but many do follow it anyway, e.g. government civil workers, banks, etc. I am marking joint leave days with is_joint_leave=1 and is_holiday=0, while the holidays themselves with is_holiday=1, so you can differentiate/select both/either one. Holidays before 2008? Will be provided if there is demand and data source. Why only provide data up to (current year)+1? Some religious holidays, especially Vesakha, are not determined yet. Joint leave days are also usually decreed by the government in May/June of the preceding year. SEE ALSO This API is available on GudangAPI, http://www.gudangapi.com/ , under "calendar/id" module. To use GudangAPI, you can use WWW::GudangAPI. AUTHOR Steven Haryanto COPYRIGHT AND LICENSE This software is copyright (c) 2011 by Steven Haryanto. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.