o
    ҾfM                     @   s  d dl mZ d dlmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZmZmZmZmZmZmZmZ d dlmZ d dlZd d	lmZ e Zd
d ZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZG dd dejZ G dd dejZ!G dd dejZ"G dd dejZ#G dd dejZ$G d d! d!ejZ%G d"d# d#ejZ&G d$d% d%ejZ'G d&d' d'ejZ(G d(d) d)ejZ)G d*d+ d+ejZ*G d,d- d-ejZ+G d.d/ d/ejZ,e-d0ej. e-d1ej/ e-d2e j. e-d3e!j/ e-d4e"j0 e-d5e"j1 e-d6e#j/ e-d7e$j/ e-d8e%j2 e-d9e(j2 e-d:e)j3 e-d;e)j4 d<d= Z5d>d? Z6d@dA Z7dBdC Z8dS )D    )
SQLAlchemy)datetime)generate_password_hashcheck_password_hash)NUMERIC)func)	ColumnStringNumericText
ForeignKeyBooleanIntegerDateTimeFloat)relationshipN)UUIDc                 C   s"   d| j d< d| j d< t|  d S )Nz/postgresql://postgres:1234@localhost/INVENTARIOSQLALCHEMY_DATABASE_URIFSQLALCHEMY_TRACK_MODIFICATIONS)configdbinit_appapp r   /var/www/html/mig_web/db.pyinit_db   s   

r   c                   @   s   e Zd Zd ZeedddZeedddZeeddZ	eedZ
eedZeedZeedZeedZed	d
dZdS )Bodegas   Tprimary_key  Fnullable2   d   SaldosBodegabodegaback_populatesN)__name__
__module____qualname____tablename__r   r	   IdBodegaDescripcionr   EstadoEmailnombrepuntodireccionpuntotelefonopunto	Encargador   saldosr   r   r   r   r      s    r   c                   @   s   e Zd ZdZeeddZeeddZeeddZee	e
 dZeeddZeeddZeeddZeeddZeedddZeeddZeeZee	Zee	ZeeddZeeddZdS )	LicencialicenciaTr   Fr"   default)r#   uniqueN)r*   r+   r,   r-   r   r   idrazonsocialnombrecomercialr   r   nowfechaubicacioncomercialciudadtelefonoversionnumerolicenciar   cantidadusuarionumerofacturacomprafechacomprafechavencimientonittipolicenciar   r   r   r   r7      s"    r7   c                   @   s   e Zd ZdZeedddZeedddZeedddZ	eedddZ
eed	ddZeed	ddZeed	ddZeed
ZeeZeeZeedddZeedZeeZeeZeedZdS )ConsecutivosconsecutivosTF)r    autoincrementr$   r"         
      r#   r:   r   N)r*   r+   r,   r-   r   r   IdConsecutivor	   Consecutivo
FormularioPrefijoDesdeHastaActual
Resolucionr   FechaResolucionr   ObservacionesResolucionr   r0   ComprobantePredeterminadofechafinresoluciontiporesolucionr   r   r   r   rL   0   s"    rL   c                   @   s  e Zd ZdZeedddZeedddZeedddZ	eed	e
d
ddZeedZeedZeedZeeddZeede
dddZeedZeedZeeZeedddZeedZeeZeedZeeZeeddddZeeddddZeeddddZeeddddZeeddddZ eeddddZ!eeddddZ"e#dddZ$e#dddZ%dS )	Entradas1	entradas1rR   Tr      Fr"   rS   r   Bodegas.IdBodegar$   r!   Usuarios.IdUsuariorQ         r   r9   r   backrefUsuariosN)&r*   r+   r,   r-   r   r	   NumeroMesr   Anulador   r.   CuentaDebitoCuentaCreditoObservacionesr   FechaCreacion	IdUsuarioRecibe
IdProyectofechamodificacionr   rT   opr@   	idclientetransmitidor
   subtotal	total_ivatotal_impoconsumo	total_ipc
