feat: scan book to add to sell

This commit is contained in:
alzalia1 2025-08-15 12:51:36 +02:00
parent 3a013c829f
commit 07c7c98edb
11 changed files with 238 additions and 31 deletions

View file

@ -1,18 +1,34 @@
import 'package:flutter/widgets.dart';
import 'package:mobile_scanner/mobile_scanner.dart';
import 'package:seshat/data/repositories/bal_repository.dart';
import 'package:seshat/data/repositories/book_instance_repository.dart';
import 'package:seshat/data/repositories/book_repository.dart';
import 'package:seshat/data/repositories/owner_repository.dart';
import 'package:seshat/domain/models/bal.dart';
import 'package:seshat/domain/models/book.dart';
import 'package:seshat/domain/models/book_instance.dart';
import 'package:seshat/domain/models/book_stack.dart';
import 'package:seshat/domain/models/owner.dart';
import 'package:seshat/utils/command.dart';
import 'package:seshat/utils/result.dart';
class SellViewModel extends ChangeNotifier {
SellViewModel({required BalRepository balRepository})
: _balRepository = balRepository {
SellViewModel({
required BalRepository balRepository,
required BookInstanceRepository bookInstanceRepository,
required BookRepository bookRepository,
required OwnerRepository ownerRepository,
}) : _balRepository = balRepository,
_bookInstanceRepository = bookInstanceRepository,
_bookRepository = bookRepository,
_ownerRepository = ownerRepository {
load = Command0(_load)..execute();
}
final BalRepository _balRepository;
final BookInstanceRepository _bookInstanceRepository;
final BookRepository _bookRepository;
final OwnerRepository _ownerRepository;
bool _showScan = false;
bool get showScan => _showScan;
@ -27,28 +43,26 @@ class SellViewModel extends ChangeNotifier {
* ===============================
*/
final List<BookInstance> _scannedBooks = [];
List<BookInstance> get scannedBooks => _scannedBooks;
void scanBook(BarcodeCapture barcode) {
final addedBook = BookInstance(
balId: 5,
bookId: 5,
id: _scannedBooks.length,
ownerId: 5,
price: 5,
available: true,
);
_scannedBooks.add(addedBook);
final List<BookStack> _soldBooks = [];
List<BookStack> get soldBooks => _soldBooks;
final List<BookStack> _scannedBooks = [];
List<BookStack> get scannedBooks => _scannedBooks;
bool isScanLoaded = false;
void sellBook(BookStack addedBook) {
_soldBooks.add(addedBook);
notifyListeners();
}
void sendSell() {
_scannedBooks.clear();
_soldBooks.clear();
notifyListeners();
}
void deleteBook(int id) {
_scannedBooks.removeWhere((book) => book.id == id);
_soldBooks.removeWhere((book) => book.instance.id == id);
notifyListeners();
}
@ -61,6 +75,11 @@ class SellViewModel extends ChangeNotifier {
switch (result) {
case Ok():
for (BookInstance instance in result.value) {
if (_soldBooks
.where((book) => book.instance.id == instance.id)
.isNotEmpty) {
continue;
}
Book book;
final result2 = await _bookRepository.getBookById(instance.bookId);
switch (result2) {
@ -79,9 +98,7 @@ class SellViewModel extends ChangeNotifier {
case Error():
continue;
}
_scannedBooks.add(
BookStack(instance: instance, book: book, owner: owner),
);
_scannedBooks.add(BookStack(book, instance, owner));
}
break;
case Error():