Commit 9b06365e by Ooh-Ao

api หน้าจอ

parent 318d51ac
...@@ -24,7 +24,8 @@ async def create_equipment(equipment_data: EquipmentCreate, db: AsyncSession): ...@@ -24,7 +24,8 @@ async def create_equipment(equipment_data: EquipmentCreate, db: AsyncSession):
description=equipment_data.description, description=equipment_data.description,
quantity=equipment_data.quantity, quantity=equipment_data.quantity,
is_returnable=equipment_data.is_returnable, is_returnable=equipment_data.is_returnable,
picture=equipment_data.picture picture=equipment_data.picture,
serialNumber=equipment_data.serialNumber
) )
db.add(new_equipment) db.add(new_equipment)
try: try:
...@@ -44,6 +45,8 @@ async def update_equipment(equipment_id: UUID, equipment_data: EquipmentUpdate, ...@@ -44,6 +45,8 @@ async def update_equipment(equipment_id: UUID, equipment_data: EquipmentUpdate,
eq_db.equipmentName = equipment_data.equipmentName eq_db.equipmentName = equipment_data.equipmentName
if equipment_data.description is not None: if equipment_data.description is not None:
eq_db.description = equipment_data.description eq_db.description = equipment_data.description
if equipment_data.serialNumber is not None:
eq_db.serialNumber = equipment_data.serialNumber
if equipment_data.is_returnable is not None: if equipment_data.is_returnable is not None:
eq_db.is_returnable = equipment_data.is_returnable eq_db.is_returnable = equipment_data.is_returnable
if equipment_data.picture is not None: if equipment_data.picture is not None:
......
...@@ -12,8 +12,12 @@ async def create_project(db: AsyncSession, project_in: ProjectCreate): ...@@ -12,8 +12,12 @@ async def create_project(db: AsyncSession, project_in: ProjectCreate):
new_project = Project( new_project = Project(
project_name=project_in.project_name, project_name=project_in.project_name,
project_desc=project_in.project_desc, project_desc=project_in.project_desc,
project_code=project_in.project_code,
start_date=project_in.start_date, start_date=project_in.start_date,
end_date=project_in.end_date end_date=project_in.end_date,
picture=project_in.picture,
contact=project_in.contact,
responsible=project_in.responsible
) )
try: try:
db.add(new_project) db.add(new_project)
...@@ -45,6 +49,8 @@ async def update_project(db: AsyncSession, project_id: UUID, project_in: Project ...@@ -45,6 +49,8 @@ async def update_project(db: AsyncSession, project_id: UUID, project_in: Project
project_db.project_name = project_in.project_name project_db.project_name = project_in.project_name
if project_in.project_desc is not None: if project_in.project_desc is not None:
project_db.project_desc = project_in.project_desc project_db.project_desc = project_in.project_desc
if project_in.project_code is not None:
project_db.project_code = project_in.project_code
if project_in.start_date is not None: if project_in.start_date is not None:
project_db.start_date = project_in.start_date project_db.start_date = project_in.start_date
if project_in.end_date is not None: if project_in.end_date is not None:
...@@ -52,6 +58,12 @@ async def update_project(db: AsyncSession, project_id: UUID, project_in: Project ...@@ -52,6 +58,12 @@ async def update_project(db: AsyncSession, project_id: UUID, project_in: Project
if project_in.start_date and project_in.end_date < project_in.start_date: if project_in.start_date and project_in.end_date < project_in.start_date:
raise HTTPException(status_code=400, detail="end_date cannot be before start_date") raise HTTPException(status_code=400, detail="end_date cannot be before start_date")
project_db.end_date = project_in.end_date project_db.end_date = project_in.end_date
if project_in.picture is not None:
project_db.picture = project_in.picture
if project_in.responsible is not None:
project_db.responsible = project_in.responsible
if project_in.contact is not None:
project_db.contact = project_in.contact
try: try:
await db.commit() await db.commit()
......
...@@ -17,6 +17,7 @@ class Equipment(Base): ...@@ -17,6 +17,7 @@ class Equipment(Base):
default=uuid.uuid4 default=uuid.uuid4
) )
equipmentName = Column(String(255), nullable=False) equipmentName = Column(String(255), nullable=False)
serialNumber = Column(String(255), nullable=False)
description = Column(String, nullable=True) description = Column(String, nullable=True)
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)
......
# myproject/models/project.py # myproject/models/project.py
import uuid import uuid
from sqlalchemy import Column, String, Text, Date from sqlalchemy import Column, String, Text, Date ,DateTime
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from ..config.database import Base from ..config.database import Base
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from datetime import datetime
class Project(Base): class Project(Base):
__tablename__ = 'project' # ชื่อตาราง __tablename__ = 'project' # ชื่อตาราง
...@@ -15,9 +15,14 @@ class Project(Base): ...@@ -15,9 +15,14 @@ class Project(Base):
) )
project_name = Column(String(255), nullable=False) project_name = Column(String(255), nullable=False)
project_desc = Column(Text, nullable=True) project_desc = Column(Text, nullable=True)
project_code = Column(Text, nullable=True)
start_date = Column(Date, nullable=True) start_date = Column(Date, nullable=True)
end_date = Column(Date, nullable=True) end_date = Column(Date, nullable=True)
picture = Column(String)
responsible = Column(String)
contact = Column(String)
createdAt = Column(DateTime, nullable=False, default=datetime.utcnow)
updatedAt = Column(DateTime, nullable=False, default=datetime.utcnow, onupdate=datetime.utcnow)
# Relationship เชื่อมไปยัง ProjectMember และ ProjectEquipment # Relationship เชื่อมไปยัง ProjectMember และ ProjectEquipment
project_member = relationship( project_member = relationship(
"ProjectMember", "ProjectMember",
......
...@@ -7,6 +7,7 @@ from datetime import datetime ...@@ -7,6 +7,7 @@ from datetime import datetime
class EquipmentBase(BaseModel): class EquipmentBase(BaseModel):
equipmentName: str equipmentName: str
description: Optional[str] = None description: Optional[str] = None
serialNumber: Optional[str] = None
picture: Optional[str] = None picture: Optional[str] = None
quantity: int = 0 quantity: int = 0
is_returnable: bool = True is_returnable: bool = True
......
...@@ -8,7 +8,11 @@ from datetime import date ...@@ -8,7 +8,11 @@ from datetime import date
class ProjectBase(BaseModel): class ProjectBase(BaseModel):
project_name: str project_name: str
project_desc: Optional[str] = None project_desc: Optional[str] = None
project_code: Optional[str] = None
responsible: Optional[str] = None
contact: Optional[str] = None
start_date: Optional[date] = None start_date: Optional[date] = None
picture: Optional[str] = None
end_date: Optional[date] = None end_date: Optional[date] = None
class ProjectCreate(ProjectBase): class ProjectCreate(ProjectBase):
......
...@@ -83,10 +83,13 @@ ...@@ -83,10 +83,13 @@
</div> </div>
<div class="box-body"> <div class="box-body">
<!-- <p class="mb-0 text-white nft-auction-time"> <div class="flex items-center mb-4">
04hrs : 24m : 38s <div>
</p> --> <p class="text-[.9375rem] font-semibold mb-2"><a href="javascript:void(0);">{{item.equipmentName}}</a></p>
<p class="text-[.9375rem] font-semibold mb-2"><a href="javascript:void(0);">{{item.equipmentName}}</a></p> <p class="text-[0.75rem] text-[#8c9097] dark:text-white/50 mb-0">S/N# {{item.serialNumber}}</p>
</div>
</div>
<div class="flex flex-wrap align-itesm-center justify-between"> <div class="flex flex-wrap align-itesm-center justify-between">
<div class="font-semibold mb-1">รายละเอียด :</div> <div class="font-semibold mb-1">รายละเอียด :</div>
<p class="text-[#8c9097] dark:text-white/50 mb-3">{{item.description}}</p> <p class="text-[#8c9097] dark:text-white/50 mb-3">{{item.description}}</p>
...@@ -164,6 +167,12 @@ ...@@ -164,6 +167,12 @@
<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-12 col-span-12">
<label for="deal-name" class="form-label">S/N</label>
<input type="text" class="form-control" id="deal-name" placeholder="S/N"
[(ngModel)]="selectModel.serialNumber">
</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="number" class="form-control" id="deal-name" placeholder="จำนวน" <input type="number" class="form-control" id="deal-name" placeholder="จำนวน"
...@@ -218,13 +227,20 @@ ...@@ -218,13 +227,20 @@
<div class="grid grid-cols-12 gap-4"> <div class="grid grid-cols-12 gap-4">
<div class="xl:col-span-12 col-span-12"> <div class="xl:col-span-12 col-span-12">
<img [src]="selectModel.getPicture()" class="!rounded-t-md" alt="..." <img [src]="selectModel.getPicture()" class="!rounded-t-md" alt="..."
style="width: 100%;height: auto;object-fit: cover;"> style="width: 100%;height: auto;object-fit: cover;">
</div> </div>
<div class="xl:col-span-12 col-span-12"> <div class="xl:col-span-12 col-span-12">
<label for="deal-name" class="form-label">ชื่ออุปกรณ์</label> <label for="deal-name" class="form-label">ชื่ออุปกรณ์</label>
<input readonly type="text" class="form-control" id="deal-name" placeholder="ชื่ออุปกรณ์" <input readonly type="text" class="form-control" id="deal-name" placeholder="ชื่ออุปกรณ์"
[(ngModel)]="selectModel.equipmentName"> [(ngModel)]="selectModel.equipmentName">
</div> </div>
<div class="xl:col-span-12 col-span-12">
<label for="deal-name" class="form-label">S/N</label>
<input readonly type="text" class="form-control" id="deal-name" placeholder="S/N"
[(ngModel)]="selectModel.serialNumber">
</div>
<div class="xl:col-span-12 col-span-12"> <div class="xl:col-span-12 col-span-12">
<label for="deal-name" class="form-label">จำนวน</label> <label for="deal-name" class="form-label">จำนวน</label>
<input type="number" class="form-control" id="deal-name" placeholder="จำนวน" <input type="number" class="form-control" id="deal-name" placeholder="จำนวน"
...@@ -233,8 +249,8 @@ ...@@ -233,8 +249,8 @@
<div class="xl:col-span-12 col-span-12"> <div class="xl:col-span-12 col-span-12">
<div class="form-check form-check-lg flex items-center"> <div class="form-check form-check-lg flex items-center">
<label for="product-availability" class="form-label">ประเภท</label> <label for="product-availability" class="form-label">ประเภท</label>
<select class="form-control" data-trigger name="product-availability" id="product-availability" [(ngModel)]="selectStock.action" <select class="form-control" data-trigger name="product-availability" id="product-availability"
placeholder="Select"> [(ngModel)]="selectStock.action" placeholder="Select">
<option value="INBOUND" selected>In Stock</option> <option value="INBOUND" selected>In Stock</option>
<option value="OUTBOUND">Out Of Stock</option> <option value="OUTBOUND">Out Of Stock</option>
<!-- <option value="OUTBOUND">Out Of Stock</option> --> <!-- <option value="OUTBOUND">Out Of Stock</option> -->
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
</th> </th>
<th scope="col" class="text-start">โครงการ</th> <th scope="col" class="text-start">โครงการ</th>
<!-- <th scope="col" class="text-start">รหัสย่อโครงการ</th> --> <!-- <th scope="col" class="text-start">รหัสย่อโครงการ</th> -->
<th scope="col" class="text-start">ข้อมูลโครงการ</th> <th scope="col" class="text-start">รายละเอียดโครงการ</th>
<!-- <th scope="col" class="text-start">{{"Status" | translate}}</th> <!-- <th scope="col" class="text-start">{{"Status" | translate}}</th>
<th scope="col" class="text-start">{{"Update Date" | translate}}</th> --> <th scope="col" class="text-start">{{"Update Date" | translate}}</th> -->
<th scope="col" class="text-start"></th> <th scope="col" class="text-start"></th>
...@@ -176,8 +176,7 @@ ...@@ -176,8 +176,7 @@
<div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out"> <div class="hs-overlay-open:mt-7 ti-modal-box mt-0 ease-out">
<div class="ti-modal-content"> <div class="ti-modal-content">
<div class="ti-modal-header"> <div class="ti-modal-header">
<h6 class="modal-title text-[1rem] font-semibold text-defaulttextcolor" id="mail-ComposeLabel">{{ 'Create' | <h6 class="modal-title text-[1rem] font-semibold text-defaulttextcolor" id="mail-ComposeLabel">{{ 'รายละเอียดโครงการ' }}
translate }} {{ 'Company' | translate }}
</h6> </h6>
<button type="button" class="hs-dropdown-toggle !text-[1rem] !font-semibold !text-defaulttextcolor" <button type="button" class="hs-dropdown-toggle !text-[1rem] !font-semibold !text-defaulttextcolor"
data-hs-overlay="#modal-detail" #closeModal> data-hs-overlay="#modal-detail" #closeModal>
...@@ -210,22 +209,35 @@ ...@@ -210,22 +209,35 @@
</div> </div>
</div> </div>
<!-- <div class="xl:col-span-12 col-span-12"> <div class="xl:col-span-12 col-span-12">
<label for="deal-title" class="form-label">{{'รหัสโครงการ' | translate}}</label> <label for="deal-title" class="form-label">{{'รหัสโครงการ' | translate}}</label>
<input type="text" class="form-control" id="deal-title" placeholder="" <input type="text" class="form-control" id="deal-title" placeholder=""
[(ngModel)]="selectModel.companyCode"> [(ngModel)]="selectModel.project_code">
<div class="text-danger" *ngIf="!selectModel.companyCode"> <div class="text-danger" *ngIf="!selectModel.project_code">
{{'Please fill in information' | translate}} {{'Please fill in information' | translate}}
</div> </div>
</div> --> </div>
<div class="xl:col-span-12 col-span-12">
<label for="deal-title" class="form-label">{{'ผู้รับผิดชอบ' | translate}}</label>
<input type="text" class="form-control" id="deal-title" placeholder=""
[(ngModel)]="selectModel.responsible">
</div>
<div class="xl:col-span-12 col-span-12"> <div class="xl:col-span-12 col-span-12">
<label for="deal-title" class="form-label">{{'ข้อมูลโครงการ' | translate}}</label> <label for="deal-title" class="form-label">{{'การติดต่อ' | translate}}</label>
<input type="text" class="form-control" id="deal-title" placeholder="" <input type="text" class="form-control" id="deal-title" placeholder=""
[(ngModel)]="selectModel.contact">
</div>
<div class="xl:col-span-12 col-span-12">
<label for="deal-title" class="form-label">{{'รายละเอียดโครงการ' | translate}}</label>
<textarea class="form-control" id="job-description" [(ngModel)]="selectModel.project_desc" rows="4"></textarea>
<!-- <input type="text" class="form-control" id="deal-title" placeholder=""
[(ngModel)]="selectModel.project_desc"> [(ngModel)]="selectModel.project_desc">
<div class="text-danger" *ngIf="!selectModel.project_desc"> <div class="text-danger" *ngIf="!selectModel.project_desc">
{{'Please fill in information' | translate}} {{'Please fill in information' | translate}}
</div> </div> -->
</div> </div>
<!-- <div class="xl:col-span-12 col-span-12"> <!-- <div class="xl:col-span-12 col-span-12">
......
...@@ -6,6 +6,7 @@ export class EquipmentModel extends BaseModel { ...@@ -6,6 +6,7 @@ export class EquipmentModel extends BaseModel {
equipmentId: string; equipmentId: string;
picture: string; picture: string;
equipmentName: string; equipmentName: string;
serialNumber: string;
description?: string; description?: string;
quantity: number; quantity: number;
is_returnable: boolean; is_returnable: boolean;
...@@ -17,6 +18,7 @@ export class EquipmentModel extends BaseModel { ...@@ -17,6 +18,7 @@ export class EquipmentModel extends BaseModel {
this.picture = data?.picture ?? ''; this.picture = data?.picture ?? '';
this.equipmentId = data?.equipmentId! this.equipmentId = data?.equipmentId!
this.equipmentName = data?.equipmentName ?? ''; this.equipmentName = data?.equipmentName ?? '';
this.serialNumber = data?.serialNumber ?? '';
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;
......
...@@ -5,6 +5,9 @@ export class ProjectModel { ...@@ -5,6 +5,9 @@ export class ProjectModel {
picture: string; picture: string;
project_name: string; project_name: string;
project_desc?: string; project_desc?: string;
project_code?: string;
responsible?: string;
contact?: string;
start_date: string; start_date: string;
end_date: string; end_date: string;
// created_at: string; // created_at: string;
...@@ -14,7 +17,10 @@ export class ProjectModel { ...@@ -14,7 +17,10 @@ export class ProjectModel {
this.picture = data?.picture ?? ''; this.picture = data?.picture ?? '';
this.projectId = data?.projectId this.projectId = data?.projectId
this.project_name = data?.project_name ?? ''; this.project_name = data?.project_name ?? '';
this.project_code = data?.project_code ?? '';
this.responsible = data?.responsible ?? '';
this.project_desc = data?.project_desc ?? ''; this.project_desc = data?.project_desc ?? '';
this.contact = data?.contact ?? '';
this.start_date = data?.start_date! this.start_date = data?.start_date!
this.end_date = data?.end_date! this.end_date = data?.end_date!
// this.created_at = data?.created_at! // this.created_at = data?.created_at!
......
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