using Microsoft.AspNetCore.Http; using MisIngredientesVue.Core.Services; using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Text; namespace MisIngredientesVue.Core.Models { [DisplayColumn("Name")] public class Client : RepositoryEntityWithTenantId { [Required] [DisplayName("Nombre comercial")] public string Name { get; set; } [NotMapped] public decimal? MinTotal { get; set; } [DisplayName("Contacto principal")] public string Contact { get; set; } [DisplayName("Teléfono")] public string Phone { get; set; } [DisplayName("Correo electrónico")] public string Email { get; set; } [DisplayName("Sitio web")] public string Website { get; set; } public bool IsVerified { get; set; } public List Brands { get; set; } public List TaxPayers { get; set; } public List Branches { get; set; } [Text] public string Tags { get; set; } } //Para almacenar los pedidos mínimos por cliente //Se necesita una tabla adicional porque puede haber varios proveedores que provean a este cliente //El tenantId determina al proveedor public class ClientMinTotal : RepositoryEntity { [IgnoreRelationship] public string TenantId { get; set; } [Unique] public int ClientId { get; set; } public Client Client { get; set; } public decimal MinTotal { get; set; } } //Un cliente tiene varias sucursales. Una sucursal tiene asignada una marca. Una marca puede tener asignadas varias sucursales. [DisplayColumn("Name")] public class ClientBranch : RepositoryEntityWithTenantId { public int ClientId { get; set; } [DisplayName("Nombre")] public string Name { get; set; } [DisplayName("Gerente / Encargado")] public string Manager { get; set; } //Se puede guardar el nombre O la referencia a un usuario [NoJoin] public int? ManagerUserId { get; set; } [NoJoin] public User ManagerUser { get; set; } [DisplayName("Correo electrónico del gerente")] public string ManagerEmail { get; set; } [DisplayName("Teléfono del gerente")] public string ManagerPhone { get; set; } [DisplayName("Dirección de Entrega")] [MaxLength(100)] public string ShippingAddress { get; set; } [DisplayName("Lat")] public decimal? Lat { get; set; } [DisplayName("Lng")] public decimal? Lng { get; set; } [DisplayName("Detalles de la Entrega")] [MaxLength(100)] public string ShippingDetails { get; set; } [DisplayName("Enviar factura")] public bool SendInvoice { get; set; } public int? TaxPayerId { get; set; } public int? ClientBrandId { get; set; } [DisplayName("Código Postal")] [MaxLength(6)] public string ZipCode { get; set; } //Deprecado, invisible [DisplayName("Número Interior")] [MaxLength(20)] public string NumInt { get; set; } //RFC public ClientTaxPayer TaxPayer { get; set; } //Marca public ClientBrand ClientBrand { get; set; } public Client Client { get; set; } //Este se ocupa para lo de las rutas únicamente [NotMapped] public decimal Total { get; set; } } public class ClientTaxPayer : RepositoryEntityWithTenantId { public int ClientId { get; set; } [DisplayName("RFC")] public string TaxPayerIdNo { get; set; } [DisplayName("Razón Social")] [MaxLength(75)] public string LegalName { get; set; } [DisplayName("Calle")] public string Street { get; set; } [DisplayName("Número interior")] public string IntNumber { get; set; } [DisplayName("Número Exterior")] public string ExtNumber { get; set; } [DisplayName("Colonia")] public string Neighborhood { get; set; } [DisplayName("Municipio")] public string Municipality { get; set; } [DisplayName("State")] public string State { get; set; } [DisplayName("Código Postal")] public string ZipCode { get; set; } [DisplayName("Correo")] public string Email { get; set; } [DisplayName("Forma de Pago")] public string PaymentForm { get; set; } [DisplayName("Método de Pago")] public string PaymentMethod { get; set; } [DisplayName("Uso de CFDI")] public string UsoCfdi { get; set; } [DisplayName("Enviar factura")] public bool SendInvoice { get; set; } [DisplayName("Encargado de facturación")] public string BillingManager { get; set; } //Se puede guardar el nombre O la referencia a un usuario [NoJoin] public int? BillingManagerUserId { get; set; } [NoJoin] public User BillingManagerUser { get; set; } [DisplayName("Teléfono del encargado de facturación")] public string BillingManagerPhone { get; set; } [DisplayName("Correo electrónico del encargado de facturación")] public string BillingManagerEmail { get; set; } } public class ClientBrand : RepositoryEntityWithTenantId { public int ClientId { get; set; } [DisplayName("Nombre")] public string Name { get; set; } [DisplayName("Identificador")] [MaxLength(15)] public string Code { get; set; } [DisplayName("Nombre de contacto")] public string Contact { get; set; } //Se puede guardar el nombre O la referencia a un usuario [NoJoin] public int? ContactUserId { get; set; } [NoJoin] public User ContactUser { get; set; } [DisplayName("Correo de contacto")] public string ContactEmail { get; set; } [DisplayName("Teléfono de contacto")] public string ContactPhone { get; set; } [DisplayName("Enviar factura")] public bool SendInvoice { get; set; } [NotMapped] public List Branches { get; set; } } public class ClientGeneralData { public int Id { get; set; } public string Name { get; set; } public string Contact { get; set; } public string Phone { get; set; } public string Email { get; set; } public string Website { get; set; } public IFormFile Image { get; set; } } }