ó
    Ó¹Èj�  ã                   ó°   • S r SSKrSSKrSSKrSSKrSrSrS\S\4S jr	S\S\4S jr
SS\S\4S	 jjrS
\S\4S jrS\4S jrSS jrS\4S jrS\4S jrg)u¨  MEGOSZTOTT (KÃ–ZÃ–S) DOKUMENTUMOK - segÃ©dek (v80). LeÃ­rÃ¡s: docs/KOZOS_DOKUMENTUM.md

MI EZ?
    A HasznÃ¡lati utasÃ­tÃ¡s / GÃ©pkÃ¶nyv / Adatlap NEM egy adott gÃ©pre szÃ³l, hanem a gÃ©p TÃ�PUSÃ�RA (gyÃ¡rtÃ³ + tÃ­pus). Ezeket ezÃ©rt nem kell gÃ©penkÃ©nt Ãºjra
    fizikailag feltÃ¶lteni: egy fÃ¡jlra tÃ¶bb gÃ©p hivatkozhat (MiklÃ³s kÃ©rÃ©se).

HOGYAN MÅ°KÃ–DIK?
    * A megosztott fÃ¡jl fizikailag az `uploads/<cÃ©g>/kozos/` mappÃ¡ban van (NEM egy gÃ©p mappÃ¡jÃ¡ban), Ã©s MINDEN Ã©rintett gÃ©pnek sajÃ¡t `File` sora van
      ugyanarra az Ãºtvonalra (`/uploads/<cÃ©g>/kozos/<fÃ¡jlnÃ©v>`). SÃ©ma-vÃ¡ltozÃ¡s nincs: a "hivatkozÃ¡s" egyszerÅ±en egy kÃ¶zÃ¶s Ãºtvonalra mutatÃ³ File-sor,
      ezÃ©rt minden meglÃ©vÅ‘ olvasÃ³ (fÃ¡jllista, mobil napi ellenÅ‘rzÃ©s "HasznÃ¡lati utasÃ­tÃ¡s letÃ¶ltÃ©se", rendszeradmin export, PDF-ek) vÃ¡ltozatlanul mÅ±kÃ¶dik.
    * Az elsÅ‘ megosztÃ¡skor a fÃ¡jl a feltÃ¶ltÅ‘ gÃ©p mappÃ¡jÃ¡bÃ³l a kÃ¶zÃ¶s mappÃ¡ba kÃ¶ltÃ¶zik (mÃ¡solÃ¡s -> az adatbÃ¡zis commit -> csak utÃ¡na tÃ¶rlÅ‘dik a rÃ©gi pÃ©ldÃ¡ny,
      Ã­gy egy sikertelen mentÃ©s nem veszÃ­t fÃ¡jlt).
    * TÃ¶rlÃ©s: egy hivatkozÃ¡s tÃ¶rlÃ©se csak az adott gÃ©p sorÃ¡t tÃ¶rli; a FIZIKAI fÃ¡jl csak akkor tÃ¶rlÅ‘dik, ha az utolsÃ³ hivatkozÃ¡s is megszÅ±nt
      (`arva_kozos_torlese`). A rendszeradmin gÃ©p- / cÃ©ltÃ¶rlÃ©se is ezt hasznÃ¡lja, Ã­gy egy gÃ©p tÃ¶rlÃ©se nem viszi el a tÃ¶bbi gÃ©p dokumentumÃ¡t.
    * KiszolgÃ¡lÃ¡s: `/uploads/<cÃ©g>/kozos/<fÃ¡jl>` (routers/files.py) - akkor Ã©rhetÅ‘ el, ha a felhasznÃ¡lÃ³ LEGALÃ�BB EGY olyan gÃ©pet lÃ¡that (is_machine_allowed),
      amelynek van ilyen ÃºtvonalÃº File-sora (a gÃ©p-alapÃº ellenÅ‘rzÃ©s ide nem alkalmazhatÃ³, mert a fÃ¡jl nem egy gÃ©p mappÃ¡jÃ¡ban van).
é    N)u   HasznÃ¡lati utasÃ­tÃ¡su
   GÃ©pkÃ¶nyvÚAdatlapÚkozosÚ
