o
    <,h                     @   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 d dlm	Z	 d dl
mZ d dlmZ d d	lmZmZ d d
lmZmZ dZdedefddZdedededee dee dee dee dee dee dee defddZdedefddZdededefdd Zdedefd!d"ZdS )#    N)datetime)ObjectId)	InvalidId)DuplicateKeyError)HTTPException)Optional)get_next_sequence_value_int)
VendorBaseVendorUpdate)	ASCENDING
DESCENDINGvendorsvendor_datareturnc              
   C   s  |t  }g d}|D ]}|| v r| | dkrd | |< q
zGt }|| d< || d< d| d< td|| d< || }t|j| d< t|j| d	< d
D ]}|| v r]t| | tr]| |  | |< qHd| iW S  t	yo   t
ddd ty } zt
ddt| dd }~ww )N)tax_idwebsitelogo created_dateupdated_dateactivestatusv_id_id	vendor_idr   r   r     zVendor creation failedstatus_codedetaili  zServer error: )COLLECTION_NAMEr   utcnowr   
insert_onestrinserted_id
isinstance	isoformatr   r   	Exception)r   dbvendors_collectionoptional_fieldsfieldcurrent_timeresulte r/   </var/www/html/moveengine/app/v1/services/platform/vendors.pycreate_vendor_service   s4   

r1   
account_idskiplimitqvendor_typer   created_date_fromcreated_date_tosort_by
sort_orderc              	   C   s  |
t  }i }| dkr| |d< |r%|dd}d|id|id|id|ig|d	< |r+||d
< |r1||d< |s5|rOi }|rAt|d|d< |rKt|d|d< ||d< ddd
dddddd}||d}|	dkrftnt}|||||	|}t
|}g }|D ];}t|d |d< t|d |d< |dd |dd dD ]}||v rt|| tr||  ||< q|| q||}||dS )Nallr2   i)z$regexz$optionsvendor_namecontact_person_nameemailphonez$orr6   r   z%Y-%m-%dz$gtez$lter   r   )idr=   r6   r>   r@   r?   r   r   ascr   r   user_idr   )total_countr   )r    r   strptimegetr   r   findsortr3   r4   listr#   
setdefaultr%   r&   appendcount_documents)r2   r3   r4   r5   r6   r   r7   r8   r9   r:   r(   r)   queryregex_query
date_querysort_fields
sort_fieldsort_dirvendors_cursorr   formatted_vendorsvendorr+   rD   r/   r/   r0   get_vendors_service6   s`   



rV   r   c                 C   s   zt | }W n ty   tdddw |t d|i}|s%tdddt|d |d< t|d |d< |dd	 |d
d	 dD ]}||v rXt|| trX|| 	 ||< qC|S Nr   Invalid vendor IDr   r     Vendor not foundr   r2   r   rC   r   )
r   r   r   r    find_oner#   rJ   r%   r   r&   )r   r(   vendor_object_idrU   r+   r/   r/   r0   read_vendor_service   s"   r]   c           
      C   s  |t  }zt| }W n ty   tdddw |d|i}|s'tddddd |  D }t |d	< |	d|id
|i}|j
dkrMtddd|d|i}t|d |d< t|d |d< |dd |dd dD ]}	|	|v rt||	 tr||	  ||	< qr|S )Nr   rX   r   r   rY   rZ   c                 S   s   i | ]\}}|d ur||qS )Nr/   ).0kvr/   r/   r0   
<dictcomp>   s    z)update_vendor_service.<locals>.<dictcomp>r   z$setr   r   r2   r   rC   r   )r    r   r   r   r[   
model_dumpitemsr   r!   
update_onematched_countr#   rJ   r%   r&   )
r   r   r(   r)   r\   existing_vendorupdate_datar-   updated_vendorr+   r/   r/   r0   update_vendor_service   s6   
ri   c                 C   s   |t  }zt| }W n ty   tdddw |d|i}|s'tddd|d|i t|d |d< t|d |d< |dd	 |d
d	 dD ]}||v rat|| t	ra|| 
 ||< qL|S rW   )r    r   r   r   r[   
delete_oner#   rJ   r%   r   r&   )r   r(   r)   r\   rU   r+   r/   r/   r0   delete_vendor_service   s&   rk   )jsonr   bsonr   bson.errorsr   pymongo.errorsr   fastapir   typingr   app.v1.services.sequencer   #app.v1.models.platform.vendormodelsr	   r
   pymongor   r   r    dictr1   r#   intrV   r]   ri   rk   r/   r/   r/   r0   <module>   sL    "	

M#