o
    0iW                  	   @   s   d dl Z d dlZeje je je jedd d dlZd dl	m
Z
 d dlmZmZ G dd dZedkrHdZd	Ze Zeee dS dS )
    Nz..)load_environment_variables)	get_cache	set_cachec                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd%dd Zd!d" Zd#d$ ZdS )&PigeonCloudz
    PigeonCloud API client for managing entry information, job information,
    agent information, and sales data.

    This class provides methods to interact with the PigeonCloud API and
    sync data with Google Spreadsheets.
    c                 C   s   t   td| _| jstdtd| _| jstdd| j d| _d| j d| _td| _d	g| _	td
| _
td| _td| _td| _d| _dS )zq
        Initialize PigeonCloud client.
        Loads environment variables and sets up API credentials.
        
PIGEON_APIz*PIGEON_API environment variable is not setAPI_KEYz'API_KEY environment variable is not setzhttps://z/api/v1/get_recordz/api/v1/recordPROD_SERVICE_ACCOUNT_FILEz,https://www.googleapis.com/auth/spreadsheetsMASTER_ENTRY_INFO_IDJOB_INFO_IDWEBHOOK_URL_AGWEBHOOK_URL_CS_NOTICEN)r   osgetenv
pigeon_api
ValueErrorapi_keyapi_urlrecord_api_urlprod_service_account_filescopesmaster_entry_info_idjob_info_idwebhook_url_agwebhook_url_cs_notice_gspread_client)self r   </var/www/html/status_management/src/services/pigeon_cloud.py__init__   s    
zPigeonCloud.__init__c                 C   sn   g d}d|dddgd}| j dd}tj| j||d	}|jd
kr(td dS td|j  t|j dS )uJ   
        大学条件の作成

        Returns:
            None
        )io  i  i  i  ik  il  i  i$  dataset__50u   田村さん用ボールドZ   )
field__318
field__317
field__319tabledataapplication/jsonzx-pigeon-authorizationzContent-Typejsonheaders   zSuccess to uopload filesFailed to get records: N)r   requestspostr   status_codeprinttext)r   univ_id	json_bodyr+   responser   r   r   create_univ_conditions7   s"   

z"PigeonCloud.create_univ_conditionsc                 C   sr   dddd|dddd|dgdd}| j d	d
}tj| j||d}|jdkr*| S td|j  t|j dS )W   
        CA向け発行タスクがすでに発行されているかの確認

        dataset__116andfield__1302eqand_orfield	conditionvaluefield__1297   )r%   r?   limitr'   r(   r)   r,   r-   Fr   r.   getr   r0   r*   r1   r2   )r   entry_id	undo_textr4   r+   r5   r   r   r   get_user_undo_task\   s.   

zPigeonCloud.get_user_undo_taskc                 C   st   dddd|ddddddgdgd	}| j d
d}tj| j||d}|jdkr+| S td|j  t|j dS )r7   r8   r9   r:   r;   r<   field__1298	   未対応u	   対応中)r%   r?   r'   r(   r)   r,   r-   FrD   )r   rF   r4   r+   r5   r   r   r   get_user_latest_undo_task   s,   

z%PigeonCloud.get_user_latest_undo_taskc                 C   d   d||d|dgd}| j dd}tj| j||d}|jdkr#| S td	|j  t|j d
S )   
        担当CAタスク作成

        Args:
            company_id: 企業ID
            user_name: ユーザー名

        Returns:
            dict: Response data if successful, None otherwise
        r8   rJ   r:   rA   rI   field__1304r$   r'   r(   r)   r,   r-   Nr   r.   r/   r   r0   r*   r1   r2   r   rF   rG   step_statusr4   r+   r5   r   r   r   create_user_undo_task   "   

