feat(server): add POST /attachment/location mirroring product shelving
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -198,3 +198,62 @@ def configure_attachment(db: Session, req: AttachmentConfigRequest) -> dict:
|
||||
|
||||
db.commit()
|
||||
return get_attachment_status(db, zongpai_no)
|
||||
|
||||
|
||||
def _is_transit_location(location_code: str) -> bool:
|
||||
return location_code.startswith("TRANS-")
|
||||
|
||||
|
||||
def _is_temp_storage_location(location_code: str) -> bool:
|
||||
return location_code.startswith("B")
|
||||
|
||||
|
||||
def register_attachment_location(db: Session, req) -> FinishedGoodsAttachmentLocation:
|
||||
zongpai_no = _validate_zongpai(req.zongpai_no)
|
||||
|
||||
# Category must exist
|
||||
if not _category_name_map(db, [req.category_id]):
|
||||
raise CategoryNotFoundError(req.category_id)
|
||||
|
||||
existing = (
|
||||
db.query(FinishedGoodsAttachmentLocation)
|
||||
.filter(
|
||||
FinishedGoodsAttachmentLocation.zongpai_no == zongpai_no,
|
||||
FinishedGoodsAttachmentLocation.category_id == req.category_id,
|
||||
)
|
||||
.first()
|
||||
)
|
||||
if existing:
|
||||
if _is_transit_location(existing.location_code):
|
||||
raise AlreadyOffShelfAttachmentError(
|
||||
location_code=existing.location_code,
|
||||
registered_at=existing.created_at.isoformat(),
|
||||
)
|
||||
|
||||
target_is_transit = _is_transit_location(req.location_code)
|
||||
target_is_temp = _is_temp_storage_location(req.location_code)
|
||||
current_is_temp = _is_temp_storage_location(existing.location_code)
|
||||
|
||||
if target_is_transit or (not current_is_temp and target_is_temp):
|
||||
previous_location = existing.location_code
|
||||
existing.location_code = req.location_code
|
||||
existing.created_at = datetime.now()
|
||||
db.commit()
|
||||
db.refresh(existing)
|
||||
existing.previous_location = previous_location
|
||||
return existing
|
||||
|
||||
raise DuplicateAttachmentLocationError(
|
||||
location_code=existing.location_code,
|
||||
registered_at=existing.created_at.isoformat(),
|
||||
)
|
||||
|
||||
record = FinishedGoodsAttachmentLocation(
|
||||
zongpai_no=zongpai_no,
|
||||
category_id=req.category_id,
|
||||
location_code=req.location_code,
|
||||
)
|
||||
db.add(record)
|
||||
db.commit()
|
||||
db.refresh(record)
|
||||
return record
|
||||
|
||||
Reference in New Issue
Block a user