This commit is contained in:
admin
2026-01-22 01:16:54 +09:00
parent 86020ada5c
commit 3d91356877
16 changed files with 1862 additions and 494 deletions

View File

@@ -31,22 +31,52 @@ def create_salary_setting(setting: schemas.SalarySettingCreate):
if not cur.fetchone():
raise HTTPException(status_code=404, detail="従業員が見つかりません")
# employment_insurance_eligible カラムが存在するか確認
cur.execute(
"""
INSERT INTO salary_settings (
employee_id, base_salary, hourly_rate, employment_type,
payment_type, commute_allowance, other_allowance,
valid_from, valid_to
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
RETURNING *
""",
(
setting.employee_id, setting.base_salary, setting.hourly_rate,
setting.employment_type, setting.payment_type,
setting.commute_allowance, setting.other_allowance,
setting.valid_from, setting.valid_to
),
"SELECT 1 FROM information_schema.columns WHERE table_name='salary_settings' AND column_name='employment_insurance_eligible'"
)
has_employment_insurance_column = cur.fetchone()
if has_employment_insurance_column:
# カラムが存在する場合
cur.execute(
"""
INSERT INTO salary_settings (
employee_id, base_salary, hourly_rate, employment_type,
payment_type, commute_allowance, other_allowance,
employment_insurance_eligible,
valid_from, valid_to
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
RETURNING *
""",
(
setting.employee_id, setting.base_salary, setting.hourly_rate,
setting.employment_type, setting.payment_type,
setting.commute_allowance, setting.other_allowance,
setting.employment_insurance_eligible,
setting.valid_from, setting.valid_to
),
)
else:
# カラムが存在しない場合(互換性維持)
cur.execute(
"""
INSERT INTO salary_settings (
employee_id, base_salary, hourly_rate, employment_type,
payment_type, commute_allowance, other_allowance,
valid_from, valid_to
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
RETURNING *
""",
(
setting.employee_id, setting.base_salary, setting.hourly_rate,
setting.employment_type, setting.payment_type,
setting.commute_allowance, setting.other_allowance,
setting.valid_from, setting.valid_to
),
)
print("[DEBUG] employment_insurance_eligible カラムがまだ存在しないため、除外しました")
result = cur.fetchone()
conn.commit()
return result
@@ -100,6 +130,25 @@ def update_salary_setting(setting_id: int, setting: schemas.SalarySettingUpdate)
if not update_data:
raise HTTPException(status_code=400, detail="更新するデータがありません")
# employment_insurance_eligible はまだデータベースに存在しない可能性があるため、除外
if 'employment_insurance_eligible' in update_data:
try:
with get_connection() as conn:
with conn.cursor() as cur:
cur.execute(
"SELECT 1 FROM information_schema.columns WHERE table_name='salary_settings' AND column_name='employment_insurance_eligible'"
)
column_exists = cur.fetchone()
if not column_exists:
update_data.pop('employment_insurance_eligible')
print("[DEBUG] employment_insurance_eligible カラムがまだ存在しないため、除外しました")
except Exception as e:
print(f"[DEBUG] カラム確認エラー: {e}")
update_data.pop('employment_insurance_eligible', None)
if not update_data:
raise HTTPException(status_code=400, detail="更新するデータがありません")
set_clause = ", ".join([f"{key} = %s" for key in update_data.keys()])
values = list(update_data.values()) + [setting_id]
@@ -385,7 +434,9 @@ def import_income_tax_table(file: UploadFile = File(...), tax_year: int = None):
income_from = None
income_to = None
for col_idx in range(min(3, sheet.ncols)):
# B列col 1とC列col 2から月収範囲を読み込む
# A列は順序番号なので、B列から開始
for col_idx in range(1, min(3, sheet.ncols)):
cell_value = sheet.cell_value(row_idx, col_idx)
if cell_value:
val = str(cell_value).replace(',', '').replace('', '').strip()
@@ -526,7 +577,9 @@ def import_income_tax_table(file: UploadFile = File(...), tax_year: int = None):
income_from = None
income_to = None
for i in range(min(3, len(row))):
# B列col 1とC列col 2から月収範囲を読み込む
# A列は順序番号なので、B列から開始
for i in range(1, min(3, len(row))):
if row[i].value:
val = str(row[i].value).replace(',', '').replace('', '').strip()
try:
@@ -715,6 +768,28 @@ def calculate_income_tax(monthly_income: Decimal, dependents_count: int = 0, tar
}
@router.delete("/income-tax/year/{year}")
def delete_income_tax_by_year(year: int):
"""指定された年度の所得税率表データをすべて削除"""
try:
with get_connection() as conn:
with conn.cursor() as cur:
cur.execute(
"DELETE FROM income_tax_table WHERE tax_year = %s",
(year,)
)
deleted_count = cur.rowcount
conn.commit()
return {
"message": f"{year}年度のデータを削除しました",
"year": year,
"deleted_count": deleted_count
}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
# ========================================
# 社会保険料上限設定管理
# ========================================