fix
parent
3fa022f08f
commit
8c9f573230
@ -1,60 +1,132 @@
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from sqlalchemy import Delete, Select
|
from sqlalchemy import Delete, Select, text
|
||||||
from sqlalchemy.orm import joinedload, selectinload
|
from sqlalchemy.orm import joinedload, selectinload
|
||||||
|
|
||||||
from src.auth.service import CurrentUser
|
from src.auth.service import CurrentUser
|
||||||
from src.database.core import DbSession
|
from src.database.core import DbSession
|
||||||
from src.database.service import CommonParameters, search_filter_sort_paginate
|
from src.database.service import CommonParameters, search_filter_sort_paginate
|
||||||
|
|
||||||
from .model import MasterActivity
|
|
||||||
from .schema import ActivityMaster, ActivityMasterCreate
|
|
||||||
|
|
||||||
|
# async def get(*, db_session: DbSession, activity_id: str) -> Optional[ActivityMaster]:
|
||||||
async def get(*, db_session: DbSession, activity_id: str) -> Optional[ActivityMaster]:
|
# """Returns a document based on the given document id."""
|
||||||
"""Returns a document based on the given document id."""
|
# result = await db_session.get(MasterActivity, activity_id)
|
||||||
result = await db_session.get(MasterActivity, activity_id)
|
# return result
|
||||||
return result
|
|
||||||
|
|
||||||
|
async def get_all(db_session: DbSession):
|
||||||
async def get_all(common: CommonParameters):
|
"""
|
||||||
query = Select(MasterActivity)
|
Get all spare parts with their latest PR and PO information.
|
||||||
|
|
||||||
results = await search_filter_sort_paginate(model=query, **common)
|
Args:
|
||||||
|
db_session: SQLAlchemy database session
|
||||||
return results
|
assetnum: Optional asset number filter (not used in this query but kept for compatibility)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of dictionaries containing spare part information
|
||||||
async def create(*, db_session: DbSession, activty_in: ActivityMasterCreate):
|
"""
|
||||||
activity = MasterActivity(**activty_in.model_dump())
|
# Define the SQL query
|
||||||
db_session.add(activity)
|
query = text("""
|
||||||
await db_session.commit()
|
WITH latest_prs AS (
|
||||||
return activity
|
SELECT DISTINCT ON (pl.item_num)
|
||||||
|
pl.item_num,
|
||||||
|
h.num as pr_number,
|
||||||
async def update(
|
h.issue_date as pr_issue_date,
|
||||||
*,
|
h.status as pr_status,
|
||||||
db_session: DbSession,
|
pl.qty_ordered as pr_qty_ordered
|
||||||
activity: MasterActivity,
|
FROM public.maximo_sparepart_pr_po h
|
||||||
activity_in: ActivityMasterCreate
|
JOIN public.maximo_sparepart_pr_po_line pl ON h.num = pl.num
|
||||||
):
|
WHERE h.type = 'PR'
|
||||||
"""Updates a document."""
|
AND h.issue_date IS NOT NULL
|
||||||
data = activity_in.model_dump()
|
AND h.num LIKE 'K%'
|
||||||
|
ORDER BY pl.item_num, TO_DATE(h.issue_date, 'YYYY-MM-DD') DESC
|
||||||
update_data = activity_in.model_dump(exclude_defaults=True)
|
),
|
||||||
|
po_details AS (
|
||||||
for field in data:
|
SELECT
|
||||||
if field in update_data:
|
h.num as po_number,
|
||||||
setattr(activity, field, update_data[field])
|
pl.item_num,
|
||||||
|
h.estimated_arrival_date,
|
||||||
await db_session.commit()
|
pl.qty_received,
|
||||||
|
pl.qty_ordered
|
||||||
return activity
|
FROM public.maximo_sparepart_pr_po h
|
||||||
|
JOIN public.maximo_sparepart_pr_po_line pl ON h.num = pl.num
|
||||||
|
WHERE h.type = 'PO'
|
||||||
async def delete(*, db_session: DbSession, activity_id: str):
|
)
|
||||||
"""Deletes a document."""
|
SELECT
|
||||||
activity = await db_session.get(MasterActivity, activity_id)
|
pr.item_num,
|
||||||
await db_session.delete(activity)
|
MAX(l.description) as description,
|
||||||
await db_session.commit()
|
COALESCE(MAX(i.curbaltotal), 0) as current_balance_total,
|
||||||
|
pr.pr_number,
|
||||||
|
pr.pr_issue_date,
|
||||||
|
pr.pr_qty_ordered,
|
||||||
|
CASE
|
||||||
|
WHEN po.po_number IS NOT NULL THEN 'YES'
|
||||||
|
ELSE 'NO'
|
||||||
|
END as po_exists,
|
||||||
|
COALESCE(po.qty_received, 0) as po_qty_received,
|
||||||
|
COALESCE(po.qty_ordered, 0) as po_qty_ordered,
|
||||||
|
COALESCE(po.estimated_arrival_date, '') as po_estimated_arrival_date
|
||||||
|
FROM latest_prs pr
|
||||||
|
LEFT JOIN public.maximo_sparepart_pr_po_line l ON pr.item_num = l.item_num
|
||||||
|
LEFT JOIN public.maximo_inventory i ON pr.item_num = i.itemnum
|
||||||
|
LEFT JOIN po_details po ON po.po_number = pr.pr_number AND po.item_num = pr.item_num
|
||||||
|
GROUP BY pr.item_num, pr.pr_number, pr.pr_issue_date, pr.pr_qty_ordered,
|
||||||
|
po.po_number, po.qty_received, po.qty_ordered, po.estimated_arrival_date
|
||||||
|
ORDER BY pr.item_num
|
||||||
|
""")
|
||||||
|
|
||||||
|
# Execute the query
|
||||||
|
result = await db_session.execute(query)
|
||||||
|
|
||||||
|
# Fetch all results and convert to list of dictionaries
|
||||||
|
spare_parts = []
|
||||||
|
for row in result:
|
||||||
|
spare_parts.append({
|
||||||
|
"item_num": row.item_num,
|
||||||
|
"description": row.description,
|
||||||
|
"current_balance_total": float(row.current_balance_total) if row.current_balance_total is not None else 0.0,
|
||||||
|
"pr_number": row.pr_number,
|
||||||
|
"pr_issue_date": row.pr_issue_date,
|
||||||
|
"pr_qty_ordered": float(row.pr_qty_ordered) if row.pr_qty_ordered is not None else 0.0,
|
||||||
|
"po_exists": row.po_exists,
|
||||||
|
"po_qty_received": float(row.po_qty_received) if row.po_qty_received is not None else 0.0,
|
||||||
|
"po_qty_ordered": float(row.po_qty_ordered) if row.po_qty_ordered is not None else 0.0,
|
||||||
|
"po_estimated_arrival_date": row.po_estimated_arrival_date
|
||||||
|
})
|
||||||
|
|
||||||
|
return spare_parts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# async def create(*, db_session: DbSession, activty_in: ActivityMasterCreate):
|
||||||
|
# activity = MasterActivity(**activty_in.model_dump())
|
||||||
|
# db_session.add(activity)
|
||||||
|
# await db_session.commit()
|
||||||
|
# return activity
|
||||||
|
|
||||||
|
|
||||||
|
# async def update(
|
||||||
|
# *,
|
||||||
|
# db_session: DbSession,
|
||||||
|
# activity: MasterActivity,
|
||||||
|
# activity_in: ActivityMasterCreate
|
||||||
|
# ):
|
||||||
|
# """Updates a document."""
|
||||||
|
# data = activity_in.model_dump()
|
||||||
|
|
||||||
|
# update_data = activity_in.model_dump(exclude_defaults=True)
|
||||||
|
|
||||||
|
# for field in data:
|
||||||
|
# if field in update_data:
|
||||||
|
# setattr(activity, field, update_data[field])
|
||||||
|
|
||||||
|
# await db_session.commit()
|
||||||
|
|
||||||
|
# return activity
|
||||||
|
|
||||||
|
|
||||||
|
# async def delete(*, db_session: DbSession, activity_id: str):
|
||||||
|
# """Deletes a document."""
|
||||||
|
# activity = await db_session.get(MasterActivity, activity_id)
|
||||||
|
# await db_session.delete(activity)
|
||||||
|
# await db_session.commit()
|
||||||
|
|||||||
Loading…
Reference in New Issue