barcode_scanner/lib/backend/schema/stock_picking/stock_picking_model.dart
mandreshope d09d8ace8c feat: Implements visual status for pickings
Introduces an `isDone` extension property for stock picking records to simplify status checks.

Enhances the `StockPickingCard` to visually represent the picking's completion status with a distinct icon and color (green for 'done', grey for 'in progress'), improving clarity at a glance. Information row values are now consistently uppercased.

Conditionally displays scan-related actions (QuickActionComponent and FloatingActionButton) in the reception details page, making them available only when the picking is not yet completed. This guides users by preventing interactions on finished operations.
2025-07-30 10:49:51 +03:00

107 lines
3.8 KiB
Dart

import 'package:freezed_annotation/freezed_annotation.dart';
part 'stock_picking_model.freezed.dart';
part 'stock_picking_model.g.dart';
@freezed
abstract class StockPickingResponseModel with _$StockPickingResponseModel {
const factory StockPickingResponseModel({
String? jsonrpc,
int? id,
StockPickingResultModel? result,
}) = _StockPickingResponseModel;
factory StockPickingResponseModel.fromJson(Map<String, dynamic> json) =>
_$StockPickingResponseModelFromJson(json);
}
@freezed
abstract class StockPickingResultModel with _$StockPickingResultModel {
const factory StockPickingResultModel({
int? length,
List<StockPickingRecordModel>? records,
}) = _StockPickingResultModel;
factory StockPickingResultModel.fromJson(Map<String, dynamic> json) =>
_$StockPickingResultModelFromJson(json);
}
@freezed
abstract class StockPickingRecordModel with _$StockPickingRecordModel {
const factory StockPickingRecordModel({
int? id,
@JsonKey(name: 'company_id') StockPickingCompanyModel? companyId,
@JsonKey(name: 'priority') String? priority,
@JsonKey(name: 'name') String? name,
@JsonKey(name: 'partner_id') StockPickingPartnerModel? partnerId,
@JsonKey(name: 'location_dest_id')
StockPickingLocationModel? locationDestId,
@JsonKey(name: 'location_id') StockPickingLocationModel? locationId,
@JsonKey(name: 'user_id') dynamic userId,
@JsonKey(name: 'scheduled_date') String? scheduledDate,
@JsonKey(name: 'picking_type_code') String? pickingTypeCode,
@JsonKey(name: 'products_availability_state')
dynamic productsAvailabilityState,
@JsonKey(name: 'products_availability') dynamic productsAvailability,
@JsonKey(name: 'date_deadline') String? dateDeadline,
@JsonKey(name: 'date_done') dynamic dateDone,
@JsonKey(name: 'origin') String? origin,
@JsonKey(name: 'backorder_id') dynamic backorderId,
@JsonKey(name: 'picking_type_id') StockPickingTypeModel? pickingTypeId,
@JsonKey(name: 'state') String? state,
@JsonKey(name: 'activity_exception_decoration')
dynamic activityExceptionDecoration,
@JsonKey(name: 'activity_exception_icon') dynamic activityExceptionIcon,
@JsonKey(name: 'json_popover') dynamic jsonPopover,
}) = _StockPickingRecordModel;
factory StockPickingRecordModel.fromJson(Map<String, dynamic> json) =>
_$StockPickingRecordModelFromJson(json);
}
@freezed
abstract class StockPickingCompanyModel with _$StockPickingCompanyModel {
const factory StockPickingCompanyModel({@JsonKey(name: 'id') int? id}) =
_StockPickingCompanyModel;
factory StockPickingCompanyModel.fromJson(Map<String, dynamic> json) =>
_$StockPickingCompanyModelFromJson(json);
}
@freezed
abstract class StockPickingPartnerModel with _$StockPickingPartnerModel {
const factory StockPickingPartnerModel({
int? id,
@JsonKey(name: 'display_name') String? displayName,
}) = _StockPickingPartnerModel;
factory StockPickingPartnerModel.fromJson(Map<String, dynamic> json) =>
_$StockPickingPartnerModelFromJson(json);
}
@freezed
abstract class StockPickingLocationModel with _$StockPickingLocationModel {
const factory StockPickingLocationModel({
int? id,
@JsonKey(name: 'complete_name') String? completeName,
}) = _StockPickingLocationModel;
factory StockPickingLocationModel.fromJson(Map<String, dynamic> json) =>
_$StockPickingLocationModelFromJson(json);
}
@freezed
abstract class StockPickingTypeModel with _$StockPickingTypeModel {
const factory StockPickingTypeModel({
int? id,
@JsonKey(name: 'display_name') String? displayName,
}) = _StockPickingTypeModel;
factory StockPickingTypeModel.fromJson(Map<String, dynamic> json) =>
_$StockPickingTypeModelFromJson(json);
}
extension StockPickingRecordModelExt on StockPickingRecordModel {
bool get isDone => state == "done";
}