| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import 'package:drift/drift.dart';
- import '../database.dart';
- class ClientiDao {
- final AppDatabase db;
- ClientiDao(this.db);
- Future<Cliente?> getById(int id) {
- return (db.select(db.clienti)..where((t) => t.idCliente.equals(id))).getSingleOrNull();
- }
- Future<Cliente?> getByCode(int idAgente, String code) {
- return (db.select(db.clienti)
- ..join([
- innerJoin(db.clientiAgente, db.clientiAgente.idCliente.equalsExp(db.clienti.idCliente) & db.clientiAgente.idAgente.equals(idAgente)),
- ])
- ..where((t) => t.codCliente.equals(code))
- ).getSingleOrNull();
- }
- Future<Cliente?> getByRemoteId(int idAgente, int remoteId) {
- return (db.select(db.clienti)
- ..join([
- innerJoin(db.clientiAgente, db.clientiAgente.idCliente.equalsExp(db.clienti.idCliente) & db.clientiAgente.idAgente.equals(idAgente)),
- ])
- ..where((t) => t.idClienteRemoto.equals(remoteId))
- ).getSingleOrNull();
- }
- Future<List<Cliente>> getClienti(int idAgente, String filter) async {
- final words = filter.split(' ').where((w) => w.isNotEmpty).toList();
- final q = db.select(db.clienti)
- ..join([
- innerJoin(db.clientiAgente, db.clientiAgente.idCliente.equalsExp(db.clienti.idCliente) & db.clientiAgente.idAgente.equals(idAgente)),
- ])
- ..limit(200);
- if (words.isNotEmpty) {
- for (final word in words) {
- final pattern = '%$word%';
- q.where((t) =>
- t.codCliente.like(pattern) |
- t.ragioneSociale.like(pattern) |
- t.partitaIva.like(pattern)
- );
- }
- }
- return q.get();
- }
- Future<List<Cliente>> getActiveClients(int idAgente) {
- return (db.select(db.clienti)
- ..join([
- innerJoin(db.clientiAgente, db.clientiAgente.idCliente.equalsExp(db.clienti.idCliente) & db.clientiAgente.idAgente.equals(idAgente)),
- ])
- ..where((t) => t.attivo.equals(1))
- ..orderBy([(t) => OrderingTerm(expression: t.ragioneSociale)])
- ).get();
- }
- Future<List<TopCustomerData>> topCustomers(int limit) async {
- return (db.select(db.topCustomer)..limit(limit)).get();
- }
- Future<List<Cliente>> getNewCustomers(int idAgente) {
- return (db.select(db.clienti)
- ..join([
- innerJoin(db.clientiAgente, db.clientiAgente.idCliente.equalsExp(db.clienti.idCliente) & db.clientiAgente.idAgente.equals(idAgente)),
- ])
- ..where((t) => t.stato.equals('N'))
- ).get();
- }
- Future<int> countNewCustomers() async {
- final rows = await (db.select(db.clienti)..where((t) => t.stato.equals('N'))).get();
- return rows.length;
- }
- Future<List<Cliente>> inactiveCustomers(int idAgente, String sinceDate) async {
- final recentIds = await (db.select(db.ordini)
- ..where((t) => t.idCliente.isNotNull())
- ).get().then((orders) => orders.map((o) => o.idCliente!).toSet());
- return (db.select(db.clienti)
- ..join([
- innerJoin(db.clientiAgente, db.clientiAgente.idCliente.equalsExp(db.clienti.idCliente) & db.clientiAgente.idAgente.equals(idAgente)),
- ])
- ..where((t) => t.idCliente.isNotIn(recentIds))
- ).get();
- }
- Future<int> countCustomersToSend() async {
- final rows = await (db.select(db.clienti)..where((t) => t.stato.equals('N'))).get();
- return rows.length;
- }
- Future<int> countCustomersToSendForAgent(int idAgente) async {
- final rows = await (db.select(db.clienti)
- ..join([
- innerJoin(db.clientiAgente, db.clientiAgente.idCliente.equalsExp(db.clienti.idCliente) & db.clientiAgente.idAgente.equals(idAgente)),
- ])
- ..where((t) => t.stato.equals('N'))
- ).get();
- return rows.length;
- }
- Future<void> markAsSent(int idCliente, int idAssegnato) {
- return (db.update(db.clienti)..where((t) => t.idCliente.equals(idCliente)))
- .write(ClientiCompanion(stato: const Value('T')));
- }
- }
|