printer receipt

This commit is contained in:
efrilm
2025-11-04 22:13:15 +07:00
parent a87b62ca9f
commit 1b24bae23a
32 changed files with 4177 additions and 75 deletions
@@ -0,0 +1,95 @@
import 'package:bloc/bloc.dart';
import 'package:dartz/dartz.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:injectable/injectable.dart';
import '../../../common/function/app_function.dart';
import '../../../domain/printer/printer.dart';
part 'printer_form_event.dart';
part 'printer_form_state.dart';
part 'printer_form_bloc.freezed.dart';
@injectable
class PrinterFormBloc extends Bloc<PrinterFormEvent, PrinterFormState> {
final IPrinterRepository _printerRepository;
PrinterFormBloc(this._printerRepository) : super(PrinterFormState.initial()) {
on<PrinterFormEvent>(_onPrinterFormEvent);
}
Future<void> _onPrinterFormEvent(
PrinterFormEvent event,
Emitter<PrinterFormState> emit,
) {
return event.map(
codeChanged: (e) async {
emit(state.copyWith(code: e.code));
},
nameChanged: (e) async {
emit(state.copyWith(name: e.name));
},
addressChanged: (e) async {
emit(state.copyWith(address: e.address));
},
typeChanged: (e) async {
emit(state.copyWith(type: e.type));
},
paperChanged: (e) async {
emit(state.copyWith(paper: e.paper));
},
created: (e) async {
Either<PrinterFailure, Unit> failureOrPrinter;
emit(state.copyWith(isCreating: true, failureOrCreateSuccess: none()));
final request = Printer(
id: generateRandomNumber(),
code: state.code,
name: state.name,
address: state.address,
paper: state.paper,
type: state.type,
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
);
failureOrPrinter = await _printerRepository.createPrinter(request);
emit(
state.copyWith(
isCreating: false,
failureOrCreateSuccess: optionOf(failureOrPrinter),
),
);
},
updated: (e) async {
Either<PrinterFailure, Unit> failureOrPrinter;
emit(state.copyWith(isUpdate: true, failureOrUpdateSuccess: none()));
final request = Printer(
id: generateRandomNumber(),
code: state.code,
name: state.name,
address: state.address,
paper: state.paper,
type: state.type,
createdAt: DateTime.now(),
updatedAt: DateTime.now(),
);
failureOrPrinter = await _printerRepository.updatePrinter(
request,
e.id,
);
emit(
state.copyWith(
isUpdate: false,
failureOrUpdateSuccess: optionOf(failureOrPrinter),
),
);
},
);
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,13 @@
part of 'printer_form_bloc.dart';
@freezed
class PrinterFormEvent with _$PrinterFormEvent {
const factory PrinterFormEvent.codeChanged(String code) = _CodeChanged;
const factory PrinterFormEvent.nameChanged(String name) = _NameChanged;
const factory PrinterFormEvent.addressChanged(String address) =
_AddressChanged;
const factory PrinterFormEvent.typeChanged(String type) = _TypeChanged;
const factory PrinterFormEvent.paperChanged(String paper) = _PaperChanged;
const factory PrinterFormEvent.created() = _Created;
const factory PrinterFormEvent.updated(int id) = _Updated;
}
@@ -0,0 +1,26 @@
part of 'printer_form_bloc.dart';
@freezed
class PrinterFormState with _$PrinterFormState {
factory PrinterFormState({
required String code,
required String name,
required String address,
required String paper,
required String type,
required Option<Either<PrinterFailure, Unit>> failureOrCreateSuccess,
required Option<Either<PrinterFailure, Unit>> failureOrUpdateSuccess,
@Default(false) isCreating,
@Default(false) isUpdate,
}) = _PrinterFormState;
factory PrinterFormState.initial() => PrinterFormState(
code: '',
name: '',
address: '',
paper: '58',
type: 'Bluetooth',
failureOrCreateSuccess: none(),
failureOrUpdateSuccess: none(),
);
}