Untitled

 avatar
unknown
dart
9 months ago
5.8 kB
3
Indexable
import 'package:dspyme_gesloc/controllers/utilidades.dart';
import 'package:dspyme_gesloc/models/cliente.dart';
import 'package:hive/hive.dart';

part 'articulo.g.dart';

@HiveType(typeId: 1, adapterName: "ArticuloAdapter")
class Articulo {
  Articulo(
      {required this.clave,
      required this.codigo,
      this.nombre = "",
      this.precio = 0,
      this.descrip = "",
      this.codbarra = "",
      this.codarti = "",
      this.tipoArticulo,
      this.codigoFamilia,
      this.stock = 0,
      this.baja = false,
      this.pvp = 0,
      this.tipoIva,
      this.codean = "",
      this.codigoProveedor,
      this.objetoProveedor,
      this.coste = 0,
      this.porcentajeMargen = 0,
      this.fechaSincronizacion});

  @HiveField(0)
  String clave;

  @HiveField(1)
  int codigo;

  @HiveField(2)
  String nombre;

  @HiveField(3)
  double precio;

  @HiveField(4)
  String descrip;

  @HiveField(5)
  String codbarra;

  @HiveField(6)
  String codarti;

  @HiveField(7)
  int? codigoFamilia;

  @HiveField(8)
  double stock;

  /// si es contenedor, tarea o producto
  @HiveField(9)
  int? tipoArticulo;

  /// Utilizado en tabla web
  @HiveField(10)
  bool baja;

  @HiveField(11)
  double pvp;

  @HiveField(12)
  int? tipoIva;

  @HiveField(13)
  String codean;

  @HiveField(14)
  double coste;

  @HiveField(15)
  double porcentajeMargen;

  @HiveField(16)
  int? codigoProveedor;

  @HiveField(17)
  Cliente? objetoProveedor;

  /// Modificado
  @HiveField(18)
  DateTime? fechaSincronizacion;

  /// Utilizado por select_dialog en vistaweb
  /// TODO check si se utiliza
  @override
  String toString() => nombre;

  factory Articulo.fromJson(Map<String, dynamic> json) {
    try {
      Articulo articulo = Articulo(
        clave: json["Clave"],
        codigo: json["Codigo"],
      );

      try {
        articulo.precio = json["Precio"] == null
            ? 0.0
            : double.parse(json["Precio"].toString());
      } catch (e) {
        print("Error assigning precio: $e");
      }

      try {
        articulo.nombre = json["Nombre"] ?? "";
      } catch (e) {
        print("Error assigning nombre: $e");
      }

      try {
        articulo.descrip = json["Texto"] ?? "";
      } catch (e) {
        print("Error assigning Texto: $e");
      }

      try {
        articulo.codbarra = json["Codbarra"] ?? "";
      } catch (e) {
        print("Error assigning Codbarra: $e");
      }

      try {
        articulo.codarti = json["Codarti"] ?? "";
      } catch (e) {
        print("Error assigning Codarti: $e");
      }

      try {
        articulo.tipoArticulo = json["Tipoarticulo"];
      } catch (e) {
        print("Error assigning Tipoarticulo: $e");
      }

      try {
        articulo.codigoFamilia = json["Familia"];
      } catch (e) {
        print("Error assigning Familia: $e");
      }

      try {
        articulo.stock = json["Stock"] == null
            ? 0.0
            : double.parse(json["Stock"].toString());
      } catch (e) {
        print("Error assigning Stock: $e");
      }

      try {
        articulo.baja = json["Baja"] == 1 ? true : false;
      } catch (e) {
        print("Error assigning baja: $e");
      }

      try {
        articulo.pvp =
            json["Pvp"] == null ? 0.0 : double.parse(json["Pvp"].toString());
      } catch (e) {
        print("Error assigning Pvp: $e");
      }

      try {
        articulo.tipoIva = json["Tipoiva"];
      } catch (e) {
        print("Error assigning tipoiva: $e");
      }

      try {
        articulo.codean = json["Codean"] ?? "";
      } catch (e) {
        print("Error assigning Codean: $e");
      }

      try {
        articulo.codigoProveedor = json["Provee"];
      } catch (e) {
        print("Error assigning codigoProveedor: $e");
      }

      try {
        articulo.coste = json["Coste"] == null
            ? 0.0
            : double.parse(json["Coste"].toString());
      } catch (e) {
        print("Error assigning coste: $e");
      }

      try {
        articulo.porcentajeMargen = json["Margen"] == null
            ? 0.0
            : double.parse(json["Margen"].toString());
      } catch (e) {
        print("Error assigning margen: $e");
      }

      try {
        articulo.fechaSincronizacion =
            Utilidades.parseFecha(json['Modificado']) ?? DateTime.now();
      } catch (e) {
        print("Error assigning fechaSincronizacion: $e");
      }

      return articulo;
    } catch (e) {
      print("Error fromJson Articulo: $e");
      return Articulo(
        clave: json["Clave"],
        codigo: json["Codigo"],
      );
    }
  }

  Map<String, dynamic> toJson() {
    try {
      return {
        "Clave": clave,
        "Codigo": codigo,
        "Nombre": nombre,
        "Precio": precio,
        "Texto": descrip,
        "Codbarra": codbarra,
        "Codarti": codarti,
        "Tipoarticulo": tipoArticulo,
        "Familia": codigoFamilia,
        "Stock": stock,
        "Baja": baja ? 1 : 0,
        "Pvp": pvp,
        "Tipoiva": tipoIva,
        "Codean": codean,
        "Coste": coste,
        "Margen": porcentajeMargen,
        "Provee": codigoProveedor,
        "Modificado": fechaSincronizacion?.toIso8601String()
      };
    } catch (e) {
      throw Exception("Error toJson Articulo: $e");
    }
  }

  static List<String> camposBasicos = ["Clave", "Codigo", "Nombre", "Descrip"];

  static String? textoArticulo(Articulo? articulo) {
    if (articulo != null) {
      return "${articulo.codarti.trim()} (${articulo.nombre.trim()})";
    }
    return null;
  }
}
Editor is loading...
Leave a Comment