total_ibua
total_icuitotalr   r'   usuarior   r   r   r   rb   B   s8    rb   c                   @   s2  e Zd ZdZeedddZeededddZeeded	ddZ	eed
ddZ
eedddddZeeddddZeedddddZeedddddZeedZeedZeeZeeZeeddddZeeddddZeeddddZeeddddZedddZedddZdS )	Entradas2	entradas2r$   Tr   rR   zentradas1.NumeroFr"   referencias.IdReferenciar!   rg   rh   r   rS         r9   rb   ri   
ReferenciaN)r*   r+   r,   r-   r   r	   IDr   rl   IdReferenciar/   r
   CantidadValorIVA	Descuentoremisionidfuenter   loteidunidadimpoconsumoipcimp_ibuaimp_icuir   entrada1
referenciar   r   r   r   r   `   s(    r   c                   @   s  e Zd Zd ZeedddZeedddZeeddZ	eede
dddZeedddZeedddZeed	Zeed
ejdZeede
dddZeeZeedZeeZeedddZeedZeeZeeddddZeeddddZeje ddddZ!eje ddddZ"eje ddddZ#eje ddddZ$eje ddddZ%e&dddZ'e&dddZ(dS )Salidas1rR   Tr   rd   r"   r   re   r$   r!   FrS   rf   rg   rQ   rh   r   r9   r   salidas1ri   rk   N))r*   r+   r,   r-   r   r	   rl   rm   r   rn   r   r.   ro   rp   rq   r   r   utcnowrr   rs   r   rt   
idproyectorv   r   rT   rw   r@   r   rz   r   r   r
   r{   r|   r}   r~   r   r   r'   r   r   r   r   r   r   v   s4    r   c                   @   s,  e Zd Zd ZeedddZeededddZeededddZ	eed	ddZ
eed
dddZeed
dddZeeZeeZejed
dddZejed
dddZejed
dddZejed
dddZejed
dddZejed
dddZedddZedddZdS )Salidas2r$   Tr   rR   zSalidas1.NumeroFr"   r   r!   rg   rh   r   r9   r   salidas2ri   r   N)r*   r+   r,   r-   r   r	   r   r   rl   r   r/   r   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   salida1r   r   r   r   r   r      s$    r   c                   @   s~  e Zd Zd ZeedddZeedddZeeddZ	eede
dddZeede
dddZeed	Zeed	Zeed
ZeeddZeede
dddZeeZeedZeedddZeeZeeddddZeeddddZeeddddZeeddddZeeddddZeeddddZeeddddZe degdZ!e degdZ"e dddZ#dS )
Traslados1rR   Tr   rd   Fr"   r   re   r$   r!   rf   rQ      rS   rg   rh   r   r9   r   )foreign_keysrk   
traslados1ri   N)$r*   r+   r,   r-   r   r	   rl   rm   r   rn   r   IdBodegaOrigenIdBodegaDestinoro   rp   rq   r   rr   rs   rv   IdCentroCostor   rT   r@   r
   rz   r{   r|   r}   r~   r   r   r   bodega_origenbodega_destinor   r   r   r   r   r      s4    r   c                   @   s6  e Zd Zd ZeedddZeededddZeeded	ddZ	eed
ddZ
eeddddZeeddddZeedddddZeeddddZeedZeedZeeZeeZeeZeeddddZeeddddZeeddddZeeddddZedddZedddZdS )
Traslados2   Tr   rR   zTraslados1.NumeroFr"   r$   r   r!   rg   rh   r   r9   r   rS   r   
traslados2ri   r   N)r*   r+   r,   r-   r   r	   r   r   rl   r   r/   r
   r   r   r   r   r   numerofuenter   
loteorigenlotedestinor   r   r   r   r   r   	traslado1r   r   r   r   r   r      s*    r   c                   @   s   e Zd Zd ZeededddZeedddZeededddZ	ee
ddd	d
Zee
ddd	d
Zee
ddd	d
Zee
ddd	d
Zee
ddd	d
Zee
ddd	d
Zee
ddd	d
ZeeddZedddZedddZdS )r&   r   re   Tr   rd   r$   r   rh   r   r9   rg   rP   r"   r   r6   r(   r   N)r*   r+   r,   r-   r   r	   r   r.   rm   r   r
   SaldoInicialVentasComprasEntradasSalidasSaldocostoponderador   r   r   r'   r   r   r   r   r   r&      s    r&   c                   @   s  e Zd ZdZejeddddZeedddZeede	d	ddZ
eede	d
ddZeeddddZeeddddZeedZeedZeedejdZeedddZeedddZeedZeeddddZeeddddZeeddddZeedddZeedZeedddZeeZeede	dZ eedZ!eeZ"eedZ#ee$Z%eedZ&eeZ'eedZ(eedZ)eedZ*eedZ+eeZ,eeZ-eedZ.eedZ/eedZ0eeZ1ee2Z3ee2Z4eeZ5eeddddZ6eeZ7ee8Z9ee8e	dZ:eedZ;eeddddZ<e=dddZ>e=dddZ?e=dddZ@e=dddZAe=dddZBeede	dZ;e=dddZCd S )!r   referenciasr$   TF)r    r#   r!   r"   rQ   Grupos.IdGrupozUnidades.IdUnidadrg   rh   r   r9   r   rS   r   rP   SubGrupos.IdSubgrupozsubcategorias.idsubcategoria   Grupori   r&   r   r(   	SubGruposSubcategoriasUnidadeszEstadoProducto.EstadoProductoEstadoProductoN)Dr*   r+   r,   r-   r   r   r	   r   r   r   IdGrupoIdUnidadr
   StockMinimoStockMaximo	Ubicacionr   r   r   r   rr   r   r0   TipoReferenciaProveedorCostoPrecioVenta1SaldoAntesInvInsumoIdConceptoContableManejaInventario
atributada
idsubgrupoidlineapresentacionIdUnidadpccr   porcpreciov1	tipocostocalcularprecioventaMarcaTallaGENERALmodelosmanejaserialesmetalcontroladoALMACENAMIENTOTIPOSidgrupocaracteristicaproductoagotador   
ordengrupo	numtoquesmodificaprecio	costorealrI   r   idbodegaidsubcategoriar   r   r   grupor6   subgruposubcategoriaunidadestado_productor   r   r   r   r      sl    r   c                   @   s&  e Zd Zd ZeedddZeedddZeedZeedZ	eedZ
eedZeeZeeZeedZeedZeedZeedZeeddd	ZeeZeed
Zeed
ZeedZeedZeeZeeZeeZeedZeedZeeZee Z!dS )Proveedoresr$   Tr   r%   Fr"   rQ   r   rS   rP      rh   N)"r*   r+   r,   r-   r   r	   NitRazonSocial	Contacto1	Direccion	Telefono1IdCiudadr   AutoretenedorRS	Actividadr1   	Contacto2	Contacto3r0   r   DiasCreditoIdDepartamentoIdTipoTerceroCxPDV
retefuenteclasificacionconsignaciontipoIdActividadEconomicaaplicareteicar   fechacreacionr   r   r   r   r   "  s6    r   c                   @   s<   e Zd Zd ZeedddZeedddZeeddZ	dS )	r   rQ   Tr   r$   Fr"   r9   N)
r*   r+   r,   r-   r   r	   r   Unidadr   r0   r   r   r   r   r   >  s
    r   c                   @   s`   e Zd Zd ZeedddZeedddZeededddZ	ee
