| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- import 'package:drift/drift.dart';
- import '../api_service.dart';
- import '../../database/database.dart';
- import '../../database/daos/clienti_dao.dart';
- import '../../database/daos/filiali_dao.dart';
- import '../../dto/sync_customer_dto.dart';
- class FilialeSyncService {
- final ApiService _api;
- final FilialiDao _dao;
- final ClientiDao _clientiDao;
- FilialeSyncService(this._api, this._dao, this._clientiDao);
- Future<int> uploadNewDestinations(int idAgente, String codAgente) async {
- final dests = await _dao.getNewDestinations();
- int sent = 0;
- for (final d in dests) {
- try {
- final dto = SyncFilialeDto(
- idFiliale: d.idFiliale,
- idCliente: d.idCliente,
- codFiliale: d.codFiliale,
- descrizione: d.descrizione,
- indirizzo: d.indirizzo,
- citta: d.citta,
- provincia: d.provincia,
- cap: d.cap,
- frazione: d.frazione,
- nazione: d.nazione,
- telefono: d.telefono,
- cellulare: d.cellulare,
- fax: d.fax,
- email: d.email,
- stato: d.stato,
- attivo: d.attivo,
- note: d.note,
- );
- final resp = await _api.post('/rest/filiali/$codAgente', dto.toJson());
- if (resp['status'] == 0) {
- await _dao.markAsSent(d.idFiliale);
- sent++;
- }
- } catch (_) {}
- }
- return sent;
- }
- Future<int> downloadDestinations(
- int idAgente,
- String codAgente,
- String lastUpdate,
- ) async {
- try {
- final data = await _api.getList(
- '/rest/filiali/updates/$codAgente/$lastUpdate',
- );
- final db = _dao.db;
- final cacheRemoteId = <int, Filiale?>{};
- final cacheCode = <String, Filiale?>{};
- final cacheCliente = <String, Cliente?>{};
- int count = 0;
- await db.transaction(() async {
- for (final json in data) {
- final dto = SyncFilialeDto.fromJson(json as Map<String, dynamic>);
- Filiale? existing;
- if (dto.idFiliale != null) {
- existing = cacheRemoteId[dto.idFiliale!];
- if (existing == null) {
- existing = await _dao.getByRemoteId(dto.idFiliale!);
- if (existing != null) {
- cacheRemoteId[dto.idFiliale!] = existing;
- }
- }
- }
- if (existing == null && dto.codFiliale != null) {
- existing = cacheCode[dto.codFiliale!];
- if (existing == null) {
- existing = await _dao.getByCode(dto.codFiliale!);
- if (existing != null) {
- cacheCode[dto.codFiliale!] = existing;
- }
- }
- }
- Cliente? localCliente;
- if (dto.codCliente != null) {
- localCliente = cacheCliente[dto.codCliente!];
- if (localCliente == null) {
- final c = await _clientiDao.getByCode(idAgente, dto.codCliente!);
- localCliente = c;
- cacheCliente[dto.codCliente!] = localCliente;
- }
- }
- if (existing != null) {
- await db
- .update(db.filiali)
- .replace(
- Filiale(
- idFiliale: existing.idFiliale,
- idFilialeRemoto: dto.idFiliale,
- idCliente: localCliente?.idCliente ?? existing.idCliente,
- codFiliale: dto.codFiliale,
- descrizione: dto.descrizione,
- indirizzo: dto.indirizzo,
- citta: dto.citta,
- provincia: dto.provincia,
- cap: dto.cap,
- frazione: dto.frazione,
- nazione: dto.nazione,
- telefono: dto.telefono,
- cellulare: dto.cellulare,
- fax: dto.fax,
- email: dto.email,
- stato: dto.stato,
- attivo: dto.attivo ?? 1,
- note: dto.note,
- ),
- );
- } else {
- await db
- .into(db.filiali)
- .insert(
- FilialiCompanion(
- idFilialeRemoto: Value(dto.idFiliale),
- idCliente: Value(localCliente?.idCliente),
- codFiliale: Value(dto.codFiliale),
- descrizione: Value(dto.descrizione),
- indirizzo: Value(dto.indirizzo),
- citta: Value(dto.citta),
- provincia: Value(dto.provincia),
- cap: Value(dto.cap),
- frazione: Value(dto.frazione),
- nazione: Value(dto.nazione),
- telefono: Value(dto.telefono),
- cellulare: Value(dto.cellulare),
- fax: Value(dto.fax),
- email: Value(dto.email),
- stato: Value(dto.stato),
- attivo: Value(dto.attivo ?? 1),
- note: Value(dto.note),
- ),
- );
- }
- count++;
- }
- });
- return count;
- } catch (_) {
- return 0;
- }
- }
- }
|