
    |j                        d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ e G d d             Zdd	Zdd
ZddZddZdd	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZy)    )annotations)	dataclass)AnyLiteral)AccountingRow)config)	MappedRowSheetsClientc                  F    e Zd ZU dZded<   dZded<   dZded<   dZded<   y)	SyncStatsr   intaddedupdatedmarked_deleted	unchangedN)__name__
__module____qualname__r   __annotations__r   r   r        8/var/www/abs-group.kazgame-control.su/app/sheets/sync.pyr   r      s)    E3NGSNCIsr   r   c                l    t        |       t        |      k(  xr t        d t        | |      D              S )Nc              3  ,   K   | ]  \  }}||k(    y w)Nr   ).0xys      r   	<genexpr>z_rows_equal.<locals>.<genexpr>   s     #Atq!AF#As   )lenallzip)abs     r   _rows_equalr$      s+    q6SVA#As1ay#A AAr   c                    t        |       dkD  r| d   ndj                         }t        |       dkD  r| d   ndj                         }| xr | S )N    	   )r   strip)valuestitle	bitrix_ids      r   _is_placeholder_or_emptyr-      sM    f+/VAYr88:E!&kAo2<<>I9&Y&r   c                   | j                  t        |j                  |j                  |j                  |j
                  |j                  |j                  |j                  t        |j                        |j                  	            S )N)	r+   cost_articlesupplieramountdatecommentsstatusr,   category_name)to_sheet_valuesr	   r+   r/   r0   r1   r2   r3   r4   strr,   r5   )sheetsitems     r   
_to_valuesr:      se    !!****]];;]];;$..),,
	
 r   c                6   | j                          | j                         }i }g }|D ]^  }| j                  |d         }|j                  r	 t	        |j                        }|||<   ?t        |d         sN|j                  |       ` ||fS # t
        $ r Y pw xY w)Nr*   )ensure_headerread_data_rowsparse_sheet_valuesr,   r   
ValueErrorr-   append)r8   existing	id_to_row
free_slotsrowparsedr,   s          r   _load_indexrF   -   s    
$$&H+-I')J 
#**3x=9 0 01	 $'Ii #CM2c"
# j    s   B	BBF)dry_runc          
        t        |       \  }}t               }g }t               }d}|D ](  }	|j                  |	j                         t        | |	      }
|j                  |	j                        }|rRt        |d   |
      r|xj                  dz  c_        n,|j                  |d   |
d       |xj                  dz  c_
        |t        |      k\  rKt        dt        j                   d| j                  j                    d| j                  j"                   d	      ||   }|dz  }|j                  |d   |
d       |xj$                  dz  c_        + |j'                         D ]  \  }}||v r| j)                  |d         }|j*                  t        j,                  k(  r|xj                  dz  c_        Rt/        |d         }t        j,                  |d
<   |j                  |d   |d       |xj0                  dz  c_         |rbt3        d|j$                          t3        d|j                          t3        d|j0                          t3        d|j                          |S | j5                  |       |S )Nr   r*   r&   
row_numberrI   r*   No free rows on "
" between  and H   . Add empty data rows above the footer (Примечания) and retry.   z[dry-run] would add: z[dry-run] would update: z[dry-run] would mark deleted: z[dry-run] unchanged: )rF   r   setaddr,   r:   getr$   r   r@   r   r   RuntimeErrorr   
sheet_namelayoutdata_start_rowdata_end_rowr   itemsr>   r4   deleted_statuslistr   printbatch_update_rows)r8   accounting_rowsrG   rB   rC   statsupdatesseen_ids
free_indexr9   next_valuescurrentslotr,   rE   markeds                   r   sync_accounting_to_sheetrf   B   sU    (/IzKE$&GHJ T^^$ .--/78,k:1$gl.C{[\"Z(#F$5$5#6j==//0fmm6P6P5Q RYY  *%a
d<&8KPQq/2 (oo/ 
"	7 **78+<===F111OOq Ogh'())q	gl&;vNO!
" %ekk]34(89.u/C/C.DEF%eoo%678
W%Lr   c           	        t        |       \  }}t        | |      }|j                  |j                        }|r)t	        |d   |      ry| j                  |d   |dg       y|sKt        dt        j                   d| j                  j                   d| j                  j                   d	      | j                  |d
   d   |dg       y)Nr*   r   rI   rJ   r   rK   rL   rM   rN   r   r   )rF   r:   rR   r,   r$   r\   rS   r   rT   rU   rV   rW   )r8   r9   rB   rC   rb   rc   s         r   upsert_accounting_rowrh   ~   s     (/IzVT*KmmDNN+Gwx(+6  1FR]"^!_` 1 12*}}++,E&--2L2L1M NUU
 	
 Z]<-HT_`abr   c                   t        |       \  }}|j                  |      }|sy| j                  |d         }|j                  t        j
                  k(  ryt        |d         }t        j
                  |d<   | j                  |d   |dg       y)Nmissingr*   r   rO   rI   rJ   markedDeleted)rF   rR   r>   r4   r   rY   rZ   r\   )r8   r,   rB   _rc   rE   re   s          r   mark_accounting_row_deletedrm      s     v&LIqmmI&G&&wx'89F}}---'(#$F%%F1I
W\-BfUVWr   N)r"   	list[str]r#   rn   returnbool)r*   rn   ro   rp   )r8   r
   r9   r   ro   rn   )r8   r
   ro   z6tuple[dict[int, dict[str, Any]], list[dict[str, Any]]])r8   r
   r]   zlist[AccountingRow]rG   rp   ro   r   )r8   r
   r9   r   ro   z(Literal['added', 'updated', 'unchanged'])r8   r
   r,   r   ro   z0Literal['markedDeleted', 'unchanged', 'missing'])
__future__r   dataclassesr   typingr   r   app.bitrix.accountingr   
app.configr   app.sheets.clientr	   r
   r   r$   r-   r:   rF   rf   rh   rm   r   r   r   <module>rw      s    " !  /  5   B' !2 	99(9 	9
 9x
 .2 6r   