dddZed	d
dZdS )r   rQ   Tr   r$   Fr"   r   rS   r   	subgruposri   N)r*   r+   r,   r-   r   r	   
IdSubgrupoSubgrupor   r   r   r0   r   r   r   r   r   r   r   D  s    r   c                   @   s`   e Zd ZdZeeddZeeZeeedZ	eeedZ
eeZedddZedddZd	S )
r   subcategoriasTr   r   r   r   ri   r   N)r*   r+   r,   r-   r   r   r   	categoriar   idgrupor   r   estador   r   r   r   r   r   r   r   M  s    r   c                   @   s`   e Zd ZdZeedddZeedddZeeddZ	ee
Zeedd	Zejejd
d	ZdS )r   GruposrQ   Tr   r$   Fr"   Nr9   r   )r*   r+   r,   r-   r   r	   r   r   r   r0   r   
inventariomenuposr   r   ultimoCodigor   r   r   r   r   X  s    r   c                   @   sH   e Zd Zd ZeedddZeedddZeeddZ	e
ddd	Zd
S )r   rQ   Tr   r$   Fr"   r   r   r(   N)r*   r+   r,   r-   r   r	   IdEstadoProductor   r   r0   r   r   r   r   r   r   r   a  s    r   c                   @   s   e Zd Zd ZeedddZeedddZeedddZee	dddZ
eeZeedZeeZee	Zeed	ed
ZeedZee	Zee	ZedddZdd Zdd ZdS )rk   rR   Tr      Fr"   r$   rS   r   re   r   usuariosri   c                 C   s   t || _d S N)r      Contraseñaselfpasswordr   r   r   set_passwordz  s   zUsuarios.set_passwordc                 C   s   t | j|S r  )r   r  r  r   r   r   check_password}  s   zUsuarios.check_passwordN)r*   r+   r,   r-   r   r	   rs   r  r/   r   r0   r   r   emailidgruporeporte muestracostoenconsultainventarior   r   
idvendedorocultarsaldoinventarioapruebainventariofisicor   r'   r  r  r   r   r   r   rk   i  s"    rk   idx_entradas1_idbodegaidx_entradas2_idreferenciaidx_salidas1_idbodegaidx_salidas2_idreferenciaidx_traslados1_idbodegaorigenidx_traslados1_idbodegadestinoidx_traslados2_idreferenciaidx_saldosbodega_idreferenciaidx_referencia_idgrupoidx_subgrupos_idgrupoidx_subcategorias_idgrupoidx_subcategorias_idsubgrupoc                 C   s@   t |  |   t   W d    d S 1 sw   Y  d S r  )r   r   app_context
create_allr   r   r   r   r     s   