company_idÚreturnc                 ó   • SU  S[          3$ )uV   A cÃ©g kÃ¶zÃ¶s dokumentum-mappÃ¡ja (fÃ¡jlrendszer-Ãºtvonal, tehÃ¡t NINCS vezetÅ‘ '/').zuploads/Ú/)ÚKOZOS_MAPPA_NEV©r   s    Ú*/var/www/website/kozos_dokumentum_utils.pyÚkozos_mappar      s   € à�j�\ ¤?Ð"3Ð4Ð4ó    c                 ó    • S[        U 5       S3$ )u?   Az adatbÃ¡zisban tÃ¡rolt Ãºtvonal elÅ‘tagja (vezetÅ‘ '/' -tel).r   )r   r
   s    r   Úkozos_prefixr   "   s   € àŒ{˜:Ó&Ð' qÐ)Ð)r   c                 ó,  • U (       d  gUb  U R                  [        U5      5      $ U R                  S5      n[        U5      S:H  =(       aJ    US   S:H  =(       a;    US   R	                  5       =(       a!    US   [
        :H  =(       a    [        US   5      $ )	up   Igaz, ha az Ãºtvonal egy kÃ¶zÃ¶s mappÃ¡ba mutat (adott cÃ©gre, vagy - ha company_id None - bÃ¡rmelyik cÃ©gÃ©re).Fr   é   é   Úuploadsé   é   é   )Ú
