yamori

有給休暇計算を主目的とした簡易勤怠管理システム

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
// SPDX-FileCopyrightText: 2024 Shota FUJI <pockawoooh@gmail.com>
// SPDX-License-Identifier: AGPL-3.0-only

import { createRandomBytes, packDate } from "../helpers";

import type { Migration } from "./types";

export const v6: Migration = async (_db, transaction) => {
	const store = transaction.objectStore("workspaces");

	for await (const cursor of store.iterate()) {
		const defs = cursor.value.leaveDefinitions;

		await cursor.update({
			...cursor.value,
			// 労働基準法 第三十九条 第十項 で定義されている「出勤したものとみなす」休業に
			// ついてはどんな会社でも必ず必須となるため一律で登録する。
			leaveDefinitions: [
				{
					id:
						defs.find(
							(def) => def.createdBy === "system" && def.displayName === "育児休業",
						)?.id || `lv-${self.crypto.randomUUID()}`,
					displayName: "育児休業",
					updateKey: createRandomBytes(),
					createdBy: "system",
					revisions: [
						{
							id: `lr-${self.crypto.randomUUID()}`,
							// 法律第七十九号
							startAtPackedDate: packDate({
								year: 1994,
								month: 4,
								day: 1,
							}),
							snapshot: {
								isWorkerDeemedToBeWorked: true,
							},
						},
					],
				},
				{
					id:
						defs.find(
							(def) => def.createdBy === "system" && def.displayName === "介護休業",
						)?.id || `lv-${self.crypto.randomUUID()}`,
					displayName: "介護休業",
					updateKey: createRandomBytes(),
					createdBy: "system",
					revisions: [
						{
							id: `lr-${self.crypto.randomUUID()}`,
							// 法律第百七号
							startAtPackedDate: packDate({
								year: 1995,
								month: 10,
								day: 1,
							}),
							snapshot: {
								isWorkerDeemedToBeWorked: true,
							},
						},
					],
				},
				{
					id:
						defs.find(
							(def) => def.createdBy === "system" && def.displayName === "産前産後休業",
						)?.id || `lv-${self.crypto.randomUUID()}`,
					displayName: "産前産後休業",
					updateKey: createRandomBytes(),
					createdBy: "system",
					revisions: [
						{
							id: `lr-${self.crypto.randomUUID()}`,
							// 最初からある (法律第四十九号)
							// 三十九条の施行年月日は調べてもわからなかったので早い方 (遅い方は11/1)
							// ただぶっちゃけ昔のことだからシステム運用的にはどっちでもいい。
							// こんな昔のデータを入れるとしたら付与日数なんかも過去の計算式を用意
							// する必要があるため、あくまでも記録・教育的な側面のデータ。
							startAtPackedDate: packDate({
								year: 1947,
								month: 9,
								day: 1,
							}),
							snapshot: {
								isWorkerDeemedToBeWorked: true,
							},
						},
					],
				},
				...defs.filter((def) => def.createdBy !== "system"),
			],
		});
	}
};