adding missing schema for event

This commit is contained in:
José Salazar
2025-12-17 11:58:19 -05:00
parent 7bbc248ce1
commit d98b816cc7
5 changed files with 201 additions and 63 deletions

View File

@@ -4,11 +4,17 @@ mutation CreateStaff(
$vendorName: String,
$manager: String,
$contactNumber: String,
$phone:String # nuevo,
$email: String,
$department: StaffDepartment,
$hubLocation: String,
$eventLocation:String, # nuevo
$address:String, # nuevo
$city:String, # nuevo
$track: String,
$position: String,
$position2:String, # nuevo
$initial:String, # nuevo
$profileType: ProfileType,
$employmentType: EmploymentType,
$english: EnglishLevel,
@@ -16,7 +22,20 @@ mutation CreateStaff(
$rating: Float,
$reliabilityScore: Int,
$backgroundCheckStatus: BackgroundCheckStatus,
$notes: String
$notes: String,
$accountingComments:String, # nuevo
$shiftCoveragePercentage:Int, # nuevo
$cancellationCount:Int, # nuevo
$noShowCount:Int, # nuevo
$totalShifts:Int, # nuevo
$invoiced:Boolean, # nuevo
$englishRequired:Boolean, # nuevo
$checkIn:String, # nuevo
$scheduleDays:String, # nuevo
$replacedBy:String, # nuevo
$action:String, # nuevo
$ro:String, # nuevo
$mon:String, # nuevo
) @auth(level: USER) {
staff_insert(
data: {
@@ -25,11 +44,17 @@ mutation CreateStaff(
vendorName: $vendorName
manager: $manager
contactNumber: $contactNumber
phone:$phone
email: $email
department: $department
hubLocation: $hubLocation
eventLocation:$eventLocation
address:$address
city:$city
track: $track
position: $position
position2:$position2
initial:$initial
profileType: $profileType
employmentType: $employmentType
english: $english
@@ -38,6 +63,19 @@ mutation CreateStaff(
reliabilityScore: $reliabilityScore
backgroundCheckStatus: $backgroundCheckStatus
notes: $notes
accountingComments:$accountingComments
shiftCoveragePercentage:$shiftCoveragePercentage
cancellationCount:$cancellationCount
noShowCount:$noShowCount
totalShifts:$totalShifts
invoiced:$invoiced
englishRequired:$englishRequired
checkIn:$checkIn
scheduleDays:$scheduleDays
replacedBy:$replacedBy
action:$action
ro:$ro
mon:$mon
}
)
}
@@ -49,19 +87,38 @@ mutation UpdateStaff(
$vendorName: String,
$manager: String,
$contactNumber: String,
$phone: String,
$email: String,
$department: StaffDepartment,
$hubLocation: String,
$eventLocation: String,
$address: String,
$city: String,
$track: String,
$position: String,
$position2:String,
$initial:String,
$profileType: ProfileType,
$employmentType: EmploymentType,
$english: EnglishLevel,
$englishRequired:Boolean # nuevo
$rate: Float,
$rating: Float,
$reliabilityScore: Int,
$backgroundCheckStatus: BackgroundCheckStatus,
$notes: String
$notes: String,
$accountingComments:String,
$shiftCoveragePercentage:Int,
$cancellationCount:Int,
$noShowCount:Int,
$totalShifts:Int,
$invoiced:Boolean,
$checkIn:String,
$scheduleDays:String,
$replacedBy:String,
$action:String,
$ro:String,
$mon:String,
) @auth(level: USER) {
staff_update(
id: $id,
@@ -71,19 +128,38 @@ mutation UpdateStaff(
vendorName: $vendorName
manager: $manager
contactNumber: $contactNumber
phone:$phone # nuevo
email: $email
department: $department
hubLocation: $hubLocation
eventLocation:$eventLocation # nuevo
address:$address # nuevo
city:$city # nuevo
track: $track
position: $position
position2:$position2 # nuevo
initial:$initial # nuevo
profileType: $profileType
employmentType: $employmentType
english: $english
englishRequired:$englishRequired # nuevo
rate: $rate
rating: $rating
reliabilityScore: $reliabilityScore
backgroundCheckStatus: $backgroundCheckStatus
notes: $notes
accountingComments:$accountingComments # nuevo
shiftCoveragePercentage:$shiftCoveragePercentage # nuevo
cancellationCount:$cancellationCount # nuevo
noShowCount:$noShowCount # nuevo
totalShifts:$totalShifts # nuevo
invoiced:$invoiced # nuevo
checkIn:$checkIn # nuevo
scheduleDays:$scheduleDays # nuevo
replacedBy:$replacedBy # nuevo
action:$action # nuevo
ro:$ro # nuevo
mon:$mon # nuevo
}
)
}

View File

@@ -6,19 +6,38 @@ query listStaff @auth(level: USER) {
vendorName
manager
contactNumber
phone # nuevo
email
department
hubLocation
eventLocation # nuevo
address # nuevo
city # nuevo
track
position
position2
initial # nuevo
profileType
employmentType
english
englishRequired # nuevo
rate
rating
reliabilityScore
backgroundCheckStatus
notes
accountingComments # nuevo
shiftCoveragePercentage # nuevo
cancellationCount # nuevo
noShowCount # nuevo
totalShifts # nuevo
invoiced # nuevo
checkIn # nuevo
scheduleDays # nuevo
replacedBy # nuevo
action # nuevo
ro # nuevo
mon # nuevo
}
}
@@ -32,11 +51,17 @@ query getStaffById(
vendorName
manager
contactNumber
phone # nuevo
email
department
hubLocation
eventLocation # nuevo
address # nuevo
city # nuevo
track
position
position2 # nuevo
initial # nuevo
profileType
employmentType
english
@@ -45,6 +70,19 @@ query getStaffById(
reliabilityScore
backgroundCheckStatus
notes
accountingComments # nuevo
shiftCoveragePercentage # nuevo
cancellationCount # nuevo
noShowCount # nuevo
totalShifts # nuevo
invoiced # nuevo
englishRequired # nuevo
checkIn # nuevo
scheduleDays # nuevo
replacedBy # nuevo
action # nuevo
ro # nuevo
mon # nuevo
}
}
@@ -71,7 +109,10 @@ query filterStaff(
vendorId
vendorName
department
hubLocation
eventLocation # nuevo
position
position2
employmentType
english
rate
@@ -79,5 +120,6 @@ query filterStaff(
reliabilityScore
backgroundCheckStatus
notes
invoiced # nuevo
}
}

View File

@@ -42,16 +42,22 @@ enum BackgroundCheckStatus {
type Staff @table(name: "staffs") {
id: UUID! @default(expr: "uuidV4()")
employeeName: String! @col(name: "employee_name")
vendorId: String @col(name: "vendor_id") # vendor_id (FK lógica a Vendor.id)
employeeName: String! @col(name: "employee_name")
initial:String@col(name:"initial") # nuevo
vendorId: String @default(expr: "auth.uid")#String @col(name: "vendor_id") # vendor_id (FK lógica a Vendor.id)
vendorName: String @col(name: "vendor_name")
manager: String
contactNumber: String @col(name: "contact_number")
phone: String @col(name:"phone") # nuevo
email: String
department: StaffDepartment
hubLocation: String @col(name: "hub_location")
hubLocation: String @col(name: "hub_location")
eventLocation:String@col(name:"event_location") # nuevo
address:String@col(name:"address") # nuevo
city:String@col(name:"city") # nuevo
track: String
position: String
position2: String @col(name:"position_2") # nuevo
profileType: ProfileType @col(name: "profile_type")
employmentType: EmploymentType @col(name: "employment_type")
english: EnglishLevel
@@ -60,6 +66,19 @@ type Staff @table(name: "staffs") {
reliabilityScore: Int @col(name: "reliability_score")
backgroundCheckStatus: BackgroundCheckStatus @col(name: "background_check_status")
notes: String
accountingComments: String @col(name:"accounting_comments") # nuevo
shiftCoveragePercentage: Int @col(name:"shift_coverage_percentage") # nuevo
cancellationCount: Int @col(name:"cancellation_count") # nuevo
noShowCount: Int @col(name:"no_show_count") # nuevo
totalShifts: Int @col(name:"total_shifts") # nuevo
invoiced: Boolean @default(expr:"false") # nuevo
englishRequired: Boolean @col(name:"english_required")@default(expr:"false") # nuevo
checkIn: String @col(name:"check_in") # nuevo
scheduleDays: String @col(name:"schedule_days") # nuevo
replacedBy: String @col(name:"replaced_by") # nuevo
action: String # nuevo
ro: String # nuevo
mon: String # nuevo
createdDate: Timestamp @default(expr: "request.time")
updatedDate: Timestamp @default(expr: "request.time")
createdBy: String @default(expr: "auth.uid")

View File

@@ -365,7 +365,7 @@ const toCamel = (value) => {
}
if (value && typeof value === "object") {
return Object.entries(value).reduce((acc, [key, val]) => {
const camelKey = key.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
const camelKey = key.replace(/_([a-z0-9])/g, (_, c) => c.toUpperCase());
acc[camelKey] = toCamel(val);
return acc;
}, {});
@@ -382,6 +382,7 @@ const toSnake = (value) => {
return Object.entries(value).reduce((acc, [key, val]) => {
const snakeKey = key
.replace(/([A-Z])/g, "_$1")
.replace(/([a-z])([0-9]+)/g, "$1_$2")
.toLowerCase();
acc[snakeKey] = toSnake(val);
return acc;

View File

@@ -14,35 +14,35 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
employee_name: "",
manager: "",
contact_number: "",
//phone: "",
phone: "",
email: "", // Added email field
department: "",
hub_location: "",
//event_location: "",
event_location: "",
track: "",
//address: "",
//city: "",
address: "",
city: "",
position: "",
//position_2: "",
//initial: "",
position_2: "",
initial: "",
profile_type: "",
employment_type: "",
english: "",
//english_required: false,
//check_in: "",
//replaced_by: "",
//ro: "",
//mon: "",
//schedule_days: "",
//invoiced: false,
//action: "",
english_required: false,
check_in: "",
replaced_by: "",
ro: "",
mon: "",
schedule_days: "",
invoiced: false,
action: "",
notes: "",
//accounting_comments: "",
accounting_comments: "",
rating: 0,
//shift_coverage_percentage: 100,
//cancellation_count: 0,
//no_show_count: 0, // Added no_show_count field
//total_shifts: 0,
shift_coverage_percentage: 100,
cancellation_count: 0,
no_show_count: 0, // Added no_show_count field
total_shifts: 0,
reliability_score: 100
});
@@ -81,7 +81,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
/>
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="initial" className="text-slate-700 font-medium">Initials</Label>
<Input
id="initial"
@@ -90,7 +90,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
maxLength={3}
className="border-slate-200"
/>
</div> */}
</div>
<div className="space-y-2">
<Label htmlFor="position" className="text-slate-700 font-medium">Primary Skill</Label>
@@ -103,7 +103,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
/>
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="position_2" className="text-slate-700 font-medium">Secondary Skill</Label>
<Input
id="position_2"
@@ -112,7 +112,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
placeholder="e.g., Dishwasher, Prep Cook"
className="border-slate-200"
/>
</div> */}
</div>
<div className="space-y-2">
<Label htmlFor="profile_type" className="text-slate-700 font-medium">Skill Level</Label>
@@ -187,7 +187,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
/>
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="phone" className="text-slate-700 font-medium">Additional Phone</Label>
<Input
id="phone"
@@ -196,7 +196,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
onChange={(e) => handleChange('phone', e.target.value)}
className="border-slate-200"
/>
</div> */}
</div>
</div>
</CardContent>
</Card>
@@ -234,7 +234,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
/>
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="shift_coverage_percentage" className="text-slate-700 font-medium">Shift Coverage %</Label>
<Input
id="shift_coverage_percentage"
@@ -245,9 +245,9 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
onChange={(e) => handleChange('shift_coverage_percentage', parseInt(e.target.value) || 0)}
className="border-slate-200"
/>
</div> */}
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="cancellation_count" className="text-slate-700 font-medium">Cancellation Count</Label>
<Input
id="cancellation_count"
@@ -257,10 +257,10 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
onChange={(e) => handleChange('cancellation_count', parseInt(e.target.value) || 0)}
className="border-slate-200"
/>
</div> */}
</div>
{/* New No Show Count field */}
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="no_show_count" className="text-slate-700 font-medium">No Show Count</Label>
<Input
id="no_show_count"
@@ -270,10 +270,10 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
onChange={(e) => handleChange('no_show_count', parseInt(e.target.value) || 0)}
className="border-slate-200"
/>
</div> */}
</div>
{/* End new No Show Count field */}
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="total_shifts" className="text-slate-700 font-medium">Total Shifts</Label>
<Input
id="total_shifts"
@@ -283,9 +283,9 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
onChange={(e) => handleChange('total_shifts', parseInt(e.target.value) || 0)}
className="border-slate-200"
/>
</div> */}
</div>
{/* <div className="space-y-2 flex items-end">
<div className="space-y-2 flex items-end">
<div className="flex items-center space-x-2">
<Checkbox
id="invoiced"
@@ -296,7 +296,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
Invoiced
</Label>
</div>
</div> */}
</div>
</div>
</CardContent>
</Card>
@@ -326,7 +326,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
</Select>
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="city" className="text-slate-700 font-medium">City</Label>
<Input
id="city"
@@ -335,7 +335,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
placeholder="e.g., San Francisco"
className="border-slate-200"
/>
</div> */}
</div>
<div className="space-y-2">
<Label htmlFor="hub_location" className="text-slate-700 font-medium">Hub Location</Label>
@@ -347,7 +347,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
/>
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="event_location" className="text-slate-700 font-medium">Event Location</Label>
<Input
id="event_location"
@@ -355,7 +355,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
onChange={(e) => handleChange('event_location', e.target.value)}
className="border-slate-200"
/>
</div> */}
</div>
<div className="space-y-2">
<Label htmlFor="track" className="text-slate-700 font-medium">Track</Label>
@@ -367,7 +367,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
/>
</div>
{/* <div className="space-y-2 md:col-span-2">
<div className="space-y-2 md:col-span-2">
<Label htmlFor="address" className="text-slate-700 font-medium">Address</Label>
<Textarea
id="address"
@@ -376,7 +376,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
rows={2}
className="border-slate-200"
/>
</div> */}
</div>
</div>
</CardContent>
</Card>
@@ -402,7 +402,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
</Select>
</div>
{/* <div className="space-y-2 flex items-end">
<div className="space-y-2 flex items-end">
<div className="flex items-center space-x-2">
<Checkbox
id="english_required"
@@ -413,9 +413,9 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
English Required
</Label>
</div>
</div> */}
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="check_in" className="text-slate-700 font-medium">Last Check-in</Label>
<Input
id="check_in"
@@ -424,9 +424,9 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
onChange={(e) => handleChange('check_in', e.target.value)}
className="border-slate-200"
/>
</div> */}
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="schedule_days" className="text-slate-700 font-medium">Schedule Days</Label>
<Input
id="schedule_days"
@@ -435,7 +435,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
placeholder="e.g., Mon-Fri, 9AM-5PM"
className="border-slate-200"
/>
</div> */}
</div>
</div>
</CardContent>
</Card>
@@ -446,7 +446,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
</CardHeader>
<CardContent className="p-6">
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="replaced_by" className="text-slate-700 font-medium">Replaced By</Label>
<Input
id="replaced_by"
@@ -454,9 +454,9 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
onChange={(e) => handleChange('replaced_by', e.target.value)}
className="border-slate-200"
/>
</div> */}
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="action" className="text-slate-700 font-medium">Action</Label>
<Input
id="action"
@@ -464,9 +464,9 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
onChange={(e) => handleChange('action', e.target.value)}
className="border-slate-200"
/>
</div> */}
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="ro" className="text-slate-700 font-medium">R.O</Label>
<Input
id="ro"
@@ -474,9 +474,9 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
onChange={(e) => handleChange('ro', e.target.value)}
className="border-slate-200"
/>
</div> */}
</div>
{/* <div className="space-y-2">
<div className="space-y-2">
<Label htmlFor="mon" className="text-slate-700 font-medium">MON</Label>
<Input
id="mon"
@@ -484,7 +484,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
onChange={(e) => handleChange('mon', e.target.value)}
className="border-slate-200"
/>
</div> */}
</div>
<div className="space-y-2 md:col-span-2">
<Label htmlFor="notes" className="text-slate-700 font-medium">Notes</Label>
@@ -497,7 +497,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
/>
</div>
{/* <div className="space-y-2 md:col-span-2">
<div className="space-y-2 md:col-span-2">
<Label htmlFor="accounting_comments" className="text-slate-700 font-medium">Accounting Comments</Label>
<Textarea
id="accounting_comments"
@@ -506,7 +506,7 @@ export default function StaffForm({ staff, onSubmit, isSubmitting }) {
rows={3}
className="border-slate-200"
/>
</div> */}
</div>
</div>
</CardContent>
</Card>