z!PigeonCloud.create_user_undo_taskc                 C   rL   )rM   r8   u   対応完了rN   r$   r'   r(   r)   r,   r-   NrP   rQ   r   r   r   create_user_done_task   rT   z!PigeonCloud.create_user_done_taskc                 C   s`   d|ddgd}| j dd}tj| j||d}|jdkr!| S td	|j  t|j d
S )r7   r8   u   完了)idrI   r$   r'   r(   r)   r,   r-   Fr   r.   putr   r0   r*   r1   r2   )r   task_idr4   r+   r5   r   r   r   update_user_undo_task_status   s   

z(PigeonCloud.update_user_undo_task_statusc                 C   s   dddd|dddd|ddddd	d
gdgdd}| j dd}tj| j||d}|jdkr2| S td|j  t|j dS )u   
        エントリーデータアップデート

        Args:
            company_id: 企業ID
            user_name: ユーザー名

        Returns:
            dict: Response data if successful, None otherwise
        20r9   
field__888r;   r<   	field__66inc
field__918   2026卒   2027卒   table_idr?   rC   r'   r(   r)   r,   r-   N)r   r.   r/   r   r0   r*   r1   r2   )r   
company_id	user_namer4   r+   r5   r   r   r   fetch_entry_data  s8   

zPigeonCloud.fetch_entry_datac                 C   s   dddd|dgd}| j dd}tj| j||d	}|jd
kr1| }|d d d dd}|S td|j  t|j dS )u   
        フロントCSのSlackIDを取得

        Args:
            company_id: 企業ID

        Returns:
            str: Slack ID if successful, None otherwise
        13r9   rV   r;   r<   )rd   r?   r'   r(   r)   r,   r&   r   raw_datafield__1014Nr-   )	r   r.   r/   r   r0   r*   rE   r1   r2   )r   re   r4   r+   r5   response_datacs_front_slack_idr   r   r   fetch_cs_front_slack_idA  s&   