"r   c              
   C   s   t  d}tjj| ||d }|s&t| ||dddddd}tj	| |dkr2| j
|7  _
n#|dkr>| j|7  _n|dkrJ| j|7  _n|dkrU| j|7  _tj  d	S )
u   
    Actualiza el saldo de una referencia en una bodega específica.
    tipo_movimiento puede ser 'entrada', 'salida', 'venta', o 'compra'
    %Y%mr.   r   rm   r   )r.   r   rm   r   r   r   r   r   entradasalidaventacompraN)r   r?   strftimer&   query	filter_byfirstr   sessionaddr   r   r   r   commit)	id_bodegaid_referenciacantidadtipo_movimiento
mes_actualsaldor   r   r   actualizar_saldo_bodega  s:   
r?  c                 C   sJ   t  d}tjj| ||d }|r#|j|j |j	 |j
 |j S dS )uM   
    Obtiene el saldo actual de una referencia en una bodega específica
    r,  r-  r   )r   r?   r2  r&   r3  r4  r5  r   r   r   r   r   )r9  r:  r=  r>  r   r   r   obtener_saldo_actual  s   r@  c                 C   s(   | di |}t j| t j  |S )zP
    Registra un movimiento (entrada, salida, traslado) en la base de datos
    Nr   )r   r6  r7  r8  )modelodatosnuevo_movimientor   r   r   registrar_movimiento  s   
rD  )9flask_sqlalchemyr   r   werkzeug.securityr   r   sqlalchemy.dialects.postgresqlr   sqlalchemy.sqlr   
sqlalchemyr   r	   r
   r   r   r   r   r   r   sqlalchemy.ormr   uuidr   r   r   Modelr   r7   rL   rb   r   r   r   r   r   r&   r   r   r   r   r   r   r   rk   Indexr.   r   r   r   r   r  r   r   r?  r@  rD  r   r   r   r   <module>   sZ    ,8		$