|/jOMddlZddlZddlmZmZmZmZmZmZm Z m Z m Z m Z m Z mZmZmZddlmZmZmZddlmZejejejedZddlmZmZddlm Z m!Z!ddl"m#Z#m$Z$dd l%m&Z&dd l'm(Z(dd l)m*Z*dd l+m,Z,dd l-m.Z.GddeZ/GddeZ0GddeZ1GddeZ2GddeZ3dS)N) QMainWindowQWidget QVBoxLayout QHBoxLayoutQLabel QLineEdit QPushButton QTableWidgetQTableWidgetItem QComboBox QMessageBoxQFrame QSizePolicy QApplication)QThread pyqtSignalQt)loggerz session.json) GemmaSessionSessionExpiredError)search SearchResult) get_detail save_detail)fetch_distributori) DetailDialog) SessionDialog)SearchableCombo)BulkDistribDialogcPeZdZeeZeeZfdZdZ xZ S)_DistributoriWorkercVt||_dSN)super__init___session)selfsession __class__s (C:\PYTHON\GemmaClient\app\main_window.pyr%z_DistributoriWorker.__init__s$  c |jt|jdS#t$r2}|jt |Yd}~dSd}~wwxYwr#)doneemitrr& Exceptionerrorstr)r'es r*runz_DistributoriWorker.runsw $ INN-dm<< = = = = = $ $ $ JOOCFF # # # # # # # # # $s,0 A,'A''A,) __name__ __module__ __qualname__rlistr-r1r0r%r3 __classcell__r)s@r*r!r!sc :d  D JsOOE     $$$$$$$r+r!cXeZdZeeeeeZeeZdfd Z dZ xZ S) _SearchWorkerct||_||_||_||_||_dSr#)r$r%r&_titolo_tipo_distributore_id_pagina)r'r(titolotipodistributore_idpaginar)s r*r%z_SearchWorker.__init__*sA    / r+c t|j|j|j|j|j\}}}}|j||||dS#t$r2}|j t|Yd}~dSd}~wt$r(}|j d|Yd}~dSd}~wwxYw)NzErrore ricerca: ) rr&r?r@rArBr-r.rr0r1r/)r'headersresultstotal total_pagesr2s r*r3z_SearchWorker.run2s 439 t|TZ%t|44 0GWe[ INN7GUK @ @ @ @ @" $ $ $ JOOCFF # # # # # # # # # 4 4 4 JOO2q22 3 3 3 3 3 3 3 3 3 4s$AA B>'B  B>B99B>)r<r=) r4r5r6rr7intr-r1r0r%r3r8r9s@r*r;r;&sn :dD#s + +D JsOOE 4 4 4 4 4 4 4r+r;cPeZdZeeZeeZfdZdZ xZ S) _DetailWorkercdt||_||_dSr#)r$r%r& _product_id)r'r( product_idr)s r*r%z_DetailWorker.__init__Cs.  %r+cN t|j|j}|j|dS#t $r2}|jt|Yd}~dSd}~wt$r(}|jd|Yd}~dSd}~wwxYw)NzErrore caricamento dettaglio: ) rr&rPr-r.rr0r1r/)r'datar2s r*r3z_DetailWorker.runHs BdmT-=>>D INN4 " $ $ $ JOOCFF # # # # # # # # # B B B JOO@Q@@ A A A A A A A A A Bs!48 B$'A// B$<BB$) r4r5r6rdictr-r1r0r%r3r8r9s@r*rNrN?sj :d  D JsOOE&&&&& BBBBBBBr+rNceZdZeeeZeeeZeeZde ededeffd Z dZ xZ S)_BulkUpdateWorker product_idsdist_id dist_namect||_||_||_||_dSr#)r$r%r& _product_ids_dist_id _dist_name)r'r(rWrXrYr)s r*r%z_BulkUpdateWorker.__init__Ws:  ' #r+c d}d}t|j}t|jdD]\}} t|j|}|j|d<|j|d<t|j||dz }tj d|d|d|dn<#t$r/}|dz }tj d|d|d|d |Yd}~nd}~wwxYw|j |||j ||dS) Nrr=zdistributore.idzdistributore.ragioneSocialez Bulk update /z: id=z OKu ERRORE — )lenr[ enumeraterr&r\r]rrinfor/r0stepr.r-)r'okerrorsrJipid form_datar2s r*r3z_BulkUpdateWorker.run^sZ D%&& 1155 % %FAs R&t}c:: /3} +,;?? 78DM9555a C1CCuCC3CCCDDDD R R R!  PAPPPPCPPQPPQQQQQQQQ R INN1e $ $ $ $ r6"""""sA!B C %C  C) r4r5r6rrLrcr-r1r0r7r%r3r8r9s@r*rVrVRs :c3  D :c3  D JsOOE$T#Y$$QT$$$$$$#######r+rVcTeZdZfdZdZdefdZdefdZde fdZ defdZ dZ d Z d efd Zd efd Zd efdZdZdefdZdefdZdZdZdefdZdZdZdedeededefdZdededefdZd Z d!e!fd"Z"d#e#fd$Z$d%Z%d&Z&dedefd'Z'd ed(efd)Z(d*efd+Z)xZ*S), MainWindowctt|_g|_g|_d|_d|_d|_d|_ d|_ d|_ | dSNr=) r$r%rr& _result_ids _distributori_search_worker_detail_worker_distrib_worker _bulk_worker _current_page _total_pages_init_ui)r'r)s r*r%zMainWindow.__init__rsu $ &(464848;?6:"#!" r+c|d|ddt}||t |}|d|dddd||t}| tj j | tjj|||||||||d|dS)Nu.GemmaClient — Anagrafica Prodotti e PrestitiiLi zAvvio in corso...)setWindowTitlesetMinimumSizersetCentralWidgetr setSpacingsetContentsMargins addLayout_build_session_barr setFrameShapeShapeHLinesetFrameShadowShadowSunken addWidget_build_search_bar _build_table_build_pagination_bar statusBar showMessage _auto_connect)r'centrallayoutseps r*ruzMainWindow._init_uis LMMM D#&&&)) g&&&W%%!!!"b"b1110022333hh &,,--- 6=/000//11222**,,---3355666 $$%8999 r+returnct}td|_|jd||j|t d|_|jd|jj |j ||j|S)N● Disconnesso"color: #c0392b; font-weight: bold;zInserisci chiave sessione) rr _status_label setStyleSheetr addStretchr _session_btn setFixedWidthclickedconnect_open_session_dialogr'rows r*rzMainWindow._build_session_barsmm#$566 (()MNNN d())) '(CDD '',,, !))$*CDDD d'((( r+ct}|dt}|t dt |_|jd|jj |j ||jd|t dt|_ |j dd|j d d |j d d ||j td |_|jd|jd|jj |j ||jtd|_|jd|jj |j||j||t}|t dt-|_|jd|jd|jd||j|td|_|jd|jd|jd|jj |j||j|||S)NzTitolo:z es. PHREAKERr=)stretchzTipo:ContienecontieneUgualeugualez Inizia periniziaCercaPFPulisciz Distributore:z;Digita almeno 3 lettere per filtrare (lascia vuoto = tutti)i|zCambia distributore...u8Seleziona una o più righe dalla griglia, poi clicca qui)rr|rrrr _titolo_inputsetPlaceholderText returnPressedr_searchr _tipo_comboaddItemr _search_btnr setEnabledr _clear_btn_puliscir~r_distributore_inputsetMinimumWidthr _bulk_btn setToolTip_on_bulk_distrib)r'outerrow1row2s r*rzMainWindow._build_search_bars)  }} vi(()))&[[ --n=== (00>>> t)1555 vg'''$;;   Z888   8444   x888 t'(((&w// &&r*** ##E***  ((666 t'(((%i00 %%b))) '' 666 t''' }} vo..///#2#4#4   334qrrr  00555  ++E222 t/000 $%=>> $$S))) !!%((( !!"\]]] &&t'<=== t~&&&  r+ct|_|jtjj|jtjj|jtj j |j d|j d|jd|jt"jjt"jj|jj|j|jj|j|jS)NTF)r _tablesetEditTriggers EditTriggerNoEditTriggerssetSelectionBehaviorSelectionBehavior SelectRowssetSelectionMode SelectionModeExtendedSelectionsetAlternatingRowColorshorizontalHeadersetStretchLastSectionverticalHeader setVisible setSizePolicyrPolicy ExpandingitemDoubleClickedr_on_row_double_clickeditemSelectionChanged_on_selection_changedr's r*rzMainWindow._build_tables"nn  ##L$<$KLLL (()G)RSSS $$\%?%QRRR ++D111 $$&&< @R@\]]] %--d.IJJJ (001KLLL{r+cNt}td|_||j|t d|_|jd|jd|jj |j ||jtd|_ |j d||j t d|_|jd|jd|jj |j||j|S)Nr<u← PrecedentexFzmargin: 0 8px;uSuccessivo →)rr _total_labelrrr _prev_btnrrrr_go_prev _page_labelr _next_btn_go_nextrs r*rz MainWindow._build_pagination_barsTmm"2JJ d'((( $%566 $$S))) !!%((( &&t}555 dn%%%!":: &&'7888 d&'''$%566 $$S))) !!%((( &&t}555 dn%%% r+c~ tt5}tj|dd}dddn #1swxYwY|r||dSn9#t $rYn-t$r!}tj d|Yd}~nd}~wwxYw| dS)N jsessionidr<z"Impossibile leggere session.json: ) open _SESSION_FILEjsonloadget _do_connectFileNotFoundErrorr/rwarningr)r'fjsidr2s r*rzMainWindow._auto_connects' Em$$ :y||'' b99 : : : : : : : : : : : : : : :   &&& !    D E E E NCCC D D D D D D D D E !!#####s?A0)A  A0 AA0AA00 B&< B&B!!B&ct|} tt5}tj|dd}dddn #1swxYwY||n#t$rYnwxYw|r=| r+| | dSdSdS)Nparentrr<) rrrrrrset_jsessionidr/execrr)r'dlgrsaveds r*rzMainWindow._open_session_dialogs$4((( m$$ ; ! ((r:: ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;   u % % % %    D  88:: /#..** /   S^^-- . . . . . / / / /s4A<)A A<AA<"A#A<< B B rc|j||||d|dS)NT)r&r_save_jsessionid_set_connected_load_distributori)r'rs r*rzMainWindow._do_connectsX d### d### D!!! !!!!!r+c ttd5}tjd|i|ddddS#1swxYwYdS#t$r"}t jd|Yd}~dSd}~wwxYw)Nwrz"Impossibile salvare session.json: )rrrdumpr/rr)r'rrr2s r*rzMainWindow._save_jsessionid!s EmS)) 3Q <.222 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 E E E NCCC D D D D D D D D D Es7A < A AA AA A5A00A5rdc|rw|jd|jd|jd|ddS|jd|jd|jd|jd|ddS) Nu ● Connessoz"color: #27ae60; font-weight: bold;TuConnesso — cerca un prodottorrFzSessione scaduta)rsetTextrrrrrr)r'rds r*rzMainWindow._set_connected(s =   & &~ 6 6 6   , ,-Q R R R   ' ' - - - NN   ( ()I J J J J J   & &'8 9 9 9   , ,-Q R R R   ' ' . . .  $ / / 6 6 6 NN   ( (); < < < < z/MainWindow._load_distributori..8sV^DebcDeDe5f5fr+)r!r&rqr-r_on_distributori_loadedr0startrs r*rzMainWindow._load_distributori5sj24=AA !))$*FGGG "**+f+fggg ""$$$$$r+itemsc||_|j||jdt jdt |ddS)NTz Combo distributori popolata con z voci)rnr set_itemsrrrbr`)r'rs r*rz"MainWindow._on_distributori_loaded;s`"  **5111  ++D111 Hs5zzHHHIIIIIr+c4|jSr#)r selected_idrs r*_get_distributore_idzMainWindow._get_distributore_idCs'33555r+c|j|jd|j|j|jd|j dg|_ d|_ d|_ |j d|ddd|ddS)Nrr=FzCampi azzerati)rclearrsetCurrentIndexrresetr clearContents setRowCountsetColumnCountrmrsrtrr_update_paginationrrrs r*rzMainWindow._pulisciFs   """ ((+++  &&((( !!### """ ""1%%% !!%((( 1a((( $$%566666r+cF|j}|}|s|st j|dddS|jjst j|dddSd|_| |jdS)N Attenzionez6Inserisci almeno un titolo o seleziona un distributorezConnettiti prima di cercarer=) rtextstriprr rr& connectedrs _run_searchr'rCrEs r*rzMainWindow._searchTs#((**00223355 o   l4l m m m F}&   l4Q R R R F +,,,,,r+rFc|j}|}|j}|jd|jd|j d| d|dtj tjjt#|j|||||_|jj|j|jj|j|jdS)NFzRicerca pagina ...)rrrrr currentDatarrrrrrrsetOverrideCursorr CursorShape WaitCursorr;r&ror-r_on_search_doner0 _on_errorr)r'rFrCrErDs r*rzMainWindow._run_searchbs9#((**00223355++-- ##E*** !!%((( !!%((( $$%Bv%B%B%BCCC&r~'@AAA+DM64Z`aa  (()=>>> !))$.999 !!#####r+ct|jdkr,|xjdzc_||jdSdSrl)rsrrs r*rzMainWindow._go_prevrsI   ! !   ! #     T/ 0 0 0 0 0 " !r+c~|j|jkr,|xjdz c_||jdSdSrl)rsrtrrs r*rzMainWindow._go_nextwsL   1 1 1   ! #     T/ 0 0 0 0 0 2 1r+rHrIrJrKc ttj|jd||_d|D|_|jd|j|st|j d|j d| ddd| ddSd|D}|j t||j||j t|t!|D]]\}}t!|jdt|D].\}} |j||t'| /^|j| ||j|| d|jd |d dS) NTcg|] }|j S)rQ).0rs r* z.MainWindow._on_search_done..s:::QAL:::r+Frr=zNessun risultato trovatocg|]}||Srr)r hs r*r"z.MainWindow._on_search_done..s33331333r+Pagina r_uE — doppio click per il dettaglio, Ctrl+click per selezione multipla)rrestoreOverrideCursorrrrtrmrrrr r r rrr`setHorizontalHeaderLabelsracolumnssetItemr resizeColumnsToContentsrs) r'rHrIrJrKdisplay_headersrow_idxresultcol_idxcells r*rzMainWindow._on_search_done|s4*,,, ##D)))'::'::: !!%(((   K & &q ) ) ) K # #A & & &  # #Aq! , , , NN   ( ()C D D D F33g333 ""3#7#7888 --o>>> G ---(11 N NOGV!*6>:O3;O;O:O+P!Q!Q N N  ##GW6Ft6L6LMMMM N ++--- t'9;GGG $$ }d( } }; } } }     r+currentc~|dkr|jd|dn|jd|dkr!|jd|d|n|jd|j|dk|j||kdS)Nrzz risultati totalir<r=r%z di )rrrrrr)r'rJr0rKs r*r zMainWindow._update_paginations 199   % %&HE&H&H&H I I I I   % %b ) ) ) ??   $ $%Iw%I%IK%I%I J J J J   $ $R ( ( ( !!'A+... !!'K"788888r+ct|j}|j|dkot |jdS)Nr)r`rselectionModel selectedRowsrrboolrn)r'selecteds r*rz MainWindow._on_selection_changedsYt{1133@@BBCC !!(Q,"K48J3K3KLLLLLr+itemc|}|t|jkrdS|j|}|stj|dddS|d|dt|j||_ |j j |j |j j |j|j dS)Nr z'ID prodotto non trovato per questa rigazCaricamento dettaglio id=r)rr`rmr rrrrNr&rpr-r_on_detail_loadedr0rr)r'r7rrQs r*rz!MainWindow._on_row_double_clickedshhjj #d&'' ' ' F%c*    l4] ^ ^ ^ F $$%P%P%P%PQQQ+DM:FF  (()?@@@ !))$.999 !!#####r+rhc|dt||j|j|}|j|j|dS)NzDettaglio caricator) rrrr&rnrr_refresh_searchr)r'rhrs r*r9zMainWindow._on_detail_loadedsg $$%9:::9dmT5GPTUUU $.///  r+c|j}|}|s|sdS||jdSr#)rrrrrrsrs r*r;zMainWindow._refresh_searchsd#((**00223355 o  F +,,,,,r+cttdjD}fd|D}d|D}|sdSt t |j}|t j j krdS| \}}|sdSj dj ddt |dt#j|||_jjjjjjjjjjdS)Nc3>K|]}|VdSr#)r)r idxs r* z.MainWindow._on_bulk_distrib..s;# # CGGII# # # # # # r+cZg|]'}|tjkj|(Sr)r`rm)r r!r's r*r"z/MainWindow._on_bulk_distrib..s6___qQTM]I^I^E^E^t'*E^E^E^r+cg|]}||Srr)r rgs r*r"z/MainWindow._on_bulk_distrib..s999sS9s999r+rFzAggiornamento 0/r)sortedsetrr3r4rr`rnr DialogCodeAcceptedresult_distributorerrrrrrVr&rrrcr _on_bulk_stepr- _on_bulk_doner0rr)r' selected_rowsrWrrYrXs` r*rzMainWindow._on_bulk_distribss# # !%!;!;!=!=!J!J!L!L# # #     `___M___ 99k999   FK 0 0$2DTRRR 88::*5> > > F 4466 7  F !!%((( ##E*** $$%MK8H8H%M%M%MNNN-dm['S\]] &&t'9::: &&t'9::: ''777 !!!!!r+cb|d|d|ddS)NzAggiornamento r_r)rr)r'r0rJs r*rHzMainWindow._on_bulk_steps: $$%Jg%J%J%J%J%JKKKKKr+rec|jd|rtj|d|d|dn$tj|d|d|dkrdnd d |dS) NTzCompletato con erroriz prodotti aggiornati, z errori (vedi log). Completatoz prodottr=z o aggiornatoz i aggiornatiz con successo.)rrr r informationr;)r'rdres r*rIzMainWindow._on_bulk_dones ##D)))  ^  &=HHVHHH J J J J  #D,\\q~~n\\\ ^ ^ ^ r+msgctj|j|jjt j|d|vr+| d| dS| d|tj|d|dS)NscadutaFzErrore: Errore)rr&rrr&rrr0lowerrrrrr critical)r'rOs r*rzMainWindow._on_errors*,,, ##DM$;<<< S  # #    & & &  % % ' ' ' ' ' NN   ( ()9C)9)9 : : :  x 5 5 5 5 5r+)+r4r5r6r%rurrrrr rrrrr1rrr5rrr7rrrrrLrrrrrr rr rrTr9r;rrHrIrr8r9s@r*rjrjqs     0K 1;1111f l    {8 $ $ $ / / /""""" ESEEEE = = = = =%%% JTJJJJ6c6666 7 7 7 - - -$#$$$$ 111 111  t d<6H QT cf    < 9 9c 9 9 9 9 9MMM $+; $ $ $ $4 ---"""8LSLLLLLS 6S 6 6 6 6 6 6 6 6r+rj)4rosPyQt6.QtWidgetsrrrrrrr r r r r rrr PyQt6.QtCorerrrlogururpathjoindirname__file__rclient.sessionrr client.searchrr client.detailrrclient.distributorirapp.detail_dialograpp.session_dialograpp.searchable_comborapp.bulk_distrib_dialogrr!r;rNrVrjrr+r*res  1000000000 RW__RW__X-F-FGGXX <<<<<<<<........11111111222222******,,,,,,000000555555 $ $ $ $ $' $ $ $44444G4442BBBBBGBBB&########>O6O6O6O6O6O6O6O6O6O6r+