Merge remote-tracking branch 'nayan/unassignlo'

This commit is contained in:
Keith Woodlock
2013-02-10 20:04:30 +00:00
12 changed files with 519 additions and 39 deletions
+2
View File
@@ -2546,6 +2546,8 @@ Request Body:
<dd>'withdrewbyclient' : Client Withdrew Loan Application</dd> <dd>'withdrewbyclient' : Client Withdrew Loan Application</dd>
<dd>'undoapproval' : Undo Loan Approval</dd> <dd>'undoapproval' : Undo Loan Approval</dd>
<dd>'undodisbursal' : Undo Loan Disbursal</dd> <dd>'undodisbursal' : Undo Loan Disbursal</dd>
<dd>'assignloanofficer' : Assign Loan Officer</dd>
<dd>'unassignloanofficer' : Unassign Loan Officer as of today or in past but not beyond assigned date. Does not support unassigning in future date</dd>
</dl> </dl>
<br> <br>
<table class=matrixHeading> <table class=matrixHeading>
@@ -0,0 +1,2 @@
ALTER TABLE tenants MODIFY timezone_id VARCHAR(100) not null; -- timezone are refferd witn names rather than numerics
UPDATE `tenants` SET `timezone_id`='Asia/Kolkata' WHERE `id`=1 LIMIT 1; -- setting Indian time zone
+426
View File
@@ -0,0 +1,426 @@
USE `mifosplatform-tenants`;
DROP TABLE IF EXISTS `timezones`;
CREATE TABLE IF NOT EXISTS `timezones` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`country_code` varchar(2) NOT NULL,
`timezonename` varchar(100) NOT NULL,
`comments` varchar(150) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=416 DEFAULT CHARSET=latin1;
INSERT INTO `timezones` (`id`, `country_code`, `timezonename`, `comments`) VALUES
(1, 'AD', 'Europe/Andorra', NULL),
(2, 'AE', 'Asia/Dubai', ''),
(3, 'AF', 'Asia/Kabul', ''),
(4, 'AG', 'America/Antigua', ''),
(5, 'AI', 'America/Anguilla', ''),
(6, 'AL', 'Europe/Tirane', ''),
(7, 'AM', 'Asia/Yerevan', ''),
(8, 'AO', 'Africa/Luanda', ''),
(9, 'AQ', 'Antarctica/McMurdo', 'McMurdo Station, Ross Island'),
(10, 'AQ', 'Antarctica/South_Pole', 'Amundsen-Scott Station, South Pole'),
(11, 'AQ', 'Antarctica/Rothera', 'Rothera Station, Adelaide Island'),
(12, 'AQ', 'Antarctica/Palmer', 'Palmer Station, Anvers Island'),
(13, 'AQ', 'Antarctica/Mawson', 'Mawson Station, Holme Bay'),
(14, 'AQ', 'Antarctica/Davis', 'Davis Station, Vestfold Hills'),
(15, 'AQ', 'Antarctica/Casey', 'Casey Station, Bailey Peninsula'),
(16, 'AQ', 'Antarctica/Vostok', 'Vostok Station, Lake Vostok'),
(17, 'AQ', 'Antarctica/DumontDUrville', 'Dumont-dUrville Station, Terre Adelie'),
(18, 'AQ', 'Antarctica/Syowa', 'Syowa Station, E Ongul I'),
(19, 'AQ', 'Antarctica/Macquarie', 'Macquarie Island Station, Macquarie Island'),
(20, 'AR', 'America/Argentina/Buenos_Aires', 'Buenos Aires (BA, CF)'),
(21, 'AR', 'America/Argentina/Cordoba', 'most locations (CB, CC, CN, ER, FM, MN, SE, SF)'),
(22, 'AR', 'America/Argentina/Salta', '(SA, LP, NQ, RN)'),
(23, 'AR', 'America/Argentina/Jujuy', 'Jujuy (JY)'),
(24, 'AR', 'America/Argentina/Tucuman', 'Tucuman (TM)'),
(25, 'AR', 'America/Argentina/Catamarca', 'Catamarca (CT), Chubut (CH)'),
(26, 'AR', 'America/Argentina/La_Rioja', 'La Rioja (LR)'),
(27, 'AR', 'America/Argentina/San_Juan', 'San Juan (SJ)'),
(28, 'AR', 'America/Argentina/Mendoza', 'Mendoza (MZ)'),
(29, 'AR', 'America/Argentina/San_Luis', 'San Luis (SL)'),
(30, 'AR', 'America/Argentina/Rio_Gallegos', 'Santa Cruz (SC)'),
(31, 'AR', 'America/Argentina/Ushuaia', 'Tierra del Fuego (TF)'),
(32, 'AS', 'Pacific/Pago_Pago', ''),
(33, 'AT', 'Europe/Vienna', ''),
(34, 'AU', 'Australia/Lord_Howe', 'Lord Howe Island'),
(35, 'AU', 'Australia/Hobart', 'Tasmania - most locations'),
(36, 'AU', 'Australia/Currie', 'Tasmania - King Island'),
(37, 'AU', 'Australia/Melbourne', 'Victoria'),
(38, 'AU', 'Australia/Sydney', 'New South Wales - most locations'),
(39, 'AU', 'Australia/Broken_Hill', 'New South Wales - Yancowinna'),
(40, 'AU', 'Australia/Brisbane', 'Queensland - most locations'),
(41, 'AU', 'Australia/Lindeman', 'Queensland - Holiday Islands'),
(42, 'AU', 'Australia/Adelaide', 'South Australia'),
(43, 'AU', 'Australia/Darwin', 'Northern Territory'),
(44, 'AU', 'Australia/Perth', 'Western Australia - most locations'),
(45, 'AU', 'Australia/Eucla', 'Western Australia - Eucla area'),
(46, 'AW', 'America/Aruba', ''),
(47, 'AX', 'Europe/Mariehamn', ''),
(48, 'AZ', 'Asia/Baku', ''),
(49, 'BA', 'Europe/Sarajevo', ''),
(50, 'BB', 'America/Barbados', ''),
(51, 'BD', 'Asia/Dhaka', ''),
(52, 'BE', 'Europe/Brussels', ''),
(53, 'BF', 'Africa/Ouagadougou', ''),
(54, 'BG', 'Europe/Sofia', ''),
(55, 'BH', 'Asia/Bahrain', ''),
(56, 'BI', 'Africa/Bujumbura', ''),
(57, 'BJ', 'Africa/Porto-Novo', ''),
(58, 'BL', 'America/St_Barthelemy', ''),
(59, 'BM', 'Atlantic/Bermuda', ''),
(60, 'BN', 'Asia/Brunei', ''),
(61, 'BO', 'America/La_Paz', ''),
(62, 'BQ', 'America/Kralendijk', ''),
(63, 'BR', 'America/Noronha', 'Atlantic islands'),
(64, 'BR', 'America/Belem', 'Amapa, E Para'),
(65, 'BR', 'America/Fortaleza', 'NE Brazil (MA, PI, CE, RN, PB)'),
(66, 'BR', 'America/Recife', 'Pernambuco'),
(67, 'BR', 'America/Araguaina', 'Tocantins'),
(68, 'BR', 'America/Maceio', 'Alagoas, Sergipe'),
(69, 'BR', 'America/Bahia', 'Bahia'),
(70, 'BR', 'America/Sao_Paulo', 'S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)'),
(71, 'BR', 'America/Campo_Grande', 'Mato Grosso do Sul'),
(72, 'BR', 'America/Cuiaba', 'Mato Grosso'),
(73, 'BR', 'America/Santarem', 'W Para'),
(74, 'BR', 'America/Porto_Velho', 'Rondonia'),
(75, 'BR', 'America/Boa_Vista', 'Roraima'),
(76, 'BR', 'America/Manaus', 'E Amazonas'),
(77, 'BR', 'America/Eirunepe', 'W Amazonas'),
(78, 'BR', 'America/Rio_Branco', 'Acre'),
(79, 'BS', 'America/Nassau', ''),
(80, 'BT', 'Asia/Thimphu', ''),
(81, 'BW', 'Africa/Gaborone', ''),
(82, 'BY', 'Europe/Minsk', ''),
(83, 'BZ', 'America/Belize', ''),
(84, 'CA', 'America/St_Johns', 'Newfoundland Time, including SE Labrador'),
(85, 'CA', 'America/Halifax', 'Atlantic Time - Nova Scotia (most places), PEI'),
(86, 'CA', 'America/Glace_Bay', 'Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971'),
(87, 'CA', 'America/Moncton', 'Atlantic Time - New Brunswick'),
(88, 'CA', 'America/Goose_Bay', 'Atlantic Time - Labrador - most locations'),
(89, 'CA', 'America/Blanc-Sablon', 'Atlantic Standard Time - Quebec - Lower North Shore'),
(90, 'CA', 'America/Montreal', 'Eastern Time - Quebec - most locations'),
(91, 'CA', 'America/Toronto', 'Eastern Time - Ontario - most locations'),
(92, 'CA', 'America/Nipigon', 'Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973'),
(93, 'CA', 'America/Thunder_Bay', 'Eastern Time - Thunder Bay, Ontario'),
(94, 'CA', 'America/Iqaluit', 'Eastern Time - east Nunavut - most locations'),
(95, 'CA', 'America/Pangnirtung', 'Eastern Time - Pangnirtung, Nunavut'),
(96, 'CA', 'America/Resolute', 'Central Standard Time - Resolute, Nunavut'),
(97, 'CA', 'America/Atikokan', 'Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut'),
(98, 'CA', 'America/Rankin_Inlet', 'Central Time - central Nunavut'),
(99, 'CA', 'America/Winnipeg', 'Central Time - Manitoba & west Ontario'),
(100, 'CA', 'America/Rainy_River', 'Central Time - Rainy River & Fort Frances, Ontario'),
(101, 'CA', 'America/Regina', 'Central Standard Time - Saskatchewan - most locations'),
(102, 'CA', 'America/Swift_Current', 'Central Standard Time - Saskatchewan - midwest'),
(103, 'CA', 'America/Edmonton', 'Mountain Time - Alberta, east British Columbia & west Saskatchewan'),
(104, 'CA', 'America/Cambridge_Bay', 'Mountain Time - west Nunavut'),
(105, 'CA', 'America/Yellowknife', 'Mountain Time - central Northwest Territories'),
(106, 'CA', 'America/Inuvik', 'Mountain Time - west Northwest Territories'),
(107, 'CA', 'America/Creston', 'Mountain Standard Time - Creston, British Columbia'),
(108, 'CA', 'America/Dawson_Creek', 'Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia'),
(109, 'CA', 'America/Vancouver', 'Pacific Time - west British Columbia'),
(110, 'CA', 'America/Whitehorse', 'Pacific Time - south Yukon'),
(111, 'CA', 'America/Dawson', 'Pacific Time - north Yukon'),
(112, 'CC', 'Indian/Cocos', ''),
(113, 'CD', 'Africa/Kinshasa', 'west Dem. Rep. of Congo'),
(114, 'CD', 'Africa/Lubumbashi', 'east Dem. Rep. of Congo'),
(115, 'CF', 'Africa/Bangui', ''),
(116, 'CG', 'Africa/Brazzaville', ''),
(117, 'CH', 'Europe/Zurich', ''),
(118, 'CI', 'Africa/Abidjan', ''),
(119, 'CK', 'Pacific/Rarotonga', ''),
(120, 'CL', 'America/Santiago', 'most locations'),
(121, 'CL', 'Pacific/Easter', 'Easter Island & Sala y Gomez'),
(122, 'CM', 'Africa/Douala', ''),
(123, 'CN', 'Asia/Shanghai', 'east China - Beijing, Guangdong, Shanghai, etc.'),
(124, 'CN', 'Asia/Harbin', 'Heilongjiang (except Mohe), Jilin'),
(125, 'CN', 'Asia/Chongqing', 'central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.'),
(126, 'CN', 'Asia/Urumqi', 'most of Tibet & Xinjiang'),
(127, 'CN', 'Asia/Kashgar', 'west Tibet & Xinjiang'),
(128, 'CO', 'America/Bogota', ''),
(129, 'CR', 'America/Costa_Rica', ''),
(130, 'CU', 'America/Havana', ''),
(131, 'CV', 'Atlantic/Cape_Verde', ''),
(132, 'CW', 'America/Curacao', ''),
(133, 'CX', 'Indian/Christmas', ''),
(134, 'CY', 'Asia/Nicosia', ''),
(135, 'CZ', 'Europe/Prague', ''),
(136, 'DE', 'Europe/Berlin', ''),
(137, 'DJ', 'Africa/Djibouti', ''),
(138, 'DK', 'Europe/Copenhagen', ''),
(139, 'DM', 'America/Dominica', ''),
(140, 'DO', 'America/Santo_Domingo', ''),
(141, 'DZ', 'Africa/Algiers', ''),
(142, 'EC', 'America/Guayaquil', 'mainland'),
(143, 'EC', 'Pacific/Galapagos', 'Galapagos Islands'),
(144, 'EE', 'Europe/Tallinn', ''),
(145, 'EG', 'Africa/Cairo', ''),
(146, 'EH', 'Africa/El_Aaiun', ''),
(147, 'ER', 'Africa/Asmara', ''),
(148, 'ES', 'Europe/Madrid', 'mainland'),
(149, 'ES', 'Africa/Ceuta', 'Ceuta & Melilla'),
(150, 'ES', 'Atlantic/Canary', 'Canary Islands'),
(151, 'ET', 'Africa/Addis_Ababa', ''),
(152, 'FI', 'Europe/Helsinki', ''),
(153, 'FJ', 'Pacific/Fiji', ''),
(154, 'FK', 'Atlantic/Stanley', ''),
(155, 'FM', 'Pacific/Chuuk', 'Chuuk (Truk) and Yap'),
(156, 'FM', 'Pacific/Pohnpei', 'Pohnpei (Ponape)'),
(157, 'FM', 'Pacific/Kosrae', 'Kosrae'),
(158, 'FO', 'Atlantic/Faroe', ''),
(159, 'FR', 'Europe/Paris', ''),
(160, 'GA', 'Africa/Libreville', ''),
(161, 'GB', 'Europe/London', ''),
(162, 'GD', 'America/Grenada', ''),
(163, 'GE', 'Asia/Tbilisi', ''),
(164, 'GF', 'America/Cayenne', ''),
(165, 'GG', 'Europe/Guernsey', ''),
(166, 'GH', 'Africa/Accra', ''),
(167, 'GI', 'Europe/Gibraltar', ''),
(168, 'GL', 'America/Godthab', 'most locations'),
(169, 'GL', 'America/Danmarkshavn', 'east coast, north of Scoresbysund'),
(170, 'GL', 'America/Scoresbysund', 'Scoresbysund / Ittoqqortoormiit'),
(171, 'GL', 'America/Thule', 'Thule / Pituffik'),
(172, 'GM', 'Africa/Banjul', ''),
(173, 'GN', 'Africa/Conakry', ''),
(174, 'GP', 'America/Guadeloupe', ''),
(175, 'GQ', 'Africa/Malabo', ''),
(176, 'GR', 'Europe/Athens', ''),
(177, 'GS', 'Atlantic/South_Georgia', ''),
(178, 'GT', 'America/Guatemala', ''),
(179, 'GU', 'Pacific/Guam', ''),
(180, 'GW', 'Africa/Bissau', ''),
(181, 'GY', 'America/Guyana', ''),
(182, 'HK', 'Asia/Hong_Kong', ''),
(183, 'HN', 'America/Tegucigalpa', ''),
(184, 'HR', 'Europe/Zagreb', ''),
(185, 'HT', 'America/Port-au-Prince', ''),
(186, 'HU', 'Europe/Budapest', ''),
(187, 'ID', 'Asia/Jakarta', 'Java & Sumatra'),
(188, 'ID', 'Asia/Pontianak', 'west & central Borneo'),
(189, 'ID', 'Asia/Makassar', 'east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor'),
(190, 'ID', 'Asia/Jayapura', 'west New Guinea (Irian Jaya) & Malukus (Moluccas)'),
(191, 'IE', 'Europe/Dublin', ''),
(192, 'IL', 'Asia/Jerusalem', ''),
(193, 'IM', 'Europe/Isle_of_Man', ''),
(194, 'IN', 'Asia/Kolkata', ''),
(195, 'IO', 'Indian/Chagos', ''),
(196, 'IQ', 'Asia/Baghdad', ''),
(197, 'IR', 'Asia/Tehran', ''),
(198, 'IS', 'Atlantic/Reykjavik', ''),
(199, 'IT', 'Europe/Rome', ''),
(200, 'JE', 'Europe/Jersey', ''),
(201, 'JM', 'America/Jamaica', ''),
(202, 'JO', 'Asia/Amman', ''),
(203, 'JP', 'Asia/Tokyo', ''),
(204, 'KE', 'Africa/Nairobi', ''),
(205, 'KG', 'Asia/Bishkek', ''),
(206, 'KH', 'Asia/Phnom_Penh', ''),
(207, 'KI', 'Pacific/Tarawa', 'Gilbert Islands'),
(208, 'KI', 'Pacific/Enderbury', 'Phoenix Islands'),
(209, 'KI', 'Pacific/Kiritimati', 'Line Islands'),
(210, 'KM', 'Indian/Comoro', ''),
(211, 'KN', 'America/St_Kitts', ''),
(212, 'KP', 'Asia/Pyongyang', ''),
(213, 'KR', 'Asia/Seoul', ''),
(214, 'KW', 'Asia/Kuwait', ''),
(215, 'KY', 'America/Cayman', ''),
(216, 'KZ', 'Asia/Almaty', 'most locations'),
(217, 'KZ', 'Asia/Qyzylorda', 'Qyzylorda (Kyzylorda, Kzyl-Orda)'),
(218, 'KZ', 'Asia/Aqtobe', 'Aqtobe (Aktobe)'),
(219, 'KZ', 'Asia/Aqtau', 'Atyrau (Atirau, Guryev), Mangghystau (Mankistau)'),
(220, 'KZ', 'Asia/Oral', 'West Kazakhstan'),
(221, 'LA', 'Asia/Vientiane', ''),
(222, 'LB', 'Asia/Beirut', ''),
(223, 'LC', 'America/St_Lucia', ''),
(224, 'LI', 'Europe/Vaduz', ''),
(225, 'LK', 'Asia/Colombo', ''),
(226, 'LR', 'Africa/Monrovia', ''),
(227, 'LS', 'Africa/Maseru', ''),
(228, 'LT', 'Europe/Vilnius', ''),
(229, 'LU', 'Europe/Luxembourg', ''),
(230, 'LV', 'Europe/Riga', ''),
(231, 'LY', 'Africa/Tripoli', ''),
(232, 'MA', 'Africa/Casablanca', ''),
(233, 'MC', 'Europe/Monaco', ''),
(234, 'MD', 'Europe/Chisinau', ''),
(235, 'ME', 'Europe/Podgorica', ''),
(236, 'MF', 'America/Marigot', ''),
(237, 'MG', 'Indian/Antananarivo', ''),
(238, 'MH', 'Pacific/Majuro', 'most locations'),
(239, 'MH', 'Pacific/Kwajalein', 'Kwajalein'),
(240, 'MK', 'Europe/Skopje', ''),
(241, 'ML', 'Africa/Bamako', ''),
(242, 'MM', 'Asia/Rangoon', ''),
(243, 'MN', 'Asia/Ulaanbaatar', 'most locations'),
(244, 'MN', 'Asia/Hovd', 'Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan'),
(245, 'MN', 'Asia/Choibalsan', 'Dornod, Sukhbaatar'),
(246, 'MO', 'Asia/Macau', ''),
(247, 'MP', 'Pacific/Saipan', ''),
(248, 'MQ', 'America/Martinique', ''),
(249, 'MR', 'Africa/Nouakchott', ''),
(250, 'MS', 'America/Montserrat', ''),
(251, 'MT', 'Europe/Malta', ''),
(252, 'MU', 'Indian/Mauritius', ''),
(253, 'MV', 'Indian/Maldives', ''),
(254, 'MW', 'Africa/Blantyre', ''),
(255, 'MX', 'America/Mexico_City', 'Central Time - most locations'),
(256, 'MX', 'America/Cancun', 'Central Time - Quintana Roo'),
(257, 'MX', 'America/Merida', 'Central Time - Campeche, Yucatan'),
(258, 'MX', 'America/Monterrey', 'Mexican Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas away from US border'),
(259, 'MX', 'America/Matamoros', 'US Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas near US border'),
(260, 'MX', 'America/Mazatlan', 'Mountain Time - S Baja, Nayarit, Sinaloa'),
(261, 'MX', 'America/Chihuahua', 'Mexican Mountain Time - Chihuahua away from US border'),
(262, 'MX', 'America/Ojinaga', 'US Mountain Time - Chihuahua near US border'),
(263, 'MX', 'America/Hermosillo', 'Mountain Standard Time - Sonora'),
(264, 'MX', 'America/Tijuana', 'US Pacific Time - Baja California near US border'),
(265, 'MX', 'America/Santa_Isabel', 'Mexican Pacific Time - Baja California away from US border'),
(266, 'MX', 'America/Bahia_Banderas', 'Mexican Central Time - Bahia de Banderas'),
(267, 'MY', 'Asia/Kuala_Lumpur', 'peninsular Malaysia'),
(268, 'MY', 'Asia/Kuching', 'Sabah & Sarawak'),
(269, 'MZ', 'Africa/Maputo', ''),
(270, 'NA', 'Africa/Windhoek', ''),
(271, 'NC', 'Pacific/Noumea', ''),
(272, 'NE', 'Africa/Niamey', ''),
(273, 'NF', 'Pacific/Norfolk', ''),
(274, 'NG', 'Africa/Lagos', ''),
(275, 'NI', 'America/Managua', ''),
(276, 'NL', 'Europe/Amsterdam', ''),
(277, 'NO', 'Europe/Oslo', ''),
(278, 'NP', 'Asia/Kathmandu', ''),
(279, 'NR', 'Pacific/Nauru', ''),
(280, 'NU', 'Pacific/Niue', ''),
(281, 'NZ', 'Pacific/Auckland', 'most locations'),
(282, 'NZ', 'Pacific/Chatham', 'Chatham Islands'),
(283, 'OM', 'Asia/Muscat', ''),
(284, 'PA', 'America/Panama', ''),
(285, 'PE', 'America/Lima', ''),
(286, 'PF', 'Pacific/Tahiti', 'Society Islands'),
(287, 'PF', 'Pacific/Marquesas', 'Marquesas Islands'),
(288, 'PF', 'Pacific/Gambier', 'Gambier Islands'),
(289, 'PG', 'Pacific/Port_Moresby', ''),
(290, 'PH', 'Asia/Manila', ''),
(291, 'PK', 'Asia/Karachi', ''),
(292, 'PL', 'Europe/Warsaw', ''),
(293, 'PM', 'America/Miquelon', ''),
(294, 'PN', 'Pacific/Pitcairn', ''),
(295, 'PR', 'America/Puerto_Rico', ''),
(296, 'PS', 'Asia/Gaza', 'Gaza Strip'),
(297, 'PS', 'Asia/Hebron', 'West Bank'),
(298, 'PT', 'Europe/Lisbon', 'mainland'),
(299, 'PT', 'Atlantic/Madeira', 'Madeira Islands'),
(300, 'PT', 'Atlantic/Azores', 'Azores'),
(301, 'PW', 'Pacific/Palau', ''),
(302, 'PY', 'America/Asuncion', ''),
(303, 'QA', 'Asia/Qatar', ''),
(304, 'RE', 'Indian/Reunion', ''),
(305, 'RO', 'Europe/Bucharest', ''),
(306, 'RS', 'Europe/Belgrade', ''),
(307, 'RU', 'Europe/Kaliningrad', 'Moscow-01 - Kaliningrad'),
(308, 'RU', 'Europe/Moscow', 'Moscow+00 - west Russia'),
(309, 'RU', 'Europe/Volgograd', 'Moscow+00 - Caspian Sea'),
(310, 'RU', 'Europe/Samara', 'Moscow+00 - Samara, Udmurtia'),
(311, 'RU', 'Asia/Yekaterinburg', 'Moscow+02 - Urals'),
(312, 'RU', 'Asia/Omsk', 'Moscow+03 - west Siberia'),
(313, 'RU', 'Asia/Novosibirsk', 'Moscow+03 - Novosibirsk'),
(314, 'RU', 'Asia/Novokuznetsk', 'Moscow+03 - Novokuznetsk'),
(315, 'RU', 'Asia/Krasnoyarsk', 'Moscow+04 - Yenisei River'),
(316, 'RU', 'Asia/Irkutsk', 'Moscow+05 - Lake Baikal'),
(317, 'RU', 'Asia/Yakutsk', 'Moscow+06 - Lena River'),
(318, 'RU', 'Asia/Vladivostok', 'Moscow+07 - Amur River'),
(319, 'RU', 'Asia/Sakhalin', 'Moscow+07 - Sakhalin Island'),
(320, 'RU', 'Asia/Magadan', 'Moscow+08 - Magadan'),
(321, 'RU', 'Asia/Kamchatka', 'Moscow+08 - Kamchatka'),
(322, 'RU', 'Asia/Anadyr', 'Moscow+08 - Bering Sea'),
(323, 'RW', 'Africa/Kigali', ''),
(324, 'SA', 'Asia/Riyadh', ''),
(325, 'SB', 'Pacific/Guadalcanal', ''),
(326, 'SC', 'Indian/Mahe', ''),
(327, 'SD', 'Africa/Khartoum', ''),
(328, 'SE', 'Europe/Stockholm', ''),
(329, 'SG', 'Asia/Singapore', ''),
(330, 'SH', 'Atlantic/St_Helena', ''),
(331, 'SI', 'Europe/Ljubljana', ''),
(332, 'SJ', 'Arctic/Longyearbyen', ''),
(333, 'SK', 'Europe/Bratislava', ''),
(334, 'SL', 'Africa/Freetown', ''),
(335, 'SM', 'Europe/San_Marino', ''),
(336, 'SN', 'Africa/Dakar', ''),
(337, 'SO', 'Africa/Mogadishu', ''),
(338, 'SR', 'America/Paramaribo', ''),
(339, 'SS', 'Africa/Juba', ''),
(340, 'ST', 'Africa/Sao_Tome', ''),
(341, 'SV', 'America/El_Salvador', ''),
(342, 'SX', 'America/Lower_Princes', ''),
(343, 'SY', 'Asia/Damascus', ''),
(344, 'SZ', 'Africa/Mbabane', ''),
(345, 'TC', 'America/Grand_Turk', ''),
(346, 'TD', 'Africa/Ndjamena', ''),
(347, 'TF', 'Indian/Kerguelen', ''),
(348, 'TG', 'Africa/Lome', ''),
(349, 'TH', 'Asia/Bangkok', ''),
(350, 'TJ', 'Asia/Dushanbe', ''),
(351, 'TK', 'Pacific/Fakaofo', ''),
(352, 'TL', 'Asia/Dili', ''),
(353, 'TM', 'Asia/Ashgabat', ''),
(354, 'TN', 'Africa/Tunis', ''),
(355, 'TO', 'Pacific/Tongatapu', ''),
(356, 'TR', 'Europe/Istanbul', ''),
(357, 'TT', 'America/Port_of_Spain', ''),
(358, 'TV', 'Pacific/Funafuti', ''),
(359, 'TW', 'Asia/Taipei', ''),
(360, 'TZ', 'Africa/Dar_es_Salaam', ''),
(361, 'UA', 'Europe/Kiev', 'most locations'),
(362, 'UA', 'Europe/Uzhgorod', 'Ruthenia'),
(363, 'UA', 'Europe/Zaporozhye', 'Zaporozhye, E Lugansk / Zaporizhia, E Luhansk'),
(364, 'UA', 'Europe/Simferopol', 'central Crimea'),
(365, 'UG', 'Africa/Kampala', ''),
(366, 'UM', 'Pacific/Johnston', 'Johnston Atoll'),
(367, 'UM', 'Pacific/Midway', 'Midway Islands'),
(368, 'UM', 'Pacific/Wake', 'Wake Island'),
(369, 'US', 'America/New_York', 'Eastern Time'),
(370, 'US', 'America/Detroit', 'Eastern Time - Michigan - most locations'),
(371, 'US', 'America/Kentucky/Louisville', 'Eastern Time - Kentucky - Louisville area'),
(372, 'US', 'America/Kentucky/Monticello', 'Eastern Time - Kentucky - Wayne County'),
(373, 'US', 'America/Indiana/Indianapolis', 'Eastern Time - Indiana - most locations'),
(374, 'US', 'America/Indiana/Vincennes', 'Eastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties'),
(375, 'US', 'America/Indiana/Winamac', 'Eastern Time - Indiana - Pulaski County'),
(376, 'US', 'America/Indiana/Marengo', 'Eastern Time - Indiana - Crawford County'),
(377, 'US', 'America/Indiana/Petersburg', 'Eastern Time - Indiana - Pike County'),
(378, 'US', 'America/Indiana/Vevay', 'Eastern Time - Indiana - Switzerland County'),
(379, 'US', 'America/Chicago', 'Central Time'),
(380, 'US', 'America/Indiana/Tell_City', 'Central Time - Indiana - Perry County'),
(381, 'US', 'America/Indiana/Knox', 'Central Time - Indiana - Starke County'),
(382, 'US', 'America/Menominee', 'Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties'),
(383, 'US', 'America/North_Dakota/Center', 'Central Time - North Dakota - Oliver County'),
(384, 'US', 'America/North_Dakota/New_Salem', 'Central Time - North Dakota - Morton County (except Mandan area)'),
(385, 'US', 'America/North_Dakota/Beulah', 'Central Time - North Dakota - Mercer County'),
(386, 'US', 'America/Denver', 'Mountain Time'),
(387, 'US', 'America/Boise', 'Mountain Time - south Idaho & east Oregon'),
(388, 'US', 'America/Shiprock', 'Mountain Time - Navajo'),
(389, 'US', 'America/Phoenix', 'Mountain Standard Time - Arizona'),
(390, 'US', 'America/Los_Angeles', 'Pacific Time'),
(391, 'US', 'America/Anchorage', 'Alaska Time'),
(392, 'US', 'America/Juneau', 'Alaska Time - Alaska panhandle'),
(393, 'US', 'America/Sitka', 'Alaska Time - southeast Alaska panhandle'),
(394, 'US', 'America/Yakutat', 'Alaska Time - Alaska panhandle neck'),
(395, 'US', 'America/Nome', 'Alaska Time - west Alaska'),
(396, 'US', 'America/Adak', 'Aleutian Islands'),
(397, 'US', 'America/Metlakatla', 'Metlakatla Time - Annette Island'),
(398, 'US', 'Pacific/Honolulu', 'Hawaii'),
(399, 'UY', 'America/Montevideo', ''),
(400, 'UZ', 'Asia/Samarkand', 'west Uzbekistan'),
(401, 'UZ', 'Asia/Tashkent', 'east Uzbekistan'),
(402, 'VA', 'Europe/Vatican', ''),
(403, 'VC', 'America/St_Vincent', ''),
(404, 'VE', 'America/Caracas', ''),
(405, 'VG', 'America/Tortola', ''),
(406, 'VI', 'America/St_Thomas', ''),
(407, 'VN', 'Asia/Ho_Chi_Minh', ''),
(408, 'VU', 'Pacific/Efate', ''),
(409, 'WF', 'Pacific/Wallis', ''),
(410, 'WS', 'Pacific/Apia', ''),
(411, 'YE', 'Asia/Aden', ''),
(412, 'YT', 'Indian/Mayotte', ''),
(413, 'ZA', 'Africa/Johannesburg', ''),
(414, 'ZM', 'Africa/Lusaka', ''),
(415, 'ZW', 'Africa/Harare', '');
@@ -9,9 +9,11 @@ public class MifosPlatformTenant {
private final String schemaServerPort; private final String schemaServerPort;
private final String schemaUsername; private final String schemaUsername;
private final String schemaPassword; private final String schemaPassword;
private final String timezoneId;
public MifosPlatformTenant(final Long id, final String name, final String schemaName, final String schemaServer, public MifosPlatformTenant(final Long id, final String name, final String schemaName, final String schemaServer,
final String schemaServerPort, final String schemaUsername, final String schemaPassword) { final String schemaServerPort, final String schemaUsername, final String schemaPassword, String timezoneId) {
this.id = id; this.id = id;
this.name = name; this.name = name;
this.schemaName = schemaName; this.schemaName = schemaName;
@@ -19,6 +21,8 @@ public class MifosPlatformTenant {
this.schemaServerPort = schemaServerPort; this.schemaServerPort = schemaServerPort;
this.schemaUsername = schemaUsername; this.schemaUsername = schemaUsername;
this.schemaPassword = schemaPassword; this.schemaPassword = schemaPassword;
this.timezoneId = timezoneId;
} }
public Long getId() { public Long getId() {
@@ -48,4 +52,9 @@ public class MifosPlatformTenant {
public String getSchemaPassword() { public String getSchemaPassword() {
return schemaPassword; return schemaPassword;
} }
public String getTimezoneId() {
return timezoneId;
}
} }
@@ -0,0 +1,25 @@
package org.mifosplatform.infrastructure.core.service;
import org.joda.time.DateTimeZone;
import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.core.domain.MifosPlatformTenant;
public class DateUtils {
public static LocalDate getLocalDateOfTenant() {
LocalDate today = new LocalDate();
final MifosPlatformTenant tenant = ThreadLocalContextUtil.getTenant();
if (tenant != null) {
final DateTimeZone zone = DateTimeZone.forID(tenant.getTimezoneId());
if (zone != null) {
today = new LocalDate(zone);
}
}
return today;
}
}
@@ -34,7 +34,7 @@ public class JdbcTenantDetailsService implements TenantDetailsService {
try { try {
TenantMapper rm = new TenantMapper(); TenantMapper rm = new TenantMapper();
String sql = "select id, name, schema_name as schemaName, schema_server as schemaServer, schema_server_port as schemaServerPort, " String sql = "select id, name, schema_name as schemaName, schema_server as schemaServer, schema_server_port as schemaServerPort, "
+ " schema_username as schemaUsername, schema_password as schemaPassword " + " schema_username as schemaUsername, schema_password as schemaPassword , timezone_id as timezoneId "
+ " from tenants t where t.identifier like ?"; + " from tenants t where t.identifier like ?";
return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { tenantIdentifier }); return this.jdbcTemplate.queryForObject(sql, rm, new Object[] { tenantIdentifier });
@@ -55,8 +55,9 @@ public class JdbcTenantDetailsService implements TenantDetailsService {
String schemaServerPort = rs.getString("schemaServerPort"); String schemaServerPort = rs.getString("schemaServerPort");
String schemaUsername = rs.getString("schemaUsername"); String schemaUsername = rs.getString("schemaUsername");
String schemaPassword = rs.getString("schemaPassword"); String schemaPassword = rs.getString("schemaPassword");
String timezoneId =rs.getString("timezoneId");
return new MifosPlatformTenant(id, name, schemaName, schemaServer, schemaServerPort, schemaUsername, schemaPassword); return new MifosPlatformTenant(id, name, schemaName, schemaServer, schemaServerPort, schemaUsername, schemaPassword ,timezoneId);
} }
} }
} }
@@ -414,6 +414,14 @@ public class LoansApiResource {
result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest); result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
} }
if (is(commandParam, "assignloanofficer")) {
final CommandWrapper commandRequest = builder.assignLoanOfficer(loanId).build();
result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
} else if (is(commandParam, "unassignloanofficer")) {
final CommandWrapper commandRequest = builder.unassignLoanOfficer(loanId).build();
result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
}
if (result == null) { throw new UnrecognizedQueryParamException("command", commandParam); } if (result == null) { throw new UnrecognizedQueryParamException("command", commandParam); }
return this.toApiJsonSerializer.serialize(result); return this.toApiJsonSerializer.serialize(result);
@@ -445,30 +453,4 @@ public class LoansApiResource {
return this.loanOfficeTransferToApiJsonSerializer.serialize(settings, loanReassignmentData, RESPONSE_DATA_PARAMETERS); return this.loanOfficeTransferToApiJsonSerializer.serialize(settings, loanReassignmentData, RESPONSE_DATA_PARAMETERS);
} }
@POST
@Path("{loanId}/assign")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String assignLoanOfficer(@PathParam("loanId") final Long loanId, final String apiRequestBodyAsJson) {
final CommandWrapper commandRequest = new CommandWrapperBuilder().assignLoanOfficer(loanId).withJson(apiRequestBodyAsJson).build();
final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
return this.toApiJsonSerializer.serialize(result);
}
@POST
@Path("{loanId}/unassign")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public String unassignLoanOfficer(@PathParam("loanId") final Long loanId, final String apiRequestBodyAsJson) {
final CommandWrapper commandRequest = new CommandWrapperBuilder().unassignLoanOfficer(loanId).withJson(apiRequestBodyAsJson)
.build();
final CommandProcessingResult result = this.commandsSourceWritePlatformService.logCommandSource(commandRequest);
return this.toApiJsonSerializer.serialize(result);
}
} }
@@ -35,6 +35,7 @@ import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.DateTimeFormatter;
import org.mifosplatform.infrastructure.core.api.JsonCommand; import org.mifosplatform.infrastructure.core.api.JsonCommand;
import org.mifosplatform.infrastructure.core.domain.AbstractAuditableCustom; import org.mifosplatform.infrastructure.core.domain.AbstractAuditableCustom;
import org.mifosplatform.infrastructure.core.service.DateUtils;
import org.mifosplatform.infrastructure.security.service.RandomPasswordGenerator; import org.mifosplatform.infrastructure.security.service.RandomPasswordGenerator;
import org.mifosplatform.organisation.monetary.domain.ApplicationCurrency; import org.mifosplatform.organisation.monetary.domain.ApplicationCurrency;
import org.mifosplatform.organisation.monetary.domain.MonetaryCurrency; import org.mifosplatform.organisation.monetary.domain.MonetaryCurrency;
@@ -48,6 +49,7 @@ import org.mifosplatform.portfolio.loanaccount.command.LoanChargeCommand;
import org.mifosplatform.portfolio.loanaccount.exception.InvalidLoanStateTransitionException; import org.mifosplatform.portfolio.loanaccount.exception.InvalidLoanStateTransitionException;
import org.mifosplatform.portfolio.loanaccount.exception.InvalidLoanTransactionTypeException; import org.mifosplatform.portfolio.loanaccount.exception.InvalidLoanTransactionTypeException;
import org.mifosplatform.portfolio.loanaccount.exception.LoanOfficerAssignmentException; import org.mifosplatform.portfolio.loanaccount.exception.LoanOfficerAssignmentException;
import org.mifosplatform.portfolio.loanaccount.exception.LoanOfficerUnassignmentDateException;
import org.mifosplatform.portfolio.loanaccount.loanschedule.data.LoanScheduleData; import org.mifosplatform.portfolio.loanaccount.loanschedule.data.LoanScheduleData;
import org.mifosplatform.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData; import org.mifosplatform.portfolio.loanaccount.loanschedule.data.LoanSchedulePeriodData;
import org.mifosplatform.portfolio.loanaccount.loanschedule.domain.AprCalculator; import org.mifosplatform.portfolio.loanaccount.loanschedule.domain.AprCalculator;
@@ -1942,17 +1944,29 @@ public class Loan extends AbstractAuditableCustom<AppUser, Long> {
} }
public void removeLoanOfficer(final LocalDate updatedDate) { public void removeLoanOfficer(final LocalDate unassignDate) {
final LoanOfficerAssignmentHistory latestHistoryRecord = findLatestIncompleteHistoryRecord(); final LoanOfficerAssignmentHistory latestHistoryRecord = findLatestIncompleteHistoryRecord();
if (latestHistoryRecord != null) { if (latestHistoryRecord != null) {
latestHistoryRecord.updateEndDate(updatedDate); validateUnassignDate(latestHistoryRecord, unassignDate);
latestHistoryRecord.updateEndDate(unassignDate);
} }
this.loanofficer = null; this.loanofficer = null;
} }
private void validateUnassignDate(final LoanOfficerAssignmentHistory latestHistoryRecord, final LocalDate unassignDate) {
final LocalDate today = DateUtils.getLocalDateOfTenant();
if (latestHistoryRecord.getStartDate().isAfter(unassignDate)) {
throw new LoanOfficerUnassignmentDateException(this.getId(), this.getLoanOfficer().getId(), latestHistoryRecord.getStartDate(),
unassignDate);
} else if (unassignDate.isAfter(today)) { throw new LoanOfficerUnassignmentDateException(
this.getId()); }
}
private LoanOfficerAssignmentHistory findLatestIncompleteHistoryRecord() { private LoanOfficerAssignmentHistory findLatestIncompleteHistoryRecord() {
LoanOfficerAssignmentHistory latestRecordWithNoEndDate = null; LoanOfficerAssignmentHistory latestRecordWithNoEndDate = null;
@@ -67,7 +67,7 @@ public class LoanOfficerAssignmentHistory extends AbstractAuditableCustom<AppUse
return getStartDate().isEqual(matchingDate); return getStartDate().isEqual(matchingDate);
} }
private LocalDate getStartDate() { public LocalDate getStartDate() {
return new LocalDate(startDate); return new LocalDate(startDate);
} }
@@ -0,0 +1,19 @@
package org.mifosplatform.portfolio.loanaccount.exception;
import org.joda.time.LocalDate;
import org.mifosplatform.infrastructure.core.exception.AbstractPlatformDomainRuleException;
public class LoanOfficerUnassignmentDateException extends AbstractPlatformDomainRuleException {
public LoanOfficerUnassignmentDateException(final Long loanId, final Long loanofficerId, final LocalDate assignedDate,
final LocalDate unassignDate) {
super("error.msg.loan.unassign.loanofficer.invalid.pastedate", "Loan officer Unassign date(" + unassignDate
+ ") can not be less than assign date(" + assignedDate + ") for loan(" + loanId + ") with Loan Officer " + loanofficerId
+ ").", loanId);
}
public LoanOfficerUnassignmentDateException(final Long loanId) {
super("error.msg.loan.unassign.loanofficer.invalid.futuredate", "Unassign loan officer in future date is not supported.", loanId);
}
}
@@ -2,9 +2,9 @@ package org.mifosplatform.portfolio.loanaccount.exception;
import org.mifosplatform.infrastructure.core.exception.AbstractPlatformDomainRuleException; import org.mifosplatform.infrastructure.core.exception.AbstractPlatformDomainRuleException;
public class UnassignLoanOfficerException extends AbstractPlatformDomainRuleException { public class LoanOfficerUnassignmentException extends AbstractPlatformDomainRuleException {
public UnassignLoanOfficerException(final Long loanId) { public LoanOfficerUnassignmentException(final Long loanId) {
super("error.msg.loan.not.assigned.to.loan.officer", "Loan with identifier " + loanId super("error.msg.loan.not.assigned.to.loan.officer", "Loan with identifier " + loanId
+ " is not assigned to any loan officer.", loanId); + " is not assigned to any loan officer.", loanId);
} }
@@ -45,7 +45,7 @@ import org.mifosplatform.portfolio.loanaccount.domain.LoanTransactionRepository;
import org.mifosplatform.portfolio.loanaccount.exception.LoanNotFoundException; import org.mifosplatform.portfolio.loanaccount.exception.LoanNotFoundException;
import org.mifosplatform.portfolio.loanaccount.exception.LoanOfficerAssignmentException; import org.mifosplatform.portfolio.loanaccount.exception.LoanOfficerAssignmentException;
import org.mifosplatform.portfolio.loanaccount.exception.LoanTransactionNotFoundException; import org.mifosplatform.portfolio.loanaccount.exception.LoanTransactionNotFoundException;
import org.mifosplatform.portfolio.loanaccount.exception.UnassignLoanOfficerException; import org.mifosplatform.portfolio.loanaccount.exception.LoanOfficerUnassignmentException;
import org.mifosplatform.portfolio.loanaccount.serialization.LoanChargeCommandFromApiJsonDeserializer; import org.mifosplatform.portfolio.loanaccount.serialization.LoanChargeCommandFromApiJsonDeserializer;
import org.mifosplatform.portfolio.loanaccount.serialization.LoanStateTransitionCommandFromApiJsonDeserializer; import org.mifosplatform.portfolio.loanaccount.serialization.LoanStateTransitionCommandFromApiJsonDeserializer;
import org.mifosplatform.portfolio.loanaccount.serialization.LoanTransactionCommandFromApiJsonDeserializer; import org.mifosplatform.portfolio.loanaccount.serialization.LoanTransactionCommandFromApiJsonDeserializer;
@@ -719,7 +719,7 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
final Loan loan = retrieveLoanBy(loanId); final Loan loan = retrieveLoanBy(loanId);
if (loan.getLoanOfficer() == null) { throw new UnassignLoanOfficerException(loanId); } if (loan.getLoanOfficer() == null) { throw new LoanOfficerUnassignmentException(loanId); }
loan.removeLoanOfficer(dateOfLoanOfficerunAssigned); loan.removeLoanOfficer(dateOfLoanOfficerunAssigned);