o
    ̿Si:                  
   @   s  d dl Z d dlmZ d dlmZ d dlmZ ddlmZm	Z	m
Z
 ddlmZ dd	lmZ dd
lmZmZmZ e eZdZdedejdede	fddZ	ddejdedee	 fddZdedejde	fddZdede
dejdede	f
ddZdejdefddZdS )    N)date)BackgroundTasks)
Collection   )SaaSInvoiceCreateSaaSInvoiceDBSaaSInvoiceUpdate)InvoiceStatus   )database)send_invoice_created_emailsend_invoice_paid_emailsend_invoice_reminder_emailsaas_invoices
invoice_indbbackground_tasksreturnc                    sZ   |t  }|  }||}t|j}|jt|| j| j| j	| j
d tdi |d|iS )N)
invoice_id
to_accounttitleamountdue_dater    )INVOICE_COLLECTIONdict
insert_onestrinserted_idadd_taskr   
account_idinvoice_titler   r   r   )r   r   r   colldataresultr   r   r   ;/var/www/html/Trade-python/app/v1/services/saas/invoices.pycreate_invoice_service   s   

r&   r    c                    s>   | t  }|rd|ini }t||dd}dd |D S )Nr    invoice_datec              	   S   s*   g | ]}t di |d t|d iqS )r   _idr   )r   r   ).0docr   r   r%   
<listcomp>.   s   * z)list_invoices_service.<locals>.<listcomp>)r   listfindsort)r   r    r"   querydocsr   r   r%   list_invoices_service(   s
   r2   r   c                    sH   |t  }|dt| i}|stdtdi |dt|d iS )Nr)   zInvoice not foundr   r   )r   find_oner   str_to_objectid
ValueErrorr   r   )r   r   r"   r+   r   r   r%   get_invoice_service0   s   r6   updatec                    sz   |t  }|dt| idd|jii |dt| i}tdi |d| i}|jtjkr;|j	t
| |j|jd |S )Nr)   $setstatusr   )r   r   r   r   )r   
update_oner   r4   r9   r3   r   r	   PAIDr   r   r    r   )r   r7   r   r   r"   updatedinvoicer   r   r%   update_invoice_status_service9   s    r>   c                    s   | t  }t }|d|idtjidddtjii |}||dtjid}|D ]}t|d }|j	t
||d |d d	 q+d
S )z5Mark overdue + send reminders for upcoming due dates.z$ltz$ne)r   r9   r8   r9   r)   r    r   )r   r   r   N)r   r   todayupdate_manyr	   r;   OVERDUEr.   r   r   r   )r   r   r"   r?   tomorrowcursorr+   r   r   r   r%   run_due_remindersP   s$   rD   )N)loggingdatetimer   fastapir   pymongo.collectionr   models.saas.invoicesr   r   r   models.commonr	   r   r   libraries.email_templatesr   r   r   	getLogger__name__loggerr   MongoDBr&   r   r-   r2   r6   r>   rD   r   r   r   r%   <module>   s\   



	
