
    .i4                         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 d d	lmZmZmZmZ d d
lmZ d dlmZ  G d d      Zy)    N)List)HTTPException)load_workbook)NetworkPlanningCreateNetworkPlanningResponseNetworkPlanningUpdate)JWTPayloadSchema)Messages)NetworkPlanningBaseTblNetworkPlanning)calculate_total_store_counts#calculate_total_store_counts_updateremove_external_linkssafe_load_workbook)Session)CustomResponsec                   ^    e Zd ZdedefdZdee   fdZde	fdZ
de	fdZdefd	Zd
e	fdZy)NetworkPlanningServicedbtokenc                      || _         || _        y )N)r   r   )selfr   r   s      >/var/www/html/retail-simulation-api/app/api/network/service.py__init__zNetworkPlanningService.__init__   s    
    requestc                   K   d}d}t        ||      }t        |       |j                  |       |d   }|D ]H  }t        |      }t	        di |j                         |}t        j                  || j                        }	| j                  j                          |	j                  dk  std|	j                  z   }
|j                  |d|
 <   |j                  |d|
 <   |j                  |d|
 <   |j                  |d	|
 <   |j                  |d
|
 <   |j                   |d|
 <   |j"                  |d|
 <   |j$                  |d|
 <   |j&                  |d|
 <   |j(                  |d|
 <   |j*                  |d|
 <   K |j                  |       |j-                          t/        d|       t1        dt2        j4                        S w)Nz;uploaded_files/Simulation_Test_file_clean_final_output.xlsxz+files/Simulation_Test_file_clean_final.xlsxzRollout Plan	      CDEFGHKLMNOu"   ✅ Excel updated successfully at:1statusmessage )r   r   saver   r   
model_dumpr   creater   commit
network_idlocationformat_a_y1format_a_y2format_a_y3format_a_y4format_a_y5format_b_y1format_b_y2format_b_y3format_b_y4format_b_y5closeprintr   r
   NETWORK_CREAT)r   r   OUTPUT_PATH
EXCEL_PATHworkbooksheetreqstore_countsnew_datatestrows              r   create_network_planz*NetworkPlanningService.create_network_plan   s    SB
%k:>h'k" (C7<L*NS^^-=NNH%,,Xtww?DGGNN!#$//) $,#4#4#i #+#7#7#i #+#7#7#i #+#7#7#i #+#7#7#i #+#7#7#i #+#7#7#i #+#7#7#i #+#7#7#i #+#7#7#i #+#7#7#i - 2 	k"2K@S(2H2HIIs   B'G
*D G
group_idc                    K   t        j                  || j                        }|st        dt        j
                  d       S t        j                  |      }t        dd|      S w)N-1)r-   r.   data0Success)r   get_by_group_idr   r   r
   NETWORK_NOT_FOUNDr   model_validate)r   rM   networknetwork_datas       r   get_networkz"NetworkPlanningService.get_network   sT     $44XtwwG!x7Q7QX\]].==gFS),OOs   A"A$c                    K   | j                   j                  t              j                  t        j                  |k(        j                         }|D cg c]  }t        j                  |d       c}S c c}w w)NT)from_attributes)r   queryr   filterrM   allr   rU   )r   rM   resultsrK   s       r   get_network_by_groupz+NetworkPlanningService.get_network_by_group   sc     77==!34;;<N<W<W[c<cdhhj]de]dVY'66sDQ]deees   AA:A52A:c                   K   |j                   }t        j                  || j                        }|st	        dt
        j                        |j                  d      }t        ||      }|j                  |       t        di |}t        j                  ||| j                         t        dt
        j                        S w)Ni  )status_codedetailT)exclude_unsetr+   r,   r/   )r4   r   	get_by_idr   r   r
   rT   r1   r   updater   r   NETWORK_UPDATE)r   r   r4   existing_planupdate_datarH   updated_datas          r   update_network_planz*NetworkPlanningService.update_network_plan   s     ''
*44ZIC8R8RSS((t(<:;V<(*9[9!!*lDGGDS(2I2IJJs   C Cr4   c                    K   t        j                  || j                        }|st        dt        j
                        S t        dt        j                        S w)NrO   r,   r+   )r   deleter   r   r
   rT   NETWORK_DELETE)r   r4   deleted_network_plans      r   delete_network_planz*NetworkPlanningService.delete_network_plan   sF     188TWWM#!x7Q7QRRS(2I2IJJs   AAN)__name__
__module____qualname__r   r	   r   r   r   rL   intrX   r_   r   rj   ro   r/   r   r   r   r      sd    7 +; /J6K1L /J^P# Pf3 f
K1F 
KK3 Kr   r   )ostypingr   fastapir   openpyxlr   app.api.network.schemasr   r   r   app.dependency.authanticationr	   app.locale.messagesr
   app.models.main.network_planr   r   app.utils.common_utilsr   r   r   r   sqlalchemy.ormr   app.utils.schemas_utilsr   r   r/   r   r   <module>r      s@    	  ! " i i : ( P P  P " 2uK uKr   