Ver código fonte

Selector de sucursales

OscarGil03 6 meses atrás
pai
commit
89eba6770c

+ 10 - 0
lib/models/sucursal_model.dart

@@ -8,6 +8,7 @@ class Sucursal extends Basico {
   String? ciudad;
   String? ciudad;
   String? clave;
   String? clave;
   int? activo;
   int? activo;
+  int? seleccionado;
 
 
   Sucursal({
   Sucursal({
     super.id,
     super.id,
@@ -17,9 +18,16 @@ class Sucursal extends Basico {
     this.ciudad,
     this.ciudad,
     this.clave,
     this.clave,
     this.activo,
     this.activo,
+    this.seleccionado,
   });
   });
 
 
   @override
   @override
+  bool operator ==(Object other) {
+    if (identical(this, other)) return true;
+    return other is Sucursal && other.id == id;
+  }
+
+  @override
   Map<String, dynamic> toJson() {
   Map<String, dynamic> toJson() {
     print("Convirtiendo Sucursal a JSON");
     print("Convirtiendo Sucursal a JSON");
     print(
     print(
@@ -34,6 +42,7 @@ class Sucursal extends Basico {
       'ciudad': ciudad ?? '',
       'ciudad': ciudad ?? '',
       'clave': clave ?? '',
       'clave': clave ?? '',
       'activo': activo ?? 0,
       'activo': activo ?? 0,
+      'seleccionado': seleccionado ?? 0,
       'creado': creado?.toIso8601String(),
       'creado': creado?.toIso8601String(),
       'modificado': modificado?.toIso8601String(),
       'modificado': modificado?.toIso8601String(),
       'eliminado': eliminado?.toIso8601String(),
       'eliminado': eliminado?.toIso8601String(),
@@ -47,6 +56,7 @@ class Sucursal extends Basico {
     direccion = Basico.parseString(json['direccion']);
     direccion = Basico.parseString(json['direccion']);
     ciudad = Basico.parseString(json['ciudad']);
     ciudad = Basico.parseString(json['ciudad']);
     activo = Basico.parseInt(json['activo']);
     activo = Basico.parseInt(json['activo']);
+    seleccionado = Basico.parseInt(json['seleccionado']);
     clave = Basico.parseString(json['clave']);
     clave = Basico.parseString(json['clave']);
   }
   }
 
 

+ 2 - 1
lib/services/repo_service.dart

@@ -494,7 +494,8 @@ class RepoService<T> {
             eliminado TEXT,
             eliminado TEXT,
             creado TEXT,
             creado TEXT,
             modificado TEXT,
             modificado TEXT,
-            idLocal INTEGER
+            idLocal INTEGER,
+            seleccionado INTEGER
           )
           )
         ''');
         ''');
 
 

+ 15 - 2
lib/viewmodels/sucursal_view_model.dart

@@ -17,14 +17,27 @@ class SucursalViewModel<T> extends ChangeNotifier {
   Future<void> fetchLocalSucursales() async {
   Future<void> fetchLocalSucursales() async {
     var db = await RepoService().db;
     var db = await RepoService().db;
     var query = await db!
     var query = await db!
-        .query('Sucursal', where: 'eliminado IS NULL', orderBy: 'idLocal asc');
+        .query('Sucursal', where: 'eliminado IS NULL', orderBy: 'id asc');
     _sucursales = query.map((element) => Sucursal.fromJson(element)).toList();
     _sucursales = query.map((element) => Sucursal.fromJson(element)).toList();
     notifyListeners();
     notifyListeners();
   }
   }
 
 
+  Future<void> setSelectedSucursal(Sucursal sucursal) async {
+    var db = await RepoService().db;
+
+    await db!.update(
+      'Sucursal',
+      {'seleccionado': 0},
+    );
+
+    sucursal.seleccionado = 1;
+    await RepoService().guardar(sucursal);
+
+    await fetchLocalSucursales();
+  }
+
   Future<bool> sincronizarSucursales() async {
   Future<bool> sincronizarSucursales() async {
     try {
     try {
-      // Llamada a la API para obtener las sucursales
       final response = ApiResponse(await BaseService().get('/pos/sucursal'));
       final response = ApiResponse(await BaseService().get('/pos/sucursal'));
 
 
       if (response.isOk && response.resultados != null) {
       if (response.isOk && response.resultados != null) {

+ 61 - 14
lib/views/sucursal/sucursal_screen.dart

@@ -17,7 +17,18 @@ class _SucursalesPageState extends State<SucursalesPage> {
     super.initState();
     super.initState();
     // Cargar las sucursales desde la base de datos local cuando se inicializa la pantalla
     // Cargar las sucursales desde la base de datos local cuando se inicializa la pantalla
     Provider.of<SucursalViewModel>(context, listen: false)
     Provider.of<SucursalViewModel>(context, listen: false)
-        .fetchLocalSucursales();
+        .fetchLocalSucursales()
+        .then((_) {
+      // Buscar la sucursal seleccionada automáticamente al cargar la pantalla
+      final sucursales =
+          Provider.of<SucursalViewModel>(context, listen: false).sucursales;
+      setState(() {
+        _selectedSucursal = sucursales.firstWhere(
+          (sucursal) => sucursal.seleccionado == 1,
+          orElse: () => null as Sucursal,
+        );
+      });
+    });
   }
   }
 
 
   @override
   @override
@@ -34,11 +45,11 @@ class _SucursalesPageState extends State<SucursalesPage> {
         child: Column(
         child: Column(
           crossAxisAlignment: CrossAxisAlignment.stretch,
           crossAxisAlignment: CrossAxisAlignment.stretch,
           children: [
           children: [
-            // Dropdown para seleccionar una sucursal
-            DropdownButton<Sucursal>(
-              hint: Text('Seleccione una sucursal'),
-              value: _selectedSucursal,
-              isExpanded: true,
+            // Dropdown para seleccionar una sucursal utilizando AppDropdownModel
+            AppDropdownModel<Sucursal>(
+              etiqueta: 'Seleccione una sucursal',
+              hint: 'Elija una sucursal',
+              selectedValue: _selectedSucursal,
               onChanged: (Sucursal? newValue) {
               onChanged: (Sucursal? newValue) {
                 setState(() {
                 setState(() {
                   _selectedSucursal = newValue;
                   _selectedSucursal = newValue;
@@ -47,29 +58,65 @@ class _SucursalesPageState extends State<SucursalesPage> {
               items: sucursales.map((Sucursal sucursal) {
               items: sucursales.map((Sucursal sucursal) {
                 return DropdownMenuItem<Sucursal>(
                 return DropdownMenuItem<Sucursal>(
                   value: sucursal,
                   value: sucursal,
-                  child: Text(sucursal.nombre ?? ''),
+                  child: Text(
+                    sucursal.nombre ?? '',
+                    style: TextStyle(color: Colors.black),
+                  ),
                 );
                 );
               }).toList(),
               }).toList(),
             ),
             ),
             SizedBox(height: 20),
             SizedBox(height: 20),
+
+            // Tarjeta con la información de la sucursal seleccionada
+            if (_selectedSucursal != null)
+              tarjeta(
+                Padding(
+                  padding: const EdgeInsets.all(8.0),
+                  child: Column(
+                    crossAxisAlignment: CrossAxisAlignment.start,
+                    children: [
+                      Text(
+                        'Sucursal: ${_selectedSucursal!.nombre ?? ''}',
+                        style: TextStyle(
+                            fontSize: 16, fontWeight: FontWeight.bold),
+                      ),
+                      SizedBox(height: 5),
+                      Text('Dirección: ${_selectedSucursal!.direccion ?? ''}'),
+                      SizedBox(height: 5),
+                      Text('Ciudad: ${_selectedSucursal!.ciudad ?? ''}'),
+                      SizedBox(height: 5),
+                      Text('Clave: ${_selectedSucursal!.clave ?? ''}'),
+                      SizedBox(height: 5),
+                    ],
+                  ),
+                ),
+              ),
+
+            SizedBox(height: 20),
+
+            // Usar el widget de botón para guardar
             boton("Guardar", () async {
             boton("Guardar", () async {
-              _guardarSucursalSeleccionada();
+              await _guardarSucursalSeleccionada();
               if (context.mounted) {
               if (context.mounted) {
                 Navigator.pop(context);
                 Navigator.pop(context);
               }
               }
-            })
+            }),
           ],
           ],
         ),
         ),
       ),
       ),
     );
     );
   }
   }
 
 
-  void _guardarSucursalSeleccionada() {
+  Future<void> _guardarSucursalSeleccionada() async {
     if (_selectedSucursal != null) {
     if (_selectedSucursal != null) {
-      // Aquí puedes implementar la lógica para guardar la sucursal seleccionada
-      print('Sucursal seleccionada: ${_selectedSucursal?.nombre}');
-      // Puedes guardar la sucursal seleccionada en el estado o base de datos local
-      // Ejemplo: Provider.of<SucursalViewModel>(context, listen: false).guardarSucursalSeleccionada(_selectedSucursal);
+      // Guardar la sucursal seleccionada utilizando el ViewModel
+      await Provider.of<SucursalViewModel>(context, listen: false)
+          .setSelectedSucursal(_selectedSucursal!);
+
+      setState(() {
+        // Volver a establecer la sucursal seleccionada en el Dropdown
+        _selectedSucursal = _selectedSucursal;
+      });
     }
     }
   }
   }
 }
 }