startswithr   ÚsplitÚlenÚisdigitr	   Úbool)Ú	file_pathr   Úreszeks      r   Úkozos_utvonal_er   '   s    € æØØÑØ×#Ñ#¤L°Ó$<Ó=Ð=Ø�_‰_˜SÓ!€FÜˆv‹;˜!Ñ÷  D  q¡	¨YÑ 6÷  D¸6À!¹9×;LÑ;LÓ;N÷  DÐSYÐZ[ÑS\Ô`oÑSo÷  DÔtxÐyð  ABñ  zCó  uDð  Dr   r   c                 ó°   • U R                  [        R                  5      R                  [        R                  R                  U:H  5      R                  5       $ )u(   HÃ¡ny File-sor mutat erre az Ãºtvonalra.)ÚqueryÚmodelsÚFileÚfilterr   Úcount)Údbr   s     r   Úhivatkozas_szamr&   1   s8   € à�8‰8”F—K‘KÓ ×'Ñ'¬¯©×(=Ñ(=ÀÑ(JÓK×QÑQÓSÐSr   c                 óZ  • [        U R                  U5      (       a  gU R                  =(       d    SR                  S5      nU(       a$  [        R                  R                  U5      (       d  [        U5      e[        U5      n[        R                  " USS9  [        R                  R                  U5      n[        R                  R                  U5      u  pV[        S5       H‰  nUS:X  a  UO(U S[        R                  " 5       R                  S	S
  U 3nU SU 3n	 [        U	S5       n
[        US5       n[         R"                  " Xº5        S	S	S	5        S	S	S	5        SU	-   U l        X)4s  $    ['        S5      e! , (       d  f       N2= f! , (       d  f       N;= f! [$         a     MÇ  f = f)uÁ  BiztosÃ­tja, hogy a File-sor fizikai fÃ¡jlja a cÃ©g kÃ¶zÃ¶s mappÃ¡jÃ¡ban legyen. Ha mÃ©g nem ott van: Ã¡tmÃ¡solja (a rÃ©git NEM tÃ¶rli), Ã©s Ã¡tÃ­rja a
`fajl.file_path`-t. VisszatÃ©rÃ©s: a rÃ©gi fizikai fÃ¡jl Ãºtvonala (amit a hÃ­vÃ³ a COMMIT UTÃ�N tÃ¶rÃ¶l `fizikai_torol`-ral), vagy None, ha mÃ¡r kÃ¶zÃ¶s
volt; mÃ¡sodik elem: az Ãºjonnan lÃ©trehozott mÃ¡solat Ãºtvonala (hibÃ¡nÃ¡l a hÃ­vÃ³ ezt tÃ¶rli). HiÃ¡nyzÃ³ forrÃ¡sfÃ¡jlnÃ¡l FileNotFoundError.)NNÚ r   T)Úexist_oké   r   Ú_Né   ÚxbÚrbu=   Nem sikerÃ¼lt egyedi fÃ¡jlnevet kÃ©pezni a kÃ¶zÃ¶s mappÃ¡ban.)r   r   ÚlstripÚosÚpathÚisfileÚFileNotFoundErrorr   ÚmakedirsÚbasenameÚsplitextÚrangeÚuuidÚuuid4ÚhexÚopenÚshutilÚcopyfileobjÚFileExistsErrorÚRuntimeError)Úfajlr   ÚforrasÚmappaÚnevÚtorzsÚkiterjesztesÚkiserletÚjeloltÚhelyÚcelÚbes               r   Úkozosbe_masolrK   6   sX  € ô �t—~‘~ z×2Ñ2ØØ�n‰n×" ×*Ñ*¨3Ó/€FÞœŸ™Ÿ™¨×/Ñ/Ü Ó'Ð'Ü˜
Ó#€EÜ‡K‚K� Ò%Ü
�'‰'×
Ñ
˜6Ó
"€CÜŸ'™'×*Ñ*¨3Ó/Ñ€EÜ˜!–HˆØ  A›‘¨e¨W°A´d·j²j³l×6FÑ6FÀrÈÐ6JÐ5KÈLÈ>Ð+ZˆØ�˜˜&˜Ð"ˆð	Ü�d˜DÔ! S¬$¨v°tÔ*<ÀÜ×"Ò" 2Ô+÷ +=×!ð ˜t™ˆŒØˆ|Òñ ô ÐVÓ
WÐW÷ +=Õ*<ú×!Õ!ûäó 	Úð	úsH   ÄFÄ*FÄ7E:ÅFÅFÅ:
FÆFÆ
F	ÆFÆFÆ
F*Æ)F*c                 ó€   • U (       a'   [         R                  " U R                  S5      5        gg! [         a     gf = f)uq   Fizikai fÃ¡jl tÃ¶rlÃ©se, hiba esetÃ©n csendben (a hÃ­vÃ³ mÃ¡r commitolt; egy Ã¡rva fÃ¡jl nem okoz adatvesztÃ©st).r   N)r0   Úremover/   ÚOSError)rH   s    r   Úfizikai_torolrO   P   s8   € æð	Ü�IŠI�d—k‘k #Ó&Õ'ð øô ó 	Ùð	ús   ‰%0 °
=¼=c                 ód  • U(       d
  [        5       $ U R                  [        R                  R                  5      R                  [        R                  R                  R                  [        U5      5      5      R                  5        Vs1 s H  u  n[        U5      (       d  M  UiM     sn$ s  snf )u“   A megadott gÃ©pek File-sorainak kÃ¶zÃ¶s mappÃ¡ba mutatÃ³ Ãºtvonalai (tÃ¶rlÃ©s elÅ‘tt gyÅ±jtendÅ‘, tÃ¶rlÃ©s utÃ¡n `arva_kozos_torlese`-nek adandÃ³).)Úsetr    r!   r"   r   r#   Ú
machine_idÚin_ÚlistÚallr   )r%   Úgep_idkÚus      r   Úkozos_utvonalakrX   Y   s~   € æÜ‹uˆà—h‘hœvŸ{™{×4Ñ4Ó5×<Ñ<¼V¿[¹[×=SÑ=S×=WÑ=WÔX\Ð]dÓXeÓ=fÓg×kÑkÔmóÚm‰dˆqÜ˜1×÷ 	
Ñmñð ùò s   Â
B-Â$B-c                 ó  • Sn[        U=(       d    / 5       Hk  n[        U5      (       d  M  [        X5      S:X  d  M&  [        R                  R                  UR                  S5      5      (       d  M[  [        U5        US-  nMm     U$ )u%  A felsorolt kÃ¶zÃ¶s Ãºtvonalak kÃ¶zÃ¼l azokat a fizikai fÃ¡jlokat tÃ¶rli, amelyekre MÃ�R NEM mutat egyetlen File-sor sem. Visszaadja a tÃ¶rÃ¶lt fÃ¡jlok szÃ¡mÃ¡t.
A hÃ­vÃ¡s a File-sorok tÃ¶rlÃ©se UTÃ�N (azonos vagy kÃ¼lÃ¶n tranzakciÃ³ban, de a tÃ¶rlÃ©s lÃ¡thatÃ³vÃ¡ vÃ¡lÃ¡sa utÃ¡n) tÃ¶rtÃ©njen.r   r   r   )rQ   r   r&   r0   r1   r2   r/   rO   )r%   Ú	utvonalakÚtoroltÚutvonals       r   Úarva_kozos_torleser]   c   sg   € ð €FÜ�y— BÖ'ˆÜ˜7×#Ó#¬¸Ó(DÈÕ(IÜ�w‰w�~‰~˜gŸn™n¨SÓ1×2Ó2Ü˜gÔ&Ø˜!‘’ñ	 (ð
 €Mr   )N)r   N)Ú__doc__r0   r<   r8   r!   ÚKOZOS_FAJLTIPUSOKr	   ÚintÚstrr   r   r   r   r&   rK   rO   rQ   rX   r]   © r   r   Ú<module>rc      s£   ðñó" 
Û Û ã ð HÐ Ø€ð5˜Cð 5 Cô 5ð
*˜Sð * Sô *ñ
D¨3ð D¸$õ DðT 3ð T¨3ô Tð
X Cô Xô4ð Cô ð	¨õ 	r   