Commit eceb34fc by Ooh-Ao

equirment

parent cd8b71cc
...@@ -22,6 +22,7 @@ async def create_equipment(equipment_data: EquipmentCreate, db: AsyncSession): ...@@ -22,6 +22,7 @@ async def create_equipment(equipment_data: EquipmentCreate, db: AsyncSession):
new_equipment = Equipment( new_equipment = Equipment(
equipmentName=equipment_data.equipmentName, equipmentName=equipment_data.equipmentName,
description=equipment_data.description, description=equipment_data.description,
quantity=equipment_data.quantity,
is_returnable=equipment_data.is_returnable is_returnable=equipment_data.is_returnable
) )
db.add(new_equipment) db.add(new_equipment)
......
# myproject/models/equipment.py # myproject/models/equipment.py
import uuid import uuid
from sqlalchemy import Column, String, Integer ,Boolean,ForeignKey from sqlalchemy import Column, String, Integer ,Boolean,ForeignKey,DateTime
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.sql import func from sqlalchemy.sql import func
from datetime import datetime from datetime import datetime
...@@ -21,9 +21,10 @@ class Equipment(Base): ...@@ -21,9 +21,10 @@ class Equipment(Base):
quantity = Column(Integer, nullable=False) quantity = Column(Integer, nullable=False)
is_returnable = Column(Boolean, nullable=False, default=True) is_returnable = Column(Boolean, nullable=False, default=True)
categoryId = Column(UUID(as_uuid=True), ForeignKey("equipment_category.categoryId"), nullable=True) categoryId = Column(UUID(as_uuid=True), ForeignKey("equipment_category.categoryId"), nullable=True)
picture = Column(String)
# ถ้าต้องการวันเวลาสร้าง/แก้ไข # ถ้าต้องการวันเวลาสร้าง/แก้ไข
# createdAt = Column(DateTime, nullable=False, server_default=func.now()) createdAt = Column(DateTime, nullable=False, default=datetime.utcnow)
# updatedAt = Column(DateTime, nullable=False, server_default=func.now(), onupdate=func.now()) updatedAt = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
# Relationship เชื่อมไปยัง ProjectEquipment # Relationship เชื่อมไปยัง ProjectEquipment
project_equipment = relationship( project_equipment = relationship(
......
...@@ -2,11 +2,12 @@ ...@@ -2,11 +2,12 @@
from pydantic import BaseModel from pydantic import BaseModel
from typing import Optional from typing import Optional
from uuid import UUID from uuid import UUID
from datetime import datetime
class EquipmentBase(BaseModel): class EquipmentBase(BaseModel):
equipmentName: str equipmentName: str
description: Optional[str] = None description: Optional[str] = None
quantity: int quantity: int = 0
is_returnable: bool = True is_returnable: bool = True
class EquipmentCreate(EquipmentBase): class EquipmentCreate(EquipmentBase):
...@@ -17,6 +18,8 @@ class EquipmentUpdate(EquipmentBase): ...@@ -17,6 +18,8 @@ class EquipmentUpdate(EquipmentBase):
class EquipmentResponse(EquipmentBase): class EquipmentResponse(EquipmentBase):
equipmentId: UUID equipmentId: UUID
createdAt: datetime
updatedAt: datetime
class Config: class Config:
orm_mode = True from_attributes = True
\ No newline at end of file \ No newline at end of file
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
</a> </a>
<div> <div>
<input [(ngModel)]='searchTerm' class="form-control form-control" type="text" <input [(ngModel)]='searchTerm' class="form-control form-control" type="text"
placeholder="{{ 'ค้นหาข้อมูลพนักงาน' | translate}}" aria-label=".form-control-sm example"> placeholder="{{ 'ค้นหาอุปกรณ์' | translate}}" aria-label=".form-control-sm example">
</div> </div>
<!-- <a href="javascript:void(0);" class="ti-btn ti-btn-primary-full !py-1 !px-2" aria-expanded="false"> <!-- <a href="javascript:void(0);" class="ti-btn ti-btn-primary-full !py-1 !px-2" aria-expanded="false">
เรียงตาม<i class="ri-arrow-down-s-line align-middle ms-1 inline-block"></i> เรียงตาม<i class="ri-arrow-down-s-line align-middle ms-1 inline-block"></i>
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
</div> --> </div> -->
<div class="xxl:col-span-2 xl:col-span-3 lg:col-span-4 md:col-span-4 sm:col-span-6 col-span-12"> <div class="xxl:col-span-2 xl:col-span-3 lg:col-span-4 md:col-span-4 sm:col-span-6 col-span-12">
<div class="box custom-box"> <div class="box custom-box">
<img src="./assets/images/nft-images/18.png" class="!rounded-t-md" alt="..."> <img [src]="item.getPicture()" class="!rounded-t-md" alt="...">
<div class="flex items-center justify-between nft-like-section w-full px-4"> <div class="flex items-center justify-between nft-like-section w-full px-4">
<!-- <div class="flex-grow"> <!-- <div class="flex-grow">
<button type="button" aria-label="button" <button type="button" aria-label="button"
...@@ -164,14 +164,29 @@ ...@@ -164,14 +164,29 @@
</div> </div>
</div> </div>
<div class="xl:col-span-6 col-span-12"> <div class="xl:col-span-6 col-span-12">
<label for="deal-name" class="form-label">ชื่อ</label> <label for="deal-name" class="form-label">ชื่ออุปกรณ์</label>
<input type="text" class="form-control" id="deal-name" placeholder="ชื่อ" <input type="text" class="form-control" id="deal-name" placeholder="ชื่ออุปกรณ์"
[(ngModel)]="selectModel.equipmentName"> [(ngModel)]="selectModel.equipmentName">
</div> </div>
<div class="xl:col-span-6 col-span-12"> <div class="xl:col-span-6 col-span-12">
<label for="deal-name" class="form-label">จำนวน</label>
<input type="text" class="form-control" id="deal-name" placeholder="จำนวน"
[(ngModel)]="selectModel.quantity">
</div>
<div class="xl:col-span-12 col-span-12">
<label for="deal-lead-score" class="form-label">รายละเอียด</label> <label for="deal-lead-score" class="form-label">รายละเอียด</label>
<input type="text" class="form-control" id="deal-lead-score" placeholder="นามสกุล" <!-- <input type="text" class="form-control" id="deal-lead-score" placeholder="รายละเอียด"
[(ngModel)]="selectModel.description"> [(ngModel)]="selectModel.description"> -->
<textarea class="form-control" id="job-description" [(ngModel)]="selectModel.description"
rows="4"></textarea>
</div>
<div class="xl:col-span-12 col-span-12">
<div class="form-check form-check-lg flex items-center">
<input class="form-check-input" type="checkbox" value="" id="checkebox-lg" [(checked)]="selectModel.is_returnable">
<label class="form-check-label" for="checkebox-lg">
ตรวจสอบการคืน
</label>
</div>
</div> </div>
......
...@@ -3,30 +3,28 @@ import { BaseModel } from "./base.model"; ...@@ -3,30 +3,28 @@ import { BaseModel } from "./base.model";
import { environment } from "../../../environments/environment"; import { environment } from "../../../environments/environment";
export class EquipmentModel extends BaseModel { export class EquipmentModel extends BaseModel {
equipment_id: string; equipmentId: string;
picture: string; picture: string;
equipmentName: string; equipmentName: string;
description?: string; description?: string;
quantity: number; quantity: number;
is_returnable: boolean; is_returnable: boolean;
location?: string; createdAt: string;
created_at: string; updatedAt: string;
updated_at: string;
constructor(data?: Partial<EquipmentModel>, translateService?: TranslateService) { constructor(data?: Partial<EquipmentModel>, translateService?: TranslateService) {
super(data, translateService); super(data, translateService);
this.picture = data?.picture ?? ''; this.picture = data?.picture ?? '';
this.equipment_id = data?.equipment_id ?? ''; this.equipmentId = data?.equipmentId!
this.equipmentName = data?.equipmentName ?? ''; this.equipmentName = data?.equipmentName ?? '';
this.description = data?.description ?? ''; this.description = data?.description ?? '';
this.quantity = data?.quantity ?? 0; this.quantity = data?.quantity ?? 0;
this.is_returnable = data?.is_returnable ?? true; this.is_returnable = data?.is_returnable ?? true;
this.location = data?.location ?? ''; this.createdAt = data?.createdAt ?? new Date().toISOString();
this.created_at = data?.created_at ?? new Date().toISOString(); this.updatedAt = data?.updatedAt ?? new Date().toISOString();
this.updated_at = data?.updated_at ?? new Date().toISOString();
} }
getPicture(): string { getPicture(): string {
return this.picture ? environment.baseUrl + '/images/' + this.picture : './assets/images/faces/9.jpg' return this.picture ? environment.baseUrl + '/images/' + this.picture : './assets/images/faces/111.jpg'
} }
} }
...@@ -39,14 +39,14 @@ export class EquipmentService { ...@@ -39,14 +39,14 @@ export class EquipmentService {
return this.http.put<{ return this.http.put<{
"message": string, "message": string,
"user": EquipmentModel "user": EquipmentModel
}>(this.apiBaseUrl + "/" + body.equipment_id, new EquipmentModel(body)); }>(this.apiBaseUrl + "/" + body.equipmentId, new EquipmentModel(body));
} }
delete(body: EquipmentModel) { delete(body: EquipmentModel) {
return this.http.delete<{ return this.http.delete<{
"message": string, "message": string,
"user": EquipmentModel "user": EquipmentModel
}>(this.apiBaseUrl + "/" + body.equipment_id); }>(this.apiBaseUrl + "/" + body.equipmentId);
} }
......
<!doctype html> <!doctype html>
<html lang="en" dir="ltr" data-nav-layout="vertical" class="" data-header-styles="color" data-menu-styles="color" <html lang="en" dir="ltr" data-nav-layout="vertical" class="" data-header-styles="color" data-menu-styles="color"
data-vertical-style="overlay" data-page-style="modern"> data-vertical-style="overlay" data-page-style="regular">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment