
    h/A                        S SK JrJrJr  S SKJr  S SKJr  S SKJ	r	J
r
  S SKJr  S SKJrJr  S SKJr  S SKJrJr  S S	KrS
SK7  S
SK7  S
SKJr  S
SK7  S rS rS rS r\S 5       r\S 5       r\S 5       r \S 5       r!\S 5       r"\S 5       r#\S 5       r$\S 5       r%\S 5       r&\S 5       r'\S 5       r(\S 5       r)\S 5       r*\S 5       r+\S 5       r,\S  5       r-\S! 5       r.g	)"    )renderredirectget_object_or_404)login_required)messages)JsonResponseHttpResponse)csrf_exempt)QSum)timezone)datetime	timedeltaN   )*)PlatformCookieFormc                     [         R                  R                  SS9n[        R                  R	                  5       nUUS.n[        U SU5      $ )u   首页T	is_active)servicescompanyzportal/index.html)ServiceobjectsfilterCompanyInfofirstr   )requestr   r   contexts       #D:\demo\tech_portal\portal\views.pyindexr       sL    %%%5H!!'')GG '.88    c                     [         R                  R                  5       n[        R                  R	                  SS9nUUS.n[        U SU5      $ )u   关于我们Tr   )r   r   zportal/about.html)r   r   r   r   r   r   )r   r   r   r   s       r   aboutr#      sL    !!'')G%%%5HG '.88r!   c                 ^    [         R                  R                  SS9nSU0n[        U SU5      $ )u   服务项目Tr   r   zportal/services.html)r   r   r   r   )r   r   r   s      r   r   r   &   s7    %%%5HHG '17;;r!   c                 P   [         R                  R                  5       nU R                  S:X  a]  [	        U R
                  5      nUR                  5       (       a2  UR                  5         [        R                  " U S5        [        S5      $ O
[	        5       nUUS.n[        U SU5      $ )u   联系我们POSTu<   您的留言已成功提交，我们会尽快与您联系！contact)r   formzportal/contact.html)r   r   r   methodContactFormr&   is_validsaver   successr   r   )r   r   r(   r   s       r   r'   r'   /   s    !!'')G~~7<<(==??IIKW&deI&& 
 } G '0'::r!   c                    [         R                  R                  5       [        R                  R                  5       [        R                  R                  5       [
        R                  R                  SS9R                  5       [        R                  R                  S5      SS [
        R                  R                  S5      SS S.n[        U SU5      $ )u   后台管理首页F)is_read-created_atN   )products	customers
quotationsr   recent_quotationsrecent_messageszadmin/dashboard.html)	Productr   countCustomer	QuotationContactMessager   order_byr   )r   statss     r   admin_dashboardr>   C   s    
 OO))+%%++-''--/"**11%1@FFH&..77FrJ)11::=I"1ME '1599r!   c                 
   U R                   R                  S5      nU R                   R                  SS5      n[        R                  R	                  SS9nU(       a  UR	                  US9nU(       a,  UR	                  [        US9[        US9-  [        US	9-  5      n[        R                  R                  5       nU H/  nUR                  R	                  SS
9R                  5       Ul
        M1     UUUUS.n[        U SU5      $ )u   价格管理categorysearch Tr   )category_idname__icontainsbrand__icontainsmodel__icontainsr+   )r2   
categoriesselected_categoryrA   zadmin/price_list.html)GETgetr7   r   r   r   ProductCategoryallprice_recordsr   latest_pricer   )r   rC   rA   r2   rK   productr   s          r   
price_listrT   R   s     ++//*-K[[__Xr*F%%%5H??{?;??f%v&'v&'
 !((,,.J &44;;T;JPPR   (	G '2G<<r!   c           
      \   U R                   S:X  GaN   SSKJn  U R                  R	                  S5      nU R                  R                  SS5      nU(       d  [        SSS	.5      $ S
nS
n/ nU H  n [        R                  R                  US9nU" UR                  UR                  =(       d    SUS9n	U	S
:  aP  [        R                  R                  UUU	U R                  S9n
US-  nUR                  UR                  U	SS.5        M  US-  nUR                  UR                  S
SSS.5        M     SU S3nUS
:  a	  USU S3-  n[        US
:  a  SOSUUUUS.5      $ [        SSS	.5      $ ! [        R                   a#    US-  nUR                  SU 3S
SSS.5         GM7  [          aM  nUS-  nUR                  S[#        5       ;   a  WR                  OSU 3S
S[%        U5      S.5         SnAGM  SnAff = f! [          a$  n[        SS[%        U5       3S	.5      s SnA$ SnAff = f)u!   获取价格（手动或自动）r&   r   )get_product_pricezproduct_ids[]platformjderroru!   请选择要获取价格的产品)statusmessager   idrB   )product_nameproduct_modelrW   )rS   rW   price
created_byr-   )rS   r`   rZ   failedu   未找到价格信息)rS   r`   rZ   rY   zID:u   产品不存在rS   Nu   完成价格获取：成功u   个u	   ，失败warning)rZ   r[   resultsupdated_countfailed_countu   获取价格失败: u   请求方法错误)r)   scrapersrV   r&   getlistrN   r   r7   r   namemodelPriceRecordcreateuserappendDoesNotExist	Exceptionlocalsstr)r   rV   product_idsrW   re   rf   rd   
product_idrS   r`   price_recorder[   s                r   fetch_pricesrw   s   sv    ~~N	a3!,,..?K||''
D9H#wCf$ghhMLG)
0%oo11Z1@G .%,\\&-mm&9r!)E qy'2':':'A'A$+%-"''.||	 (B ( &*'.||%*&/(  %)'.||%&&.%<	( 7 *h 4M?#FGaY|nC88'4q'8)i""!. ,!   77KLMMC ++  A%LNN%(#5!""*!2	$   !  A%LNN3<3H7<<PST^S_N`!""*!$Q	$  ,  	a7AUVYZ[V\U]?^ _``	ash   AG= %G= 1BE.G= 	%E..1G= .2G: G= $	G:-AG5.G= 5G::G= =
H+H& H+&H+c                    U R                   S:X  GaE  U R                  R                  S5      n[        R                  " U R                  R                  SS5      5      n[        [        US9n[        R                  R                  UU R                  R                  SS5      U R                  S9nS	nU Hh  n[        R                  R                  US
   S9n[        R                  R                  UUUS   US   UR                  SS	5      S9nXXR                  -  nMj     XTl        UR                  5         [!        SUR"                  UR$                  S.5      $ [        R                  R'                  SS9n	[        R                  R)                  5       n
[*        R                  R)                  5       nU	U
US.n[-        U SU5      $ )u   订单组合/报价单创建r&   customer_iditemsz[]r\   titlerB   )customerr{   ra   r   rt   quantityr`   discount)	quotationrS   r}   
unit_pricediscount_rater-   )rZ   quotation_idquotation_noTr   )r2   r3   rK   zadmin/order_builder.html)r)   r&   rN   jsonloadsr   r9   r:   r   rl   rm   r7   QuotationItemsubtotaltotal_amountr,   r   r]   r   r   rP   rO   r   )r   ry   
items_datar|   r   totalitemrS   quotation_itemr2   r3   rK   r   s                r   order_builderr      s    ~~ll&&}5ZZ 0 0$ ?@
$X+>%%,,,,""7B/|| - 
	 Doo))T,-?)@G*2299#j)="hhz15 : N ,,,E  "'%LL%22
  	 %%%5H  $$&I ((,,.J  G
 '5w??r!   c                 ~    [        [        US9n[        R                  R	                  5       nUUS.n[        U SU5      $ )u   报价单预览r\   )r   r   zadmin/quotation_preview.html)r   r:   r   r   r   r   )r   r   r   r   r   s        r   quotation_previewr      sE     ")=I!!'')G G '97CCr!   c                     SSK Jn  [        [        US9nU" U5      n[	        UR                  5       SS9nSUR                   S3US'   U$ )	u   生成PDF报价单r   )generate_quotation_pdfr\   zapplication/pdf)content_typezattachment; filename="z.pdf"zContent-Disposition)utilsr   r   r:   r	   getvaluer   )r   r   r   r   
pdf_bufferresponses         r   generate_pdfr   	  sT     .!)=I'	2JJ//1@QRH(>y?U?U>VV[&\H"#Or!   c                    [        [        US9nUR                  R                  SS9R	                  5       nU(       a=  [        UR                  5      UR                  UR                  R                  S5      S.nOSSS.n[        U5      $ )	u   API：获取产品最新价格r\   TrJ   z%Y-%m-%d %H:%M)r`   rW   
fetched_atr   u   暂无价格信息)r`   r[   )r   r7   rQ   r   r   floatr`   rW   r   strftimer   r   rt   rS   rR   datas        r   api_get_product_pricer     s      J7G((///>DDFL<--.$--&11::;KL
 ';<r!   c                    [         R                  R                  SS9n/ nU H  nUR                  R                  SS9R	                  5       nUR                  UR                  UR                  UR                  UR                  UR                  (       a  UR                  R                  OSU(       a  [        UR                  5      OSUR                  S.5        M     [        USS9$ )	u   API：获取所有产品列表Tr   rJ   rB           )r]   ri   brandrj   r@   r`   unitFsafe)r7   r   r   rQ   r   rn   r]   ri   r   rj   r@   r   r`   r   r   )r   r2   product_listrS   rR   s        r   api_get_productsr   )  s     %%%5HL,,33T3BHHJ**LL]]]]181A1A((--r2>U<--.CLL
 	  511r!   c           	          [         R                  R                  5       n/ nU HL  nUR                  UR                  UR
                  UR                  UR                  UR                  S.5        MN     [        USS9$ )u   API：获取所有客户列表)r]   ri   contact_personphoneemailFr   )
r9   r   rP   rn   r]   ri   r   r   r   r   )r   r3   customer_listr|   s       r   api_get_customersr   >  sn       $$&IM++MM&55^^^^
 	  E22r!   c           
         U R                   R                  SS5      n[        R                  R	                  SS9nU(       a,  UR	                  [        US9[        US9-  [        US9-  5      n/ nU H  nUR                  R	                  SS9R                  5       nUR                  UR                  UR                  UR                  UR                  U(       a  [        UR                  5      OS	S
.5        M     [        USS9$ )u   API：搜索产品qrB   Tr   rD   rF   rH   rJ   r   )r]   ri   r   rj   r`   Fr   )rM   rN   r7   r   r   r   rQ   r   rn   r]   ri   r   rj   r   r`   r   )r   queryr2   r   rS   rR   s         r   api_search_productsr   P  s     KKOOC$E%%%5H??e$u%&u%&
 L,,33T3BHHJ**LL]]]]2>U<--.C
 	  511r!   c                     [        [        US9nUR                  UR                  UR                  UR
                  UR                  UR                  UR                  S.n[        U5      $ )u   API：获取客户详情r\   )r]   ri   r   r   r   addresscompany_info)
r   r9   r]   ri   r   r   r   r   r   r   )r   ry   r|   r   s       r   api_get_customer_detailr   k  s]     !k:H kk"11## --D r!   c           
         [        [        US9nUR                  R                  SS9R	                  5       nUR
                  UR                  UR                  UR                  UR                  (       a  UR                  R                  OSUR                  UR                  U(       a  [        UR                  5      OSU(       a  UR                  OSS.	n[        U5      $ )u   API：获取产品详情r\   TrJ   rB   r   )	r]   ri   r   rj   r@   specificationsr   r`   rW   )r   r7   rQ   r   r   r]   ri   r   rj   r@   r   r   r   r`   rW   r   r   s        r   api_get_product_detailr   }  s      J7G((///>DDFL jj-4-=-=G$$))2!00.:|))*-9L))r
D r!   c           	          [        [        U R                  R                  SS5      5      [        U R                  R                  SS5      5      [        U R                  5      U R                  R                  S.5      $ )u   调试CSRF token	csrftokenrB   CSRF_COOKIE)
csrf_token	meta_csrfheadersrm   )	r   rr   COOKIESrN   METAdictr   rm   username)r   s    r   
debug_csrfr     sa     '//--k2>?))-<=(%%	  r!   c                    [         R                  R                  U R                  S9R	                  S5      nU R
                  S:X  a}  [        U R                  5      nUR                  5       (       aR  UR                  SS9nU R                  Ul
        UR                  5         [        R                  " U S5        [        S5      $ O
[        5       nUUS.n[        U S	U5      $ )
u   Cookie管理页面)ra   z-updated_atr&   F)commitu   Cookie添加成功！cookie_management)cookiesr(   zadmin/cookie_management.html)PlatformCookier   r   rm   r<   r)   r   r&   r+   r,   ra   r   r-   r   r   )r   r   r(   cookier   s        r   r   r     s     $$++w||+DMMm\G~~!',,/==??YYeY,F 'FKKMW&=>/00  "# G '97CCr!   c                     [         R                  R                  XR                  S9nUR	                  5         [
        R                  " U S5        [        S5      $ ! [         R                   a    [
        R                  " U S5         N8f = f)u   删除Cookier]   ra   u   Cookie删除成功！u   Cookie不存在或无权删除r   )
r   r   rN   rm   deleter   r-   ro   rY   r   )r   	cookie_idr   s      r   delete_cookier     su    B''++y\\+R"9: '(( && Bw @ABs   AA +B	B	c                 v    [         R                  R                  XR                  S9nUR                  (       + Ul        UR                  5         UR                  (       a  SOSn[        R                  " U SU S35        [        S5      $ ! [         R                   a    [        R                  " U S5         N8f = f)u   启用/禁用Cookier   u   启用u   禁用u	   Cookie已u   ！u   Cookie不存在或无权操作r   )r   r   rN   rm   r   r,   r   r-   ro   rY   r   )r   r   r   rZ   s       r   toggle_cookier     s    B''++y\\+R%///#--8IfXS"9: '(( && Bw @ABs   A=B
 
+B87B8c           	         U R                   R                  SS5      nU R                   R                  SS5      nU R                   R                  SS5      nU R                   R                  SS5      n[        R                  R	                  5       R                  S5      nU(       a,  UR                  [        US9[        US9-  [        US	9-  5      nU(       a  UR                  US
9nU(       a  UR                  US9nU(       a  UR                  US9nUR                  5       UR                  SS
9R                  5       UR                  SS
9R                  5       UR                  SS
9R                  5       UR                  [        S5      5      S   =(       d    SS.nUUUUUU[        R                  S.n[        U SU5      $ )u   已生成订单管理rA   rB   rZ   	date_fromdate_tor0   )quotation_no__icontains)customer__name__icontains)title__icontains)rZ   )created_at__date__gte)created_at__date__ltependingapprovedrejectedr   total_amount__sumr   )total_countpending_countapproved_countrejected_countr   )r4   r=   rA   status_filterr   r   status_choiceszadmin/generated_orders.html)rM   rN   r:   r   rP   r<   r   r   r8   	aggregater   STATUS_CHOICESr   )r   rA   r   r   r   r4   r=   r   s           r   generated_ordersr     s    [[__Xr*FKKOOHb1MR0Ikkooi,G ""&&(11-@J &&f-/0v&'

 &&m&<
&&Y&G
&&W&E
 "'')#**)*<BBD$++:+>DDF$++:+>DDF",,S-@ABUV[Z[E !&#22G '8'BBr!   )/django.shortcutsr   r   r   django.contrib.auth.decoratorsr   django.contribr   django.httpr   r	   django.views.decorators.csrfr
   django.db.modelsr   r   django.utilsr   r   r   r   modelsformscookie_formsr   r   r    r#   r   r'   r>   rT   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r   <module>r      s   @ @ 9 # 2 4 # ! (    , 99<;( : : = =@ SN SNl .@ .@b 	D 	D 
 
  " 2 2( 3 3" 2 24  "  (   D D, 	) 	) ) ) .C .Cr!   