
    F(i                     V    d dl Zd dlmZ d dlmZ d dlmZmZ d dl	m
Z
  G d de      Zy)    N)BaseCommand)transaction)ShopBankDetails)Usersc                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	Commandz Import shop data from Excel filec                 h    |j                  dt        dd       |j                  dt        dd       y )	Nz--filezPath to Excel fileT)typehelprequiredz--admin-emailzadmin@gmail.comz+Admin user email (default: admin@gmail.com))r   defaultr   )add_argumentstr)selfparsers     LE:\Akash\Saasvaap\Navya-Bakers\shops\management\commands\import_shop_data.pyadd_argumentszCommand.add_arguments
   sB    %	 	 	
 	%>	 	 	
    c                    |d   }|d   }| j                   j                  | j                  j                  d| d             	 t        j
                  j                  |      }| j                   j                  | j                  j                  d|j                                | j                  |      r| j                  ||       y | j                   j                  | j                  j                  d	             y # t        j                  $ r; | j                   j                  | j                  j                  d| d             Y y w xY w)
Nfileadmin_emailu   🚀 Starting data import from z...)emailu   ✅ Found admin user: u   ❌ Admin user z
 not foundu    ❌ Excel file validation failed)stdoutwritestyleSUCCESSr   objectsgetr   DoesNotExistERRORvalidate_excel_columnsimport_shop_data)r   argsoptionsexcel_file_pathr   
admin_users         r   handlezCommand.handle   s   !&/m,$**,,/NN__b-cde	***=JKKdjj003I*JZJZI[1\]^ &&7!!/:>KKdjj../QRS !! 	KKdjj..Z/XYZ	s   A!C> >AEEc           	         	 t        j                  |      }|j                  j                  j	                         j                  j                         |_        g d}|j                  D cg c]   }|j	                         j                         " }}|D cg c]	  }||vs| }}|r8| j                  j                  | j                  j                  d|              y| j                  j                  | j                  j                  d             yc c}w c c}w # t        $ rJ}| j                  j                  | j                  j                  dt        |                    Y d}~yd}~ww xY w)zValidate Excel file columns)	unit_name	unit_codeunit_locationstreetcitydistrictstate_or_provincepin_code
contact_nor   statusdelivery_modegstdelivery_radiusaccount_name	bank_namebranch_name	ifsc_codeaccount_numberzMissing columns: Fu    ✅ All required columns presentTzError reading Excel: N)pd
read_excelcolumnsr   striplowerr   r   r   r!   r   	Exception)r   r&   dfrequired_columnscolactual_columnsmissing_columnses           r   r"   zCommand.validate_excel_columns,   s+   	/B--/3399;BJ  >@ZZHZcciik//1ZNH.>\.>s#^B[s.>O\!!$**"2"25FFW3X"YZKKdjj001STU I\  	KKdjj..1Fs1vh/OPQ	sC   A(D *%DD 	DD#;D 4D 
D 	E1'A E,,E1c                    	 t        j                  |      }|j                  j                  j	                         j                  j                         |_        d}d}g }t        j                         5  |j                         D ]  \  }}	 |j                         }	|	j                         D 
ci c]  \  }
}|
t        j                  |      r|nd! }	}
}| j                  |	|      }| j                  ||	       |j                  j                  r.|dz  }| j                   j#                  d|j$                          n-|dz  }| j                   j#                  d|j$                           	 ddd       | j                   j#                  | j,                  j1                  d             | j                   j#                  d|        | j                   j#                  d|        | j                   j#                  dt3        |              |rc| j                   j#                  | j,                  j5                  d             |D ])  }| j                   j#                  d|d    d|d           + yyc c}}
w # t&        $ r}|j)                  	j+                  dd|dz          t        |      d	       | j                   j#                  | j,                  j/                  d
|	j+                  d       dt        |                    Y d}~d}~ww xY w# 1 sw Y   xY w# t&        $ rJ}| j                   j#                  | j,                  j5                  dt        |                    Y d}~yd}~ww xY w)z(Import shop data with transaction safetyr       u   ✅ Created: u   📝 Updated: r+   zRow    )recorderroru   ⚠️ Skipped z: Nu   
📊 IMPORT SUMMARYu   ❌ Errors: u   
❌ ERRORS:z   rL   rM   zImport failed: )r<   r=   r>   r   r?   r@   r   atomiciterrowsto_dictitemsnotnacreate_or_update_shopcreate_or_update_bank_details_stateaddingr   r   r*   rA   appendr   r   WARNINGr   lenr!   )r   r&   r'   rB   created_countupdated_counterrorsindexrowrL   kvshoprG   rM   s                  r   r#   zCommand.import_shop_dataG   s   +	L/B--/3399;BJMMF ##%"$++-JE3u!$JP,,.!Y.$!Q!"((1+Q2"=.!Y  $99&*M::4H;;--)Q.M KK--dnn=M.NO)Q.M KK--t~~>N.OP #0 &. KKdjj003HJKKKm_=>KK}o>?KKS[M:;!!$**"2"2?"CD#EKK%%E(O+<BuW~>N&OP $ 1 "Z % uK4PUVWPWyIY1Zehijek&lm))$***<*<vzzZeOfNggijmnojpiq=r*sttu# &%B  	LKKdjj..Q/IJKK	Lsp   A0L  2L
#I7-$I1
BI7)L,DL  1I77	L BLLLLLL   	M3)A M..M3c                 J   ddd}ddd}|j                  d      }|r	 t        t        |            }|j                  d	d
      }	 t        |      }t
        j                  j                  |d   |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |d
d
|j                  dd      |j                  dd      |j                  |j                  dd      d      |j                  |j                  dd      d      |j                  dd      |d      \  }}|j                  j                  |       |S # t        t        f$ r d}Y Vw xY w# t        t        f$ r d
}Y Pw xY w)zCreate or update shop instanceOpenClose)rc   rd   zShop ownThird party)SHOP OWNre   r1   Nr6   g        r+   r*   rI   r,   r-   r.   r/   r0   r2   r   r3   r4   rf   r5   )r*   r,   r-   r.   r/   r0   r1   latitude	longituder2   r   r3   r4   r5   r6   )r+   defaults)
r   intfloat
ValueError	TypeErrorr   r   update_or_createunit_admin_useradd)	r   rL   r'   
status_mapdelivery_mode_mapr1   r6   ra   createds	            r   rS   zCommand.create_or_update_shopv   s   $w7
)3MR ::j) uX/
 !**%6<	"#O4O 55[)#ZZR8!'OR!@ **Xr2

62."JJz26%+ZZ0CR%H$ $jjr:GR0$..Hf)EvN!2!6!6vzz/S]7^`j!kzz%,#2 6 
g, 	  ,C 	*    I& 	"!O	"s#   E5 F 5F
	F
F"!F"c                     t         j                  j                  ||j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      d       y	)
zCreate or update bank detailsr7   rI   r8   r9   r:   r;   )r7   r8   r9   r:   r;   )ra   ri   N)r   r   rn   r   )r   ra   rL   s      r   rT   z%Command.create_or_update_bank_details   sj    ,, &

>2 >#ZZR8%zz-<#ZZR8"(**-=r"B 	- 		
r   N)
__name__
__module____qualname__r   r   r(   r"   r#   rS   rT    r   r   r	   r	      s)    -D
T(6-L^+Z
r   r	   )pandasr<   django.core.management.baser   	django.dbr   shops.modelsr   r   accounts.modelsr   r	   rx   r   r   <module>r~      s"     3 ! * !g
k g
r   