@worknice/utils 0.6.2-rc.3 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,6 +21,7 @@ const calculateLeaveHours = ({
21
21
  }
22
22
  const start = Temporal.PlainDate.from(startDate);
23
23
  const end = Temporal.PlainDate.from(endDate);
24
+ const reference = Temporal.PlainDate.from(referenceDate);
24
25
  const totalDays = end.since(start).days + 1;
25
26
  let totalHours = 0;
26
27
  let hoursBreakdown = "";
@@ -32,7 +33,8 @@ const calculateLeaveHours = ({
32
33
  hoursBreakdown += `
33
34
  - ${dateString}: Public Holiday`;
34
35
  } else {
35
- const patternIndex = currentDate.since(referenceDate).days % workPattern.length;
36
+ const daysSinceReference = currentDate.since(reference).days;
37
+ const patternIndex = (daysSinceReference % workPattern.length + workPattern.length) % workPattern.length;
36
38
  const hours = workPattern[patternIndex];
37
39
  totalHours += hours;
38
40
  hoursBreakdown += `
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/leave-requests/calculateLeaveHours.ts"],"sourcesContent":["import { Temporal } from \"temporal-polyfill\";\n\ntype Date = string | Temporal.PlainDate;\n\nconst validateWorkPattern = (workPattern: number[]): string | null => {\n if (workPattern.length === 0) {\n return \"Work pattern cannot be empty\";\n }\n if (workPattern.length % 7 !== 0) {\n return \"Work pattern length must be a multiple of 7 days\";\n }\n return null;\n};\n\nexport const calculateLeaveHours = ({\n startDate,\n endDate,\n workPattern,\n referenceDate,\n holidays,\n}: {\n startDate: Date;\n endDate: Date;\n workPattern: number[];\n referenceDate: Date;\n holidays: Date[];\n}) => {\n const validationError = validateWorkPattern(workPattern);\n if (validationError) {\n throw new Error(`Invalid work pattern: ${validationError}.`);\n }\n\n const start = Temporal.PlainDate.from(startDate);\n const end = Temporal.PlainDate.from(endDate);\n\n const totalDays = end.since(start).days + 1;\n\n let totalHours = 0;\n let hoursBreakdown = \"\";\n\n for (let i = 0; i < totalDays; i++) {\n const currentDate = start.add({ days: i });\n const dateString = currentDate.toString();\n const isHoliday = holidays.includes(dateString);\n\n if (isHoliday) {\n hoursBreakdown += `\\n - ${dateString}: Public Holiday`;\n } else {\n const patternIndex = currentDate.since(referenceDate).days % workPattern.length;\n const hours = workPattern[patternIndex] as number;\n totalHours += hours;\n hoursBreakdown += `\\n - ${dateString}: ${hours} hours`;\n }\n }\n\n return { totalHours, hoursBreakdown };\n};\n"],"mappings":"AAAA,SAAS,gBAAgB;AAIzB,MAAM,sBAAsB,CAAC,gBAAyC;AACpE,MAAI,YAAY,WAAW,GAAG;AAC5B,WAAO;AAAA,EACT;AACA,MAAI,YAAY,SAAS,MAAM,GAAG;AAChC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,MAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AACJ,QAAM,kBAAkB,oBAAoB,WAAW;AACvD,MAAI,iBAAiB;AACnB,UAAM,IAAI,MAAM,yBAAyB,eAAe,GAAG;AAAA,EAC7D;AAEA,QAAM,QAAQ,SAAS,UAAU,KAAK,SAAS;AAC/C,QAAM,MAAM,SAAS,UAAU,KAAK,OAAO;AAE3C,QAAM,YAAY,IAAI,MAAM,KAAK,EAAE,OAAO;AAE1C,MAAI,aAAa;AACjB,MAAI,iBAAiB;AAErB,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,UAAM,cAAc,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;AACzC,UAAM,aAAa,YAAY,SAAS;AACxC,UAAM,YAAY,SAAS,SAAS,UAAU;AAE9C,QAAI,WAAW;AACb,wBAAkB;AAAA,KAAQ,UAAU;AAAA,IACtC,OAAO;AACL,YAAM,eAAe,YAAY,MAAM,aAAa,EAAE,OAAO,YAAY;AACzE,YAAM,QAAQ,YAAY,YAAY;AACtC,oBAAc;AACd,wBAAkB;AAAA,KAAQ,UAAU,KAAK,KAAK;AAAA,IAChD;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,eAAe;AACtC;","names":[]}
1
+ {"version":3,"sources":["../../src/leave-requests/calculateLeaveHours.ts"],"sourcesContent":["import { Temporal } from \"temporal-polyfill\";\n\ntype Date = string | Temporal.PlainDate;\n\nconst validateWorkPattern = (workPattern: number[]): string | null => {\n if (workPattern.length === 0) {\n return \"Work pattern cannot be empty\";\n }\n if (workPattern.length % 7 !== 0) {\n return \"Work pattern length must be a multiple of 7 days\";\n }\n return null;\n};\n\nexport const calculateLeaveHours = ({\n startDate,\n endDate,\n workPattern,\n referenceDate,\n holidays,\n}: {\n startDate: Date;\n endDate: Date;\n workPattern: number[];\n referenceDate: Date;\n holidays: Date[];\n}) => {\n const validationError = validateWorkPattern(workPattern);\n if (validationError) {\n throw new Error(`Invalid work pattern: ${validationError}.`);\n }\n\n const start = Temporal.PlainDate.from(startDate);\n const end = Temporal.PlainDate.from(endDate);\n const reference = Temporal.PlainDate.from(referenceDate);\n\n const totalDays = end.since(start).days + 1;\n\n let totalHours = 0;\n let hoursBreakdown = \"\";\n\n for (let i = 0; i < totalDays; i++) {\n const currentDate = start.add({ days: i });\n const dateString = currentDate.toString();\n const isHoliday = holidays.includes(dateString);\n\n if (isHoliday) {\n hoursBreakdown += `\\n - ${dateString}: Public Holiday`;\n } else {\n const daysSinceReference = currentDate.since(reference).days;\n const patternIndex =\n ((daysSinceReference % workPattern.length) + workPattern.length) % workPattern.length;\n const hours = workPattern[patternIndex] as number;\n totalHours += hours;\n hoursBreakdown += `\\n - ${dateString}: ${hours} hours`;\n }\n }\n\n return { totalHours, hoursBreakdown };\n};\n"],"mappings":"AAAA,SAAS,gBAAgB;AAIzB,MAAM,sBAAsB,CAAC,gBAAyC;AACpE,MAAI,YAAY,WAAW,GAAG;AAC5B,WAAO;AAAA,EACT;AACA,MAAI,YAAY,SAAS,MAAM,GAAG;AAChC,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,MAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAMM;AACJ,QAAM,kBAAkB,oBAAoB,WAAW;AACvD,MAAI,iBAAiB;AACnB,UAAM,IAAI,MAAM,yBAAyB,eAAe,GAAG;AAAA,EAC7D;AAEA,QAAM,QAAQ,SAAS,UAAU,KAAK,SAAS;AAC/C,QAAM,MAAM,SAAS,UAAU,KAAK,OAAO;AAC3C,QAAM,YAAY,SAAS,UAAU,KAAK,aAAa;AAEvD,QAAM,YAAY,IAAI,MAAM,KAAK,EAAE,OAAO;AAE1C,MAAI,aAAa;AACjB,MAAI,iBAAiB;AAErB,WAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAClC,UAAM,cAAc,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;AACzC,UAAM,aAAa,YAAY,SAAS;AACxC,UAAM,YAAY,SAAS,SAAS,UAAU;AAE9C,QAAI,WAAW;AACb,wBAAkB;AAAA,KAAQ,UAAU;AAAA,IACtC,OAAO;AACL,YAAM,qBAAqB,YAAY,MAAM,SAAS,EAAE;AACxD,YAAM,gBACF,qBAAqB,YAAY,SAAU,YAAY,UAAU,YAAY;AACjF,YAAM,QAAQ,YAAY,YAAY;AACtC,oBAAc;AACd,wBAAkB;AAAA,KAAQ,UAAU,KAAK,KAAK;AAAA,IAChD;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,eAAe;AACtC;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@worknice/utils",
3
- "version": "0.6.2-rc.3",
3
+ "version": "0.6.2",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "type": "module",