z#PigeonCloud.fetch_cs_front_slack_idc                 C   s   |  |}dddd|gdddd|ddddd	d
gdgdd}| jdd}tj| j||d}|jdkr8| S td|j  t|j dS )u  
        エントリーリストから該当の求人IDのデータを取得

        Args:
            company_job_id: 求人ID
            user_name: ユーザー名

        Returns:
            dict: Response data if successful, None otherwise
        r[   r9   
field__766r;   r<   r]   r^   r_   r`   ra   rb   rc   r'   r(   r)   r,   r-   N)	_parse_to_tupler   r.   r/   r   r0   r*   r1   r2   )r   company_job_idrf   tuple_company_job_idr4   r+   r5   r   r   r   fetch_job_entry_datag  s:   


z PigeonCloud.fetch_job_entry_datac           	      C      d| }t |}|dur|S dddd|dgdd	d
d}| jdd}tj| j||d}|jdkrT| d }|rJ|d d d }t||dd |S td| d dS td|j  t|j	 dS )u   
        stepに該当するidを返す関数

        Args:
            user_step: ユーザーステップ

        Returns:
            int: Step ID if successful, None otherwise
        z	step_id::N53r9   
field__327r;   r<   r   rB   id descrd   r?   offsetrC   orderr'   r(   r)   r,   r&   ri   rV   Q ttlu   ステップ "8   " がデータベースに見つかりませんでしたr-   
r   r   r.   r/   r   r0   r*   r   r1   r2   )	r   	user_step	cache_key	cached_idr4   r+   r5   r&   rV   r   r   r   step_convert_id  <   


zPigeonCloud.step_convert_idc                 C   s   d| }t |}|dur|S dddd|dgdd	d
d}| jdd}tj| j||d}|jdkrF| d d d d }t||dd |S td|j  t|j	 dS )u   
        stepに該当する順序(field__1315)を返す関数

        Args:
            user_step: ユーザーステップ

        Returns:
            int: Step order if successful, None otherwise
        zstep_order::Nrt   r9   ru   r;   r<   r   rB   rv   rw   r'   r(   r)   r,   r&   ri   field__1315rz   r{   r-   r~   )r   r   r   cached_orderr4   r+   r5   ry   r   r   r   get_step_order  s4   


zPigeonCloud.get_step_orderc           	      C   rs   )u   
        statusに該当するidを返す関数

        Args:
            user_status: ユーザーステータス

        Returns:
            int: Status ID if successful, None otherwise
        zstatus_id::N54r9   
field__341r;   r<   r   rB   rv   rw   r'   r(   r)   r,   r&   ri   rV   rz   r{   u   ステータス "r}   r-   r~   )	r   user_statusr   r   r4   r+   r5   r&   rV   r   r   r   status_convert_id  r   zPigeonCloud.status_convert_idc	              
   C   st   d||||||||dgd}	| j dd}
tj| j|	|
d}|jdkr+td | S td	|j  t|j d
S )u  
        説明会日程を追加

        Args:
            job_id: 求人情報ID
            orientation_day: 日付
            start_time: 開始時間
            end_time: 終了時間
            location: 会場
            max_capacity: 定員
            deadline: 締め切り
            new_task: 発行タスク

        Returns:
            dict: Response data if successful, None otherwise
        dataset__70)
field__565
field__560
field__564
field__562
field__558
field__559
field__563
field__740r$   r'   r(   r)   r,   zSuccess to uopload datesr-   N)r   r.   r/   r   r0   r1   r*   r2   )r   job_idorientation_day
start_timeend_timelocationmax_capacitydeadlinenew_taskr4   r+   r5   r   r   r   add_orientation_date7  s,   

z PigeonCloud.add_orientation_dateNc                 C   s   d|i}|dur||d< |dur||d< d|gd}| j dd}tj| j||d	}|jd
kr2| S td|j  t|j dS )u  
        エントリーのstep、status、stepstatusを一括更新

        Args:
            entry_id: エントリーID
            user_step: ユーザーステップ (optional)
            user_status: ユーザーステータス (optional)
            user_undo_text: 未完了テキスト (optional)
            booking_status: 予約ステータス (optional)

        Returns:
            dict: Response data if successful, None otherwise
        rV   N
field__330
field__343dataset__20r$   r'   r(   r)   r,   r-   rW   )r   rF   r   r   r&   r4   r+   r5   r   r   r   update_entry_data_allg  s"   

z!PigeonCloud.update_entry_data_allc                 C   s   dddd|ddddddgddd	dd
dgdd}| j dd}tj| j||d}|jdkr2| S td|j  t|j dS )u   
        RPAを回す必要のある情報だけを取得

        Args:
            company_id: 企業ID

        Returns:
            dict: Response data if successful, False otherwise
        r   r9   r\   r;   r<   r      	   r_   r`   r   )r%   r?   rx   r'   r(   r)   r,   r-   FrD   )r   re   r4   r+   r5   r   r   r   rpa_get_applicants_data  s8   

z#PigeonCloud.rpa_get_applicants_datac                 C   s@   |  }d|v rtdd |dD S | rt|fS |fS )u   
        文字列をタプルにパース

        Args:
            raw: 入力文字列

        Returns:
            tuple: パースされたタプル
        ,c                 s   s$    | ]}|  rt|  V  qd S )N)stripint).0xr   r   r   	<genexpr>  s   " z.PigeonCloud._parse_to_tuple.<locals>.<genexpr>)r   tuplesplitisdigitr   )r   rawsr   r   r   ro     s   
zPigeonCloud._parse_to_tuple)NN)__name__
__module____qualname____doc__r   r6   rH   rK   rS   rU   rZ   rg   rm   rr   r   r   r   r   r   r   ro   r   r   r   r   r      s&    "%&%%%3&6505
0+1r   __main__testiV  )r   syspathappendabspathjoindirname__file__r.   config.load_envr   utils.cache_managerr   r   r   r   rG   rF   pcrS   r   r   r   r   <module>   s$    (     U