
    j                         d dl Z d dlZej                            ej                            e          d          Zd Zd ZddZ	d Z
d Zd	 Zd
 Zd Zd Z e             dS )    Nzbolsa.dbc                  Z    t          j        t                    } t           j        | _        | S )N)sqlite3connectDB_PATHRowrow_factoryconns    "/var/www/html/bolsaweb/database.pyget_connr      s     ?7##D{DK    c                  ~    t                      5 } |                     d           d d d            d S # 1 swxY w Y   d S )Na8  
            CREATE TABLE IF NOT EXISTS transacciones (
                id          INTEGER PRIMARY KEY AUTOINCREMENT,
                modo        TEXT NOT NULL CHECK(modo IN ('real', 'simulacion')),
                empresa     TEXT NOT NULL,
                ticker      TEXT NOT NULL,
                tipo        TEXT NOT NULL CHECK(tipo IN ('compra', 'venta')),
                fecha       TEXT NOT NULL,
                cantidad    REAL NOT NULL,
                precio      REAL NOT NULL,
                comision    REAL NOT NULL DEFAULT 0,
                notas       TEXT
            );

            CREATE TABLE IF NOT EXISTS tickers_extra (
                nombre      TEXT PRIMARY KEY,
                ticker      TEXT NOT NULL UNIQUE,
                activo      INTEGER NOT NULL DEFAULT 1
            );
        )r   executescriptr	   s    r   init_dbr      s    	 t  	 	 	                 s   266 c	                     t                      5 }	|	                    d| ||||||||f	           d d d            d S # 1 swxY w Y   d S )NzINSERT INTO transacciones
               (modo, empresa, ticker, tipo, fecha, cantidad, precio, comision, notas)
               VALUES (?,?,?,?,?,?,?,?,?)r   execute)
modoempresatickertipofechacantidadpreciocomisionnotasr
   s
             r      añadir_transaccionr   '   s    	 
t- 7FD%68US		
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s    <A A c                     t                      5 }|                    d| f           d d d            d S # 1 swxY w Y   d S )Nz$DELETE FROM transacciones WHERE id=?r   )id_r
   s     r   eliminar_transaccionr!   1   s    	 Et;cVDDDE E E E E E E E E E E E E E E E E E   488c                     t                      5 }|                    d| f                                          }d d d            n# 1 swxY w Y   d |D             S )Nz<SELECT * FROM transacciones WHERE modo=? ORDER BY fecha DESCc                 ,    g | ]}t          |          S  dict.0rs     r   
<listcomp>z%get_transacciones.<locals>.<listcomp>;       """DGG"""r   r   r   fetchallr   r
   rowss      r   get_transaccionesr1   6   s    	 t||JTG
 

(** 	               #"T""""   *AA	A	c                     t                      5 }|                    d| f                                          }ddd           n# 1 swxY w Y   d |D             S )zLDevuelve posiciones abiertas agregadas: empresa, cantidad neta, coste medio.a  SELECT empresa, ticker,
                      SUM(CASE WHEN tipo='compra' THEN cantidad ELSE -cantidad END) AS cantidad_neta,
                      SUM(CASE WHEN tipo='compra' THEN cantidad*precio+comision
                               ELSE -(cantidad*precio-comision) END) AS coste_total
               FROM transacciones
               WHERE modo=?
               GROUP BY empresa, ticker
               HAVING cantidad_neta > 0.0001
               ORDER BY empresaNc                 ,    g | ]}t          |          S r%   r&   r(   s     r   r+   z"get_posiciones.<locals>.<listcomp>M   r,   r   r-   r/   s      r   get_posicionesr5   >   s    	 t||# G
 
 (** 	               #"T""""r2   c                      t                      5 } |                     d                                          }d d d            n# 1 swxY w Y   d |D             S )Nz*SELECT * FROM tickers_extra WHERE activo=1c                 ,    g | ]}t          |          S r%   r&   r(   s     r   r+   z%get_tickers_extra.<locals>.<listcomp>U   r,   r   r-   )r
   r0   s     r   get_tickers_extrar8   R   s    	 Ut||HIIRRTTU U U U U U U U U U U U U U U""T""""s   (AA
Ac                     t                      5 }|                    d| |f           d d d            d S # 1 swxY w Y   d S )NzLINSERT OR REPLACE INTO tickers_extra (nombre, ticker, activo) VALUES (?,?,1)r   )nombrer   r
   s      r      añadir_ticker_extrar;   X   s    	 
tZV	
 	
 	

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   599c                     t                      5 }|                    d| f           d d d            d S # 1 swxY w Y   d S )Nz0UPDATE tickers_extra SET activo=0 WHERE nombre=?r   )r:   r
   s     r   eliminar_ticker_extrar=   `   s    	 TtG&SSST T T T T T T T T T T T T T T T T Tr"   )r   r   )r   ospathjoindirname__file__r   r   r   r   r!   r1   r5   r8   r;   r=   r%   r   r   <module>rC      s     				
',,rwx00*
=
=    4
 
 
 
E E E
# # ## # #(# # #
 
 
T T T
 					r   