From 7a19145be15651be65af030480372c1feb5be878 Mon Sep 17 00:00:00 2001
From: Oliver Walters <oliver.henry.walters@gmail.com>
Date: Wed, 5 May 2021 17:34:35 +1000
Subject: [PATCH] Disable wrapping for translation files

This ensures that the updates pushed back from crowding don't have unnecessary file deltas

Ref: https://docs.djangoproject.com/en/3.2/ref/django-admin/#django-admin-makemessages
---
 InvenTree/locale/de/LC_MESSAGES/django.mo |  Bin 119528 -> 125311 bytes
 InvenTree/locale/de/LC_MESSAGES/django.po |  568 ++--
 InvenTree/locale/en/LC_MESSAGES/django.po | 3236 +++++++++++----------
 InvenTree/locale/es/LC_MESSAGES/django.mo |  Bin 380 -> 327 bytes
 InvenTree/locale/es/LC_MESSAGES/django.po |  523 ++--
 InvenTree/locale/fr/LC_MESSAGES/django.mo |  Bin 379 -> 325 bytes
 InvenTree/locale/fr/LC_MESSAGES/django.po |  524 ++--
 InvenTree/locale/it/LC_MESSAGES/django.mo |  Bin 380 -> 327 bytes
 InvenTree/locale/it/LC_MESSAGES/django.po |  524 ++--
 InvenTree/locale/ja/LC_MESSAGES/django.mo |  Bin 373 -> 321 bytes
 InvenTree/locale/ja/LC_MESSAGES/django.po |  523 ++--
 InvenTree/locale/pl/LC_MESSAGES/django.mo |  Bin 526 -> 472 bytes
 InvenTree/locale/pl/LC_MESSAGES/django.po |  523 ++--
 InvenTree/locale/ru/LC_MESSAGES/django.mo |  Bin 518 -> 492 bytes
 InvenTree/locale/ru/LC_MESSAGES/django.po |  523 ++--
 InvenTree/locale/tr/LC_MESSAGES/django.po |  640 ++--
 InvenTree/locale/zh/LC_MESSAGES/django.mo |  Bin 337 -> 331 bytes
 InvenTree/locale/zh/LC_MESSAGES/django.po |  524 ++--
 tasks.py                                  |    2 +-
 19 files changed, 4358 insertions(+), 3752 deletions(-)

diff --git a/InvenTree/locale/de/LC_MESSAGES/django.mo b/InvenTree/locale/de/LC_MESSAGES/django.mo
index 0dd13dedf0651b756b6cefbf5f93f05f1616d5e0..e90eab101b28a03f6724b788ea17be06861a736b 100644
GIT binary patch
delta 41270
zcmbuo2Y8i5*S5Vky>|$mO|J=r-b?7cBOOArQy?TEg|3@krK1r9q*p<D=u$<BQdFvf
zARtu~6i`6^^V&1f==1#F`;|G4+jC~knl)?IteN}X@qK*nu1fpnd|J=79I4)OP$JVf
z90lRKRUD2F(>WZkLL_xK!lpVLHDEZ*1DC<9a2I5V<8zo6p0T`W<=0^*<ac07_!MS=
z&tZO;W}3s1+2Qawic*omim(uD05ifqFdGbq8ZZ*(gYQA<e**KuPa%dJm#q8_%uf3m
z)P(7#o3;<kNxLj81M9(x%<l-X9q&U8To2R3eNYp91`EIoun2qt<yek)9gf_vI8?h9
zltZncA`%2M!9g%J91b(UcVJ666{ci<$5&Juz>825`^<1SO2MK~4zz$;Nq6W2Lv7n*
z+cPa!TOP3e7hp;BZ(DiBnGQ!`+Qp&f34k6=(1uDQ*c)nvOQ1q^!16q-MEef(g+8;)
z7Bz*^>j)J&H!KQ=L4UXa)`6#BIhb~~iDYG1i*~!&#9zrZ1wlr55NdBuL-Nq^8>|b<
z&M^*#z<RXTLO*y1R)V?b8a9JfX%B<7;m5Ed{1KLiKJ!ewF_fLydBi^pl`ROgHwPif
z?>GguXJ12Q{S}x4{$iPGz8U8Ob0IGUwKa91>~w}@VPB|mQ=k_3A<PEXz|wG+he~ED
z-$SkZC#YlS!=cn3RfSn$eJID;K^b}r=7d2|4i1A_$V{jS7Q;+%6V$l9w*M%ULtnw{
z&~t~1lH!FG_`Gl0WucB^3#e=kfpR1g%D_8N6V0*m<(6AvapZ@g7IX(zfLRkvZq&8x
z3yFZoF@}ngYAw`?FF<+xJyay_S$Ucd%$8(>3UMCGqR>UV0@Om<Lai*qw%>u;%EeHT
zUI7)kE#5Z!e~gMk`jzE%tMCBI&>NT=W?x_&Dh+iXG=aHbe;5Gcp^|DB^nuS{KA2^p
z$%Qgdb~-_AO&H9}{Em1k@@yv59xk#98?1a6l%da{LjOI~v3d&gz=|IlHiL4g4^(o+
zKpn@0miwS0bPdYhYv@tveHNKx))ZE!Jr2sl-B1zu3@SpGpjLJZDul0~Kg_n+TwnpP
zJneB%Teu18?oWi;+P#*?pmO8PV)nlZl@|z<G!>Q@10A4VE~B9w8E-k;axqjS)<YTI
z51YZ`ur|!{k+~mQLiG=a%9(Lcj?I9I)cYTKOcrlIP!PdBsI9mRwelaK9Qhq8`yETo
z7G;BK7lG2R2o;ffP!n{t?Vhj*?MPS*&V>2l7O1U0?V+LpSD{vP3u?vBp+cT&nQ<f=
zlwL90E)Vn4t_L-7H>fNh2sJ($>e#+*IT6a<49f*jk@2ju3ZFo&C=trQaj2DjZRIzi
zCVB$>V4CGduNo{%I{>Ob!g36h!}Fn5x)>_tA48pjLq_g#T(p8aP#(R4O0qO7jACJ^
zEUyaXU~9`>Q2K+QA`uU@;+at6--nuL6I95LLg`(Ha_9vtMgBR`t~4(jKj@-k0F=Ub
z+nx*cI^G7gMOUB<KZ4rZl&j3jibG9Q6KbN)P>w`EEnouFxDTOj&MmME^E(bx(SQe*
zsa6|9g`g&=2@ApQuq7M{i^GFfehVsDQ>-y>zg$p}XbCl8N2t(;LM>pl<t*q?QY@#U
zz1jpT!9=JF;w~%-Q>-<iF9BtsDwM;`q4vB#)V&dBxdG~4xCu3Ju5~6k%R)I?5h?<W
z))9X>&<Q~S*cWP#M?x8%28+QZwtWcdn0^Cg=m}J0Qmr@Rib1WoGAs;R*mfwC<8MPb
zG#hG*SFI=hTIqHKTKSi-CVT^x{WUk3fz6;C>H)Q<gP|Oq2o;I<peEh~W$!4I{x#eG
z1ZrHykBz*zWepD%b+m?BSrC-rF;IqQ+x~S>h7Um{(^cDk0yR;ljYi)EwbEM97q)?E
z;YgSPj)RKa45)FQkEm!bwm}U%3NyotmbYO#+D~o!m2GF(Wb|`F87c*p{k5UCq$^Ah
zW1$>)8>WI2EvG>i=yA-VqR_2{^6&uEfD=%Tor786P22tjDq<-<G5z^rX4>U#yA~`(
zyOnJZf#qqBv)lxg)K_3`o&Q%<(jdsO*(66ks1W(Vtgs<eWI8~tGzcmwhe0{E5N3qy
zU^ch|YU@6O+N$eNN%stDp&7TB<SYs^>HIgOq6ykUP0(K*Fb-yiW1(_m9+ci@C__h}
zPR(Vg34VieIKx&O87TeoQ2q5`cGwwe9yj!4qcXyFOoKA82x<i%LnYlY+kYKurN2NK
zd=2Gjj%{Y5B2YO{8Op)7P+JuQHSs8@aWicH@@>RF2ZCJ)eBmkE@jH|}>vl7+7?h!^
zmTh2T+QCrCxfaT?El?rf59P?$R{j{~qWu!ePPQF<Ny9Qbh<`aM!w_gsmqQsi24&z|
zs4RXCm6Xn%#?kaJH|-iwD{Bjt3;kdj7zt%B0hWM!pdY*r<#?7v^9!hxhl&Qi3#IrW
zl);102cCz@?)y-VzJSs%zRRqrGSs-{Q2h~5jwe9rZH2OP2+HBhmXDz#;z_;Re4pos
zI-kv9Uf2dI7u--Gj)!vO9m{v2j_X1w{Z-Hf4?yL_btnfO!aVRL)RyMhW0J2VB&j`)
zT2$moH>hMBWEDo+_G~E6mq9s{2=l|^FekhT^TB6O6J*<K94!uI&mT%20A;5ul$}8^
zug?D{D)Mwb)CyNXdAtQ`g`eB@S5UcdAIjjbP!puxXI7jSYJ!qb6V!pyYYnB>7b-WR
zpd9}Ide8sIRJ5YqFg5%d%8@Hjj@^X?;d7{~HP?QlUm5Bx*B0tVi-0xYOxykpDrxUp
z{tTPZegUh)1_y}0LN}C(wqQ2Y%2z>oz7Hw_XJ8R{#mfJHI&PUiH9s`+K{?t8O0NSf
z1f!vHV<yy<yav{XU&10V^FiXTitj;_gl(Y=jf9d<g_>v`lw&)fB5~UC9@Io>4jG3_
zKz$k2fP-N#sO&!h%flP6B+Pu+M6k+XkMXb_g3@$^LY>=Luom13Tfm1<hN~ShA?*RR
zMS)NbM!`046s!zChkB>Hgo;3lqeia)R4$Z;lGpT5QRq8D84Q6s|8X!CoMbuOayHb2
z?^!N`I&K@G_IeLg1P?=P-8ra<zJ=O?-=ORlJZ2p9_)$?-SA!K`1KSZ{84HyoBVlSd
zAIi~%P%B*vHStx;AD|q30JX5^R-WlIqCh(rObLA;^LiWws1!p`5-QX!U^h6&@-7@j
zyTNgj6MJE5+E<|*zX6ra51@`+vCj=FLpd4%)4>k5-NUv+p^wggG!?CI3RIFUhsyrl
zQ0MtH)SlghCE!!25avB$-Ua2LAMNf?5u6N5!|kvf{1z65X-}GDEd@)`ZURd%zhfX3
zO*9KCWUF8kxCd(Q-at8&_msI}%R@z=4NMO^K{?hNN^dMI3+F@S#sSMyQ2Li_`zG}M
z{qHdqIq(MRxa2-<BH|0>P;;nI_O={o<-?)I&460r3MdB-Lq+r(sN?z=%5J7F%qc1X
z)o$?x@mHlk0u3Av724@g=Xx<zsP@9l@CM8XAHz)WCDetI?n@K$=1}9JY<mXO0(L+-
zcoJrS_n_?j`X%vCL&b5%geI+JcBo`30PDf>Fcl1kT2UmF<I`agxB^y%N1z;i0kuVG
z&YI(x2}-X3RAlPFbg-+3iWK`otvncN1w)}coe%Z0_y}s?HYf+afZEIZFbn(@Dk3S*
z8D@i8c_F9;R)$(YEhxM7VOHpANktR%fC}YcD8-MV3~qsXIURs9co{0$euCQjoafCc
zC<~?kmSr&1L_?rfIvQ&HM3@aOgha~Y*kA>_VF5Z$LPg{bl;;nj9C`}1;un@FzA_g{
zCMbupK}D__%mF(?ITQl3!&s;YPJ}vDA9>0C@1ml;JO?%K9+aV1P<xsGYjZD@v1|af
z1>K+~h_&r8Q2L9Z7P0~AVml72!TV6-T;G@l)q~lX-w{AXo^^%_*<jlq4&~`w*c@)K
z@~2jw`GV;$1vOCvSR4+3E;tG5%3T8$x%E(y+z#dVZs<M#pIN~LsAKViZ9j$@_{z4^
zTr_)^6Xr%<0;<0@)XJMc?R6)pNcMtCvPh^TeFtjd8BklY@FM#!!N&+R@ouOA$DoeO
zH?S!D4QeGmmrN4nhnk=wRD=Sc#`S_qu0c@tMngF?1xkMo%n4Uo?z%+$75dW%^1?e%
z1K&VhJQ**WJ@bb$&<-lZfl!7f!pd*~tPW3GdCDtB-v`REa!@%@8){+QpynIuu^qEu
z9t0bp3?GI{mJ3i3cxwA|Up1ku0A0xIz+A95lp{l+46lT`@%F<S@LO07=K9t++6vaC
z?HNl&D?I?Ur?;RF`~&8PIleO<`@&|l+d`d=`B3^>p&b7lYTR{L2tJ33Sng{^uMBk2
zt`D`qevo-Rj#w(nfdx=Wu^MVcyI?-}1yt7l2z}v0sQV%Rbuu2hpjO=9as;eMdoI+9
z55vOng_Zk!Z!Ws#Fa`5FCQ(t6Ood9GxwgFmrltKc)P&oij^`ez964s&=WP31sJ*@m
zwV)SJ3rKy#EUXBWeSfIa5CAhWzoR1+8SWzi41+Qh2Nj74mJ6T^Z-Ua>3l*{BmY1P!
z%m=pr2`oVSPpAmxziAd!1y-V62YL!piJ(#pPKDkTLruILYEMtt_6?{=JcBau3TkV7
ze=zqzWmt-KT_{I`pjH}f`#rWj6)HDA_<{Iqr5g~4d!Y=Rf{Mr!C_}HIR-ECMVIHWJ
z7lU%3DpdB@f{H+dWh_+4M?#IC4mD2#)P=R?7V*~vI}nJ6p>DJ@P##`}a^#`ye-0JO
zRJV<xLQvy;Eo(y=ZVolBE7a-e4;6`FP}x5TN^haZR@Oop+6fi%BT$jJ3YGOK?wDg$
z2`Zc0!Lo2Lbio8z6z+mDd<81`?m|T%#gAruPN=Q*hxMSR85Map0m`#^P)V}}>ii#p
zio`XjT=@l-gjw#I<5d;<(H;mDxdl*;t$?!o1*`+Vg+*ZAd*-XSCM>1%A4H`D9n+u`
zK7sQ13{;YR4^zYJ_f5YKltVS3CTIn<@*YqQj)IEN2bPIeegW1%{uIjL@(+|d?0-)x
z=@9gTT5%ZE7L4~Q@Fy9VmiAJpq+1I$@gC?s9Z=(LK;_0Om=WfFXttmz)RxqNT1ZQn
z3ATsc^WU3F8U$fbE0416F;EjshPuf<f`rWR4J->^*><T%#&BDxz3mL;a2V8<Mni4c
z1SkjAL(Q`pdbFZLR20&$pgg|=HSh_{4AcB%JkABBR}{)XRm-L@1MO~5kqm^gGZ1Eh
zL!lxx5$ZH7g>p3UC*rR?KaD^ueF(kB>#_OyT?p#Dz6G<uP^kW)uo#>Ly)PlCz5m>{
zZ$s(7gqdK5pUs3mP!3jrl2`kg{a3aJAW&%g!b)%=EDd+U3h)}#gc*M^4*0>!w3|a6
zvyrd{oDb#5X;>59gVkZNCuU1}Kt(jrGRi|GJA$`iLpTd6d(T2e<}sAVS)ZB}<%J4e
zY1^&~HNG{>0sFvgFdC+ZW1$?H4wVyYVI{a3de8q2Dw?3kuO=jApggPwwSvab1xG_o
zwAk_!D7{0r{|wZg|7`inGTm<`H*!Hmst8o*YeDRJ9L=Z{N6;P0)6r0;VFAnvmqJav
z8J2;EVNUn}YU|#>T(H11lVp{k7StMQqAt)Ia_C1p3RZ?oU_PDybKVLDVR<@IKR1T`
zp(bhzl}v$9D~yH;@n|SVXFxeRALfB8ZF?`2Bd4tVYbZw_Sh?c`KVX>OkzN&;8ETKR
zLwTML>R6S6n%E!uz<N-Qb%lydxaBCAoAwN-NUngI@F1)Xzk#xw>33r%AN2nH&!39!
z=+;mXm<&_FZBPStK}~!NmV@6xMIhZDCIb1OBIL5|iZCDT>QJHY02QIWQ1&9B93Axs
z@t0r@0<CZf)QZ+y#eG)s1XO6RL#_OoZD)9C+C`zVznWzWDE(eg6UV>;a2%`xmq0mo
z{w49ROXYh6x*`j`GNEb=<>5#u#o15>mO!n159|j|!J4rAYvV{T%u9PXtPkfvMdB=!
zgZH75{Wa8ri+cVvd*llXAqcST{!pQghk83Mg_`IXl-{3ED=YZMI8*`3!Fo^;>;Zk@
zAgJ*RpjLhWYHOcBIpldxMWM>zaC(!iDAWooKxKD5s0cKH+T%{P9SAj1l;v2cB%252
z$VsRh^$ygEGds<Ae^`)qL&!_a<LE<0=W#OBiuPEZgv#D4P>wu?%9UrZFie@kI93cw
zUI|LS9+YF9tUMTMK|^eN98^SR!TdV^+o{w?a0cr5Wl8Dup4&XIBJCnjD{l{V9Q#^^
zLq#SIYTP)e<eUbZz$H+T{Q=6sKWsZ~D&t^bSd94{m8fV>J41gs1S*MEK!tK2R0uD@
zs_>O<`=@q#leR0A1EZj}U_8`>d!Ul|IP`<xLFr{mW9;XG9u4rNq5;8BTQCG_;8>_o
zCO~~+t%Gvx6jVrWL1p)EP#+dq(>lFbof|4*MWH6F1Qn^8Q1di{nx}JGr^mauK?sx-
z1ED6E47K8=P$4`DwP#nM9CM^I6Xt<3ToB4|IVgu~K;=S9=-o0XJK<1SKL%<6^U`^Y
zV5L<^gxbR|p&Ymg^TRah&B}^Gt;`q7U|r~436vv2P&efeD7~qcA3!;{25RE%wtdV)
zMH8HdGVlm00xw|&m@9+H_C`<>^@kN<G}P8Dg+<^+s1KCqP`Q*pqtko-YeGdf1j^y@
z&;=JlIqKO<MM?G*RA?SU4M>s6$csSjeI2OK_p$O=SdI29C`XRLrtlS1vIS%|<A%Um
zwC6!Z^b4p3{sM`J$B`k6S&<KvBh6tW7z8W9RZw3t7og7l_fT8(2I?y~XI67u>p?}b
z8B`<#p+X)7b$^V8%7yVzIWp5r&fiih+N-TlH`XDj5Z;9@m?oQ<pfr@>N|yDZBGLvb
z*#_A5FenFSK-paewdb3mB7DfozlNoB{(qpN2{U9j6O@78*C*88c7TdZG*l$sg);O$
z)Lp&~>SeMC%8@-#dwmABfOjk_=5TudgfkrK!{k%w(TYB&B3^(pcnfNxdzMe3R`A-k
zv*a`r=7kDz2}^&darL1>-2y7qouM3bLpe4CDrctT<os)oKSiJm<Yy?4pTWkkK`y8F
ztu-FDrJV?sT&Z)LWU2~v)pm!y;9@KP9k!%hD33V>p|A?=_h1cp0>(k759eRmJ=Di!
z=?Abb?ekE3mo=}`F$ETeli?aT9#+ifbWDQV;22mtzme~SRcSXUV74$0YT}ttr{yrz
zv3>!ykdmH)rqTuKc#MZy(HiK251~KIT*xG61L!@^P^V-(42Q>HSy-{Kxd(c{cW94>
zTJcNh3#$|{_5xu5ZO=R^3i$=7b6Uh@_NE6MKzlY+D4#-|j(SB+I~Z!*CRheOhuT6{
zF>~BXLFIriOb=^9MKr*&BV=J7M}I2H+PSu44b)3xCrk+sz|!zARD|wBC1aN2hDD%m
zzDiK1qBGQlAyCIN8p{48s8jVJR1)rh-hcmhno4;Dx1a`QD`7m(4_&lNLY?PkP%G>S
zwFUj5E|#~URyM)P=RvJ}GnAuyp&U33<=_n{$9`2?=RZS9bG{2fU5&M%j!P$~<I@+)
zP&7;j$6EO`s4ZCp6|o~w$M+PJ{#mGFeFJKX9>bC_Zz;2|`p_eT{irA_!=P699+Zb4
zLY?m|P>vjcx?;~lMd|_6#q=B0xa_6PMdkx_Rab*0U>B%}jDVVN0+gdON^|}tn2SIm
z{t#*<pFmBV2<6C8E58D#)4pljk!4Iy423$z3!x_32bDX=El<IYw9mjEuxMFx8b+1%
zI2{cUtV5vC--o)2Q<gI;EDGgNc_>G#Ksi<yY6UH!R^AS3%ep}CYuYl}%Ev(Iy$h8q
zbD<)*%tJ+nH^3BdJ5*97LK!>&HPK0^y*vZ8!tbDx>Mqo{*H8;^lsCzo4{BUfC_Am7
z=II7`Lp%Dx0NS323T6*Kf%5zm)PSo{9{&h6@R4mlgNnc_D82N)CaZHp?Rgm}$C^Vq
z)Z5DAp&~oqaw{ZvJdU$ew094Uz>&qz>HXzX4r=eaLKzxlIRWYzEw=rep^NrskPF4}
zBdiJYRW#?k6V&){s2m$-+wVhPegA(#r92(qS%vhK%=s<^mEE<W`ny5p!Z;|$ra?t$
zspV>@m(a&hp-<;;Zph3~Th<Ngh7E*@(1$RK&i`gAx{*GGGJFBL;6td$WUg%bD?;@*
zgF5%Up$m?O`c7C0HPKNhy)$q+ylwl3R51&h19cN_gr4S9j#H7rtX0jPR)=M12S9x!
z4uWOjcvuH+gbm<5D7~`P3_HPkv`4{Ka5q%8r>bsNo)c<ZTd4jS)j9vFTtd(q7O!Ex
zP@<sra3^dCAH&+PQcb6$3mgR7!Gll+v(_?>wTExfo(^@qet?R|BinvqnWDCdXr|hn
ze}$?z0wq-~sJ&?eB@eXnVNl0%8r0|a9H?YE1a&&Tff|1emV>`Q*(q4Z==(!$WgwJ8
z<Ds@-riY3qS_@_1093Y~gWA*kP%oPdb<GuA8tMwJ1*P8w%5W&uR!p`1TcJ+F7f_DA
zffZoRdM0NYLM5{&kcwUw;ZO!gLOC=8%8?bee;<@XUqI!;BdAm1Q{UY2jiDR}gT>$+
zs1J_qP+M`+@*&hc@C*_Ok0VzDb5|FEQY>!i3thBpz!I=K%n09xI+jzRLb=LvGnC=I
zP%o>?P%D36``<t<FhfJbLNKS!e<dn1*aT`%`a`XJBvdlZgPq|6D7^-a%tXDQRyYD`
zuh&4`jQgM>cmm4d>rjq9fO6m&lz#dEUdPPuC`?6r*aUWgAy5<Tg>vX3)PP@L6_}>6
zNvhgVD;@}S^-h7>qBXD*JPsSf7f^d&w~28e9O_t(h8}q|or=!?5~yT526g;yLPelJ
zQ}ZX9Sg2F5+Hxb*mTiYx=>b>+o`khvie@H9>cTp-!=Ut6LM>=hGtR$4bp(NU8Oou@
zRxw3$b1!6qT1j`P9}bJ4Lj4s~XupRt`~d1E{S7JyGPN*~EDUA0HuQmQp|aoI!eg?3
zFakO74%BIw4;7+SPzJX{O>hdz^KYQC{63UJnOmC3HGvu*2<2D|)WmN?IW!w8Qp=%|
zbCZXPLV6f#;0Y+hSD^OvHI$)(t;~u`LwQ~m%AvYe-VDlcXDEC9pk7WPP~Qy^P<BQ_
zIWp18Jqc9g;VM`f?t<QsLgmB*sPBRttxYl(gPNc&)G29f+1oN6Dv~p8dnJ_qeyF5A
z3YFB~n|_bu4=NgvvyBODSttkULqFIOYGuQrPRRtQ$gGCinq#me{1z&tDcYKL9@vO>
zUE6*KYMzx)za#d*#ybDksOZ=fYiB|q0L#&KLtVAAp(fm5+b5xm_HC#M)3i6^^F!rE
zZCDw$hZ;8y>X<IG?N6cZjcc&1&VQy3=0l-6REGzahZ~_By9{-#euvt7|Bhx)Ye8*I
zbEvI&3(BErsM9e4%Aq;1E?f;|{|BfDWbb6pe>E!FlNM0NV}RvIs1VMD&EeND02b_Q
zLf;Q+Z-+vSdmC!P_n;hG4_$B%R0OU<<=XGCD9qG_^RGSh>tc>iQ>c{;fKnI*HDEE+
z-ff1upgyzmAD||B2EAL+)tsXIP<F~gMXm|dg)|!KSnq_gd#o$xUmjmVpaGAd97@y8
zWNRVlqFoEBzo%s^)QaA<?e$ROj#yr?@?W6$_5GHaur!ojZK&Mp=%J#}ML?}^f>l@u
zHQ^ShiB8)7yHG3n6Y9gGW_PpKji9!$9aJR3EJs6)pAD50o1j*{7izrcODYP<MW_qo
zj%`1*d<k`KGxRW_E(Nvc)uE1MJ*cnUmQdr{K_zb&sF%(dsEchQ)Px71E}-KOM?H?q
zR`3Wa5^qe0!>6ao^72pvYC+wMt)U_n2`j=0P+7el>K?cW6}fc1%!Eau?3RPdl>n$?
z*$H~z|3j!K2PQ&Iun;OD`=LBP4duXhP=+2ug*a_*(=GtDr&XXr-3n@a7?h*KpdvT}
z%HBFCJ9}VZo&WPx<nb?1dzhh*xr$3bwc9`q41wCaVNiyrK{>t@YGpfY`xunNSD^GC
z+V&f$iL>`L^Oc3(_kRGD%ye{xQV4=t!6@jR2r9%&p$mQqwW7yR`WgEfM~g!(q#o3`
zZm=edu>Gr`7V;^SV`uwu{<VT15GZsnU=Nt5zj?bwLuKtqsEH;+4g3h|9kCV4@%>PG
zr=a&ZL*>FFD7!fW&6fE?MW!j#+w-kJkGWC<5!65s4&~u8s0eJeJOq^+XQ8gnr%;A{
z2ACwQ2HVhf!<KL>l%ubp-l|!HOhjrxo%^;>3kvg4sY+!G)WkcWlIt_56<mRS&=G6~
zR)o@P1r_RERvu?L%W^&Rr~epKq@F`XCWYHXzy~U6J!Pr5s5G<;gxb4tP&d~HP@msB
zpeDWo<=_LTmArvU()=ODp{h_Xt+r6(2ScrN8kF7TP?6bX`aO<QRAk^Tbiov%Ce+1Y
zS=!B@CW?j{I33F15~vmIgf936)ZYFCHL)YiI9kZkA8MYaP~-bS@BjX97!@6#8CGGj
zRY>$I@G}}}uW#G_l;OsqLQsZk!s@UC)Tx*ZwbB((j_iiI881L3>9<f@aSs;N`TvuO
zlEgL83}^v$L%E@TQcZw5MjK&Kcn2zb(+x5=Tn<>Db^%xo_JrDk*-(+&43)H}pd$7d
zD!J1{aQ;hC$xTHosSCBoU0`MCh6?EiP!U)U<-q4q`uAZ4m}0PTup*SbFsLu6Sy0Kn
z2Pz_up-xfiNHb5FNY1}jS_^?f)g7uG50!NDp;odRy5MCP4gY}3{y|aZ%Vq-9M2DaY
zK7$(P6K!&+2GqoXuo9dA6_Fj$oPT+I8G(+8V~E+Cj8Jbk7wiNpK!w(0<vXAvaLBeV
z+xBg!NWF$yNP!r0LDhyX+AW|$A8t9^Lq*9k87etuKux?5Dk)b(y>53x9lQNd-+<?A
z`!du59zmUsT(QPZX{gt2Rj9432Q@AlYN5lSBH$TMMH8%n%F0c!20Q{a;HB+P8D|D&
zfJ&;|wp|IPpj`(l`|Cp`XHO`{f?;bo9R|XSup_J$?{sX``+qtW?M<zr=0l=4l;?pk
z01ku-^+u@B9fO+SYs+hvccC190u}l{ptd64FvA*9N!S&7a|e3={y%|=E}BJN0aq`q
zNc$SpvCA^tgs?eO@{EK^whd4#{2pq2+7af;^@p`-2SGWo#Bv{ONc#$uBLzkhF`a*Z
zD$3TjP`NM|YD;3FRx%PQ<O`rKn(a`LcmTEMe?a9-=22#g@<AQr5>ThA8k8fQpl-lu
zs0d7h-v9mo3MzVyegeHoW_b=ONp3@39O*}!9C1MztY+C6>K+&ZwN*=?R=Cr)Pea`!
zx1bjK4C;F#&)fF>-{fuMaSy1K4TMeM2&mA03N_(9sBBLAj&Z0qRPJ<yIz4ev3m6NP
z<?lh+TWa|URAdgoI`GUpoPQ--Mpzo=g7UmBEDAe8orXB5E%_MA@HQxi4nR5hEtDf^
z#+a3sh1$wGP+Qc<%DX^~4}o%Yh=+=f%|s~0Wl#=nhdTfJp^oJjP+N2pYT(aM4y77v
z7XW2A7nGeMP<oZ2R@w~eGkqM?R!oLUUe5w5O0I)YE4T`^*MCBPn0uTt+}yGg)G_M=
z<)|AfVv$gxodD(Ndr%XtfJ(L<Fg^Uz@)Bgc$8nR26dypX_%%!kGmkgNFgsMJ8$qqC
zAJj@?p!DB{a(IU2N~nnLwe5>gdOtxI{1a+?kqP?3;{28KR(O9yW${obk5@oVybo%E
zE6@dhfl9U<6U|StB2W|dfI5cpP^VxlECUxnZN*`z<9Go||0!&)^PhE+Nusx)LOIql
z0V?@6Lfr$mp&v{&+3aN%s8H9m?PgG0*&1pqLZGsL7}Sa<K{+@FYTRPzk-`Ql8n6c{
z*-k-)?0d_fp$s^t7<oo00|lV;%R-H>54C{yP!V$5b_|sM6j&0z4|QtxP2v12EAJps
zNFG3iEbUbD{;vdOuq#wZ2SFJc4>iFYsI6K8wem!$tvU~N)7^ubFy%Dkcv)DEb}i_F
z!P7XmO1_B*<WU0DDL4eH!CSBq%s<^2><u-+P$<V{KyA$mC<hMP_IJ>i_A96xwA{Of
z?Vyfb4AckC0uL2=dH^bvm!Jkdf<<A0873n2pdu6kB_9Xt!j-TdyaB7jA~VfjO1nWV
zWFb_9_Cs&-Sw4k|j3?VH^KY%H!}18`Lapoo)QY}_y0afc8O%D{Y(-_L)6oiQ%fg@*
zG6(7uZGg)9OHd9xgxbQ?bBrT}AUCAPQJYFrIvPS<ER$eoI1_5%O(@S_LOGasu6YME
zfm*>Zs1PrPUEm>@0_K@#E~tD^TUN}rYgq=s3_Aa<sVJ$sK`919or+OVr(l}pLMXlU
zP<yxw%E9YUD|-QzOWEd|amAqQRJQF#P^Y9LRAdK0@Av=PRAl%gC<7az9QhRL#=8KO
z?f0OL;WMa-o$r~g$`5s}E5VwuE>xDsLv77csPQMDCca?#3-rkIOz)dem4KCL`$8G)
z4>d3XR)r&=?(j`e$+`>5@h_nE`YO}{9$PvSOayYmO2~^rjqePl*C&DVuMkBc&_wS*
zCEs+Ydtn)D3|B+F?e1It0@Klc0Toi`2PWh>pzIZca?BrUAq}7+*BWX|yFrZ$`GE5;
z#bF3E@kFThhfs#rK{>VyYAcRG8N39w1-GCKzqbA97MKYNK#ebNSsN<SEn!6%2>sz4
z4;5wa5vZj45mtj)7McsG39LXn63X)rp)Q;aP&slE>U7+In&3~^1m^kBIM549J`if}
z$JzE`s4evDprUho5-M44K^e%r$h_S;L9OInD9=BHio_|XV|xwCp%ROY!;PU9G#EC3
zbD%D)b5IjLh03vXOYHftLq!)$Bd8SyTgE{dngA7<wYGi6wx2?c%m0zdk$SK;?Xgfv
zwht;tK7-Ob17+_CRBq*2YR`WGDq2w~sF2ozQtSXVFb--32~d&PZTmlmx{@D4U0msw
znOw;Rbs7pmIpS~Sb)Xz-0Tqdk&|mNW5GpSC0n|jhp+b5Uaz#4+fZ9XHa+7R%q4u&k
z)D2i4%7I|0T!?^L&{U{#i=dKvJ5<&mw)_fu|L^~9QBn3kfm&g@6^1@gD<}oM7mRJ!
zh06M7(7O_-6^B4Ya3qu?bD(l-6O`WPP#4s9P^T)-O3uGlSbU{fNm<MGPzK|n3`~Vu
z(F!Zy3AN&rP{;5*)cx=P%CRR<5qu4mYz0@D3#h&27+3@OmQ^03cn^UFq+4y?YNeqJ
zH-&n=_Jt+jBG?fgg39ikYwV2%mArkR935;q1~#TW4=R@~LcKNrfQoEh&swu5#h_MN
z1<F8Ms8IHYx+;g+_Ee}OS_<XRIw(V5LfsRWU@e$>opGoE)cE$6fiQq}EG!2-JE<s{
zZa{_n6;zUBTW<^&h02L`P>%Jn?P#bKd!R3z1vSxrsK}jxMc`eidnMflvt|C!d&(g8
zJdO@jq!0u(@w-sTvluEV_dsRwS*VrXg>vW#l)m$0^W~GnvL)2990TRZBB;II0Tr=F
zP+O2=qmq*ISBZ*3-_)`nRES4Ft!NySq4`jbY=m;)7*s^QhSK{HYTWNoNu6SoiEKKk
zY%dNK;Yv_?O<-D`|F%?Qpes~JL!lIhSx$#q=|@nGZiWisNvL<l4XDWYd}1an3e{g1
zYOg!PO7MLsz2i{xoP*x~{m%_5TH#Bmfw?xD6_kfssXx@QY6!Jet)aFi4(eP_gI))r
z>}-ZwzzL{{zO(H|(7R<@%=jEzIR6T183fw%hEU1a2g>kps1VPv@}*FEd!Zb-1eIhz
z!3HqPRx@Ec*o1aps4QOrbyI!`b<BT-ig-@_j@P*?xy^Xo0uG?v8|r29Dbz%NK!rZr
zcJqIDR1V6}2&e^o087KoP%FL!70J7>3VZ`yu*weOSQjYy0uL2={smNMGw(DLR<~>e
zwZZ{VFQsv?EL;tB?9RgG@K30{ZI);p>j33I6x7{62`ZxVp^|Z(rDvzD9I-qLy?bW)
z2)1OvYp7$>e3yAixh*F{O|TBSU?TK~mta+xVYgXO1E{U-3guWd<jVFqCR34tnNT5J
z1m)pgsE~hddDHS0)ZXRUV+@yp(yI@3?z=-pEDqL%^P%jYv%C&_(|!cA>-@LcYeLr>
zDnubr4vez$DNtEE7j}Rvpd#_BmFL)J94`))D*;eR*BvUi#zQ6FYA6R!LoM_!EYAFn
zwELZohOj);`#%EerkV+Lk!*w2;BKhb@MEZ?dkK{jIS-htwFcAz8o=tX3)Dq39qJg*
zhl<<^D7_ufBTr6J(cavHQcU%!aU>^HB&tD$H~`8(Z>ZOABvfdJT26q{n+x?i{us)^
zZBWU55$cpU4w?v-Imr2!pcw+4>qw{xr$agN0aP-sf$}&JdP8XY??Q$AIaE?*K4e(J
zvJRAfCn(1vp^|e7biqA`JZ6Hc2(-r!pd5JxwbFctjU(lu_PjRK%DY2N*x&XKgVLX5
z+aEx!c#V~xg|d4SYHQxu{_371#<PA<7tRRS5N?P1>irEWLIsZ+y(UoSzprgifpTm)
zRFWNpx`OXOZS5PVTq%6aY(;gb-0BIHYaS03g=m>o*bm#&z5xTE|7T9`e~v2-Ds-oy
zvimhuf0^UvA{qo0;ssD!w+%LfhhZ_8{&Qou0<24WG$c7a{Aaez3J*iA_&${9*-w}~
zuLR|BQ>ZN(2$d6~pk7MTp|;|Es2te{_3}9krGEj+?vGG*vz#;^HonmN`@bg@DY~Hy
z4}~%~2`Y4pp-#sRsF%@MDE%Lx_WW0<3DcZ1{rRCUZC|Kyy`a}FbkUv!wWVudIi3GA
zRJ4*mpbVuxZ7!sImc^ka@`YMK1L(~GC__`ALcAF&IlqEBmRF%p(><69K7)EkytGXH
z1?OLevr<t<QK$jsp$yc7+RJ8^U2T6b)VLwGJsv9bvtdKH3M!fJKwV%(zcjxUOT!+t
z2Seq~@h>_5fmAY_F-a8x%hOJP!SD#|2g{r_**yieqrC~%fUjXiSnZq%tsAbOJqhYw
zD0kleZ3(uJ97=u$z6)=k=lp+2CFUz9|I1a9<7=m54qOhUQ1u(9V<|iY+rt4D%(>nQ
z>(IUmbv653G@n>)q1x|2Ik+84?;&gg%Um+aJQ!A?J=a4;7sY2#=kYPr3bS8!IwrvW
zQ2n=|j$M{3PRB}E3pR(>pt8HvRr9)S3)|8j2V23jP!1IM*4TXu4x_yqc88wA-x<Th
zU}pr&VORJJR)%e^nLYGCCFw+{9GMN38;hYr`myC<=ui6+ECDlIH%VO)D#sebl&~%2
z-QaO_q@o)u9_qNvv|I;e;3!mb-GiF&PpDIn`FnHoRe(CCt)T1-u<}t*5m*5A*1QGf
z_|H%gdkwws{}MNhXVsxP8rpU!^kzBK)jA&Pc&&rF>9#;kcna#ixMk%pp(2v|ra6}7
zq1x@B>;*&JBST>>o&Tv+<lz#i2&{(+{V}MJzkpnoj+8%`P-cRf&;@mjYQRcxB-FjI
z0cxe+KtFgBYJB!v=Bm#R<#=`I(fheQ6|E>1%8?mXVF64<dn=S<iBKy!4|PoMLQRzG
zw!J@~B2*q~%c?+aO$#Uo`a|7>;ZPUdh})ch4VZyo2Ye5z-TIE1ptGe1%CQYF1x&Qu
z1C_M<VHC{%qq%y=!qT)qfpYjFbiqeZcCy?x3(J4kV>~Z{KzmZwcGR_O1eLYTppvfx
zl;{0yI~MAO8wVAkDNy<=EH^@Bdm>B&_d?yQhi&_;hl*Y%7oj}63k$$sp$2BVXZAW5
ztV+8)R0R4%849u-0-dz$F(?}|?bTq)9`;X>sEC(tD|-mzQ9gko&ps5E@Vt%ilq^#+
z(N4jD-+4;#yg}X#qg|2bV&JE=H>2-E`wsQN^kqOE2KhR7?8e4$<ZtNTz@yR<J87%~
zSLsu!qVqq{D&(}}-f;{^d9`gfqn;YWd7#RlR-PSMSq$w%wglEk{*g6&+Um|=Lf*~}
ze!V$9qTU>NG~8eviBGBXXUii7&!YYbPcDpIgxeUf5>A2d!>Z_vqAxwXLtAAQ?FaB}
zCgGR3<2Y?6&Lx!=w4Whg&7^l3x0sGe$O=&3;-Rt)!EvkIP6p^$MLR$BqC5v_=jBN%
z*KK7iTuFZ@e8Cf7C(Xe`Rct*i^6uz-%sl0&zs*8Y(=G^=Z=P@INU-6c?cf{aud?6D
zXP`4NnFCUI!o!bR$JZFj3Ex9^1@-K9j4$;GjLDYFc9P+nRNkk*UK;lQFiK%oDK8UM
z=BY_%xnzzMN2e9C(F`oX%Fe-e=>G)WA&gB)zsfb91?Z{FMy?Z5kG4KI6=@f;7{=w{
z38S4UY5$L5U_MGgJkRJ*`Oq58O*=OORYt?+@CHUlVq`Kp%c$$RR@umt4Y^9Fb!0a>
z+`!&a%kqVtgZ1-@rE$>oJK8cRja52;Y$}7-A$w(wJ-2!f7~>)mCDHvE+1EHWg{Qt9
zE45##H)H$)D{Bk)V<!t^E7=8kuG>mC2CPN-d)vN-;!p<gJ>s}aJp+?%fQj_CM0SPx
zTAmGzX+YlrWGc^*<wqw7erjdMt<7qd=jh`L&9PVi{jJedR^U-po~$TvkvTr4uJQ`w
z$x9^$cIMee|8=Oc6dm1+D)Bs{?3ih`KMT%HR~@@S*#D7gDQkaWYT|z%;ZJmaz`#M)
zLv$P?Y0pNka?1`Vim}nQK8F4T>U-&bo986$Kc%dKJPun~nD`f-LOd;a7V#WL{*vbx
zbaHqYlpdpJU_ZvWnD7`+4HQe;$%mpmgZ|p+C6z%89>(KO-+So3O6q{0q1%_fCeWAX
zSL$wb-ljf<M@26&6;De9FEFwhrN=0(XVM4AitsE(rt+941@g6U5KepxzhcZzbcQnK
zPwOaRM^0q&^Gh`-*|BjSoto6g^K7So3>?gu0KPvQJy2-Ea{|F)I#nuBzfS$MX*!~)
z*Q5Rjd0C8Ir9KY_lFC<%uS4Gv^jru-t(~O)N%W0Ge-~p_w(#^u_ObR~C710;hoOGB
zpAQ2~QJ4n@()T5NOuIe|=1I+S1YN$&9Am5_@58&;T8d1CZw+tRh29Zc|AlcXIcVQQ
zUd&@BUPnXU>E(G+U}!n~45h3%vl^X`=zq%KBGeBfk3gp-I=gAF;>m<;CH?R5=u>Vj
z{lCI&v<LI3+~R4Aoj$Y|!8Wu#t*9iG;}}ty0}o)dH%10fp95>)2qMStJkuF-1-8Y|
z+GOKHsqaR28}bm8zu~z}yEgLAc^Y6VBdpKZL-aXQv;ScTzd<+=mSSLSI(E|zhQm<I
z346j&`c*EV6N4<N+(EYxPf{tXNqCMh@d@Pm0uHCHGLv>)#ulf44R*$*VE=!ob0D2<
zSz!%0gU$##la~Pu^ym4W!G+Opfo^wn>QKMS^C5lF49H4<8^)__(L_9FcvNQaM4{J|
zc0uZ$uyI29*ABr%o|<%iN_zzcI?^6u4Iy&Ww)LIxH4~}?VL;_6<5arCay*aeUvC$n
z@BFFQN-D*yZc^Km0zqaJ^!cokkHLejQUvl~+MALYIE+qn+g~1Ms?y&c*;_bsh<Z|a
zNM#l6Dc12`$!yG_uLcgD*Zu#4?FffITCc+yw37BUIM*7T$fO&2HduqpFw!WQ(P-<`
zTeg1){of;N#rQPn?Xdlb9sJsNTw^Zp|Ng6-H8RIeuAf{gJy_ATWGl)={UhXcZP=xw
zpIez3w>_D0$?x&pM?R1-RhaCuo#QC-Q^+!7V=Vn4+JBXIt-@j0m-Zf5%}$gPPO$yb
z{Q!f5Rk5X&<vk1z#gWgg?s(cN8EMyKOd##=y%PR)9DEyH55K0pf2Xr@M+Urm&48U&
za0R704BSrpS8Mn>vgBnLWBSwA7v|(Ci2g$Cs{CweTKtO+^xC7d8u=pTcYI4j<rL3T
zJ3$Px^;SL$V?9xBO<yDv--8cnZ&ceml87MBV4b?mxLC&2vh4@fW<SPkqOTwALexzm
z{(TVoG2ml_J+1N;WQ%x`m#g$;MDG#wrDHk$Rjj`BezE%FV1ym0*LyLx?|q!<57WZ(
z$olc*MXyxS{hyJ}r3lhu@O>O<jbbpgi!kq08AWFlkIHh46g5>xAImW7P%ZlM@TeqO
zs$Rp6y^rByv^~F3*@|!?jh75QOZ^<rcAmXBFadc>>YaGT(^eT~X<D2JCWuD%Gvmu*
zFNXHXq)wQgzLJcONB#{@Q|c-o>iwU*+@j-M1nE$^fFYGz)RUJJcJLF7rXy-er7?Qt
zZC{AxMK~FS{Pc~*UMikR$a?V<V|>Rn%zv8B&Ik_jBo+O6MdhppG08FNC0Shx>Doz)
zQt!gE7DM{m!52_vA!Ev*tCE>|3-~>HD&JZ*f<w@GOTS8zN*UYvJF-9~nFl-YOyDWN
zqjG^sI@|iQWDdVX)+||Dx{s~B0OX}@-x%vy3)*|=_r^Z~VQD4|;TeLV4jN6Fjl2ws
z(biC7`br=_O8bq%M_&eXLa5KQ6Xdf|@EYJB)#z_WUv|cfwSDo}$%3ql<}XU4GL3Rf
zUWWPy)TcAB1MNP^jD1HRe>ZmQ;`xyN3bb3Jqw)mf%Xp5`cbR7kHdGRs`~daY^hNTd
zrEa?%iHyIQiuKo^G9GDr8HUv{dIjaAa+}IK$Uo&7%kvY@Eewz5nZ<LIrzZNP82<&j
z`a{+sJH9FPZq(1Cqq32DC+53??sA^2ZH?TK9^puyK!hr9F`x(&sjOpAZBzCB(}%vw
zcI9Kx??rzDo|38N-58rwJGvfADhH6}MbjUxYCPSnMg57YH&*h|cM5ieS?SMg`>Qif
zB`vZWR#pm~YuH_keobT*=`RPH+y37yJ%3Ocih&U8L_7mjremx&ef6yI04vx3=jm!z
z_d{gecxss;j@;;eZVi{F9)t}Qnb^la&ho6Xvd`fq{TJPj(D~X5zs1;el-|Nf8z!1T
zyF1S&CR~KhbC{ZEAbl#8Wtno?jz7jYkFD$PbSjh3abe?<X*zma=haNBFUnU8N`b+4
z2+G4)+DRpnfpK<{B-v0Z7p-hA#y+w2aO+ej9QYiaqsb=vnsyg#eZte5`d~Xp2EB4F
zAj}27WWZ0!2BGJ;VU0IV=9J_G(M!*`icEGB2G9;v2jv@dZ!)eI^+P-->8pWWL+VrE
zDD*c_@4@4#i}EWJ&eK@IptC6Svy;t3rZUU6+t9z2ewB<?R-UnuR@NB9Rjhn7IwR<7
z$Mcl>CFF%*ZglzAGmfR`cGrzE-wvS9Tk_Je1%>%M9eGrGTAeoZseEMR;nX{OCFUP_
z*n&3b-bSxFI(K-oQ$K^u2j_3Xg;1qG&yTuMl1dfZ@f!pD?OwiXCmM%RZe(3Bpz?;t
zAN}4u=UAc2G0St-&V6L<8S}lhv6cSxjK75a{?^WLy-_C8@ImP_Is$1ogy-#`B^U|A
z;3OD_>^+_|=v3s{K|P$l0gSI>9Y)R3gz-tGxs|_bC%nwKq*4_<&&L?}1w%z?d}cd4
z!cUN0wCy>T-7(@uzY!KHQqRwrEa=UJ7hzo<m51n$=h=&HN@NqzZA7~Vbzkd9b;G~o
zUkgt?2$!MMB-v_0FjAcfS|V#=C(tBoY&{ft0iMH5&>G$1a5>Kh=zNRLL7pzOb6}$)
z{e6?!c+b31QNTb2I#x5N2#=e3l=bvaScLXujJ(ExN^@&uH0^2h?}s~hBG73LcOk0=
z1DSLZk4jJaR0=S*ksa@owEp1;n&L!B6#hW55A~!{7GrZU)|KZMgavq}CUwFe&|l9a
zgLr=AnZvUR*?nvlW6S_-J%huL*Q6ecyel>vFxJzB#ycoyq9YGXDkD%Xh|*RDCYAi?
zbfWQ|)$3>JgS<NRC5#!tnAg<jVRte0IO-RXx3s!Rw!~%nMOmFnLzD}l{07CBOz4Nf
zGRR*dPf6WLUug{7rL9tgdVlmTo2KIj7=-Lg#y^IGto%3F2U$aO!;x=>OR$v|n~SIy
z&|j1uSfd(K*w)+8d60pXdFn8*KD>?WIfFY<k45$b)~8)qeY7i3?*?nZv(|yaOf-Ue
z19ViD!@kJ6G0z_K+#VW}sRTonR!q{})*sP+7lSI(cm`SLc3|WwW0K17qzY_g<=fHu
z8e1x{)Nk9dm1w`kQySSVWS;4EKvgEaXX`s)JKAk+TShkVJjY-F&rY0bK;JrK?J@Kx
zvUOH>4YFTpXGJH6b>7GJRX|szB>lOt-<A0tu?W)P$r`KN2UfP;Hbrr(9n=xM#tiy{
z_C^dAqQ26Ok<rGC89?7VY9uR}t*uVjN-CG-0FBR*&i_j5;arq|r?UjlXUHxw!5=6-
zvraUjo)UR`<g3vsjuZbV==I0O#|Wpvk7zeUzXwky>L+;$GcFZvl^EUsbr5c}UOFw+
z`7?cQP~60T$>>B<{|0$(>Yb4#l{B{Qhr9_ot$9k~*isaVQ&$-dukx(mc{kZuPf7-j
zVWOn+9qoNQDo*4T;1cUphhzg?^i883hwfW&4|?Tb874kMeIbv^3uK@3>}29Vp5FB5
zHeLFs$MF;YY>Khxc9N_zMm-eeq_USuW+K~$>^J&Vey81waX(pSjg%aqe<Y0-a3T7C
zSpA==zk}`_c!O~&zIy++!lN4)YXo1xPf+NKVljBtDjIddM`booI{FI3)5-crGG+j>
z7w{`49Se8a$)m8VlAq@{TUR@q{-W>zV?}vXzQ$lGWOc3KuaNzOk!s#v{+xkc5bgD}
zXTt0lD~xUtocE(IFYWJS2QEe4(K=9x{_Mzm!l(4j;(1Lw>HXsfrco8)#~7)IQauLy
z<H!k~{m6ZJf{`u2pfCMHtl<*KRSv=8@F?R|rlPA-0o^!Q#kSYbe+JzzVK4m~#WQs5
zLy*ZD%!2ZtOscXO`47m)p_9+bBoE-3!t;(D<A>fCw(drED#mBhzkqrk>iOY$*dCp`
z)FaS8PkoEN|G%K)5khT6f7pYL&D576Pb#%&KSX{EPD5uh2J~a_*JL_jv^ykgmq90~
z9ATWwE}pK)>m~Ii#lIke0?7ssWU~2okOq#Tzbv6lDqZP2jeY`p4Uw0?sV6)alG#Yo
zji6uiR6w^jk4h!D6B`~kjUH6y@w{(4SHZqKQ!uy&`BrptU}PqBm1fkN(Wf#H$4*h-
zZ<^kJer5I4m``74bWY;f4|16Lc=`_@pOEwyr4n=uW5Rq0{TZ~6cKKvR#xW>0?GCUR
zk4h<?bXMm_^#4G916fb(T!5)H8C1!FtQGyKcuFDv)Q)p%|5Z{lvC45e7O292QD6be
ztr^sdN2MWpBj~G71fI~R62p^*w#sa4rvr8xP=5$p*s*7+`yq2NK8pGsp1;mtA%y$w
z;AhASV(@2Vsd&C)qHOeiz<@7cYt2NNPoK(SCisr}OX};WzpxXkFOhm89LLy$j2#RQ
z!4b%#sTaITWso(L3B^iu&ecdtLSRv6<!#$19Z#96LtsqYyy$6lQU}C`M+DFNVA|W;
zUQY{6Q9aV-9vm1R;Tjem5#bu(cE!3Q<7mW%xuOGOV~0h>1iNC~vF<omcw}r`OngvW
zcvNJp-?jlWrl&3tG$=GCDn2sUh1wu@j4LuK&J`0M85tfKy6yhlf+_O^1x8AS*`TPw
z(Gl)Acd#okc3$hRTpowl4_Et`U<UqoJy%qGTx?umWH9zrkEV$;xEuM8(c!Uwng6#u
zJThtGfAti=P+;%~S6q~9aA3?Jy!y*V@VwvO+f?ztx#UX_lI;D<p?M46zna+<8y6Kc
zh<^sg#m8<7OURZgT~ZLYMSob%nLV7|Fn5ew(|V)2En(3bXJ#7;v%+mvmYhhxt@zqh
z*_vx#I=kcISbwaesdt+O1O^Rq6LEz#C@L}}JTyMW9c(+<Ca><ldbgF>)hlH|!aO1>
zKE`f$U~n)F#IiLJQN#SUjoMoyRqoKJxHxyD(Ms~W!MshMj@efG;Ay8PL_MzHsL0an
zvOCBfKGf|BwCPj9#qI{ix(VhWatNQKTpA71i3JC{;=<6jlgdtvJ2X7jbSc{^U@F)Z
z6y_#EUN>W-0|&c8q9RBSKS#@m2=})1hXbAIBBFu<m4e&)AGzV2_k3~YT(ORpe{V{A
z8^h|yUOQcZ5#hoA*b>*!z=(LIc!WEMRNPkac)h~;|C!}U+w15M7`H9_cKVF-8vpE*
zVuX8M_n+IOwbl}f<a8F=w&>^GskV*$txhV$-XpYa%kQt#=S?zz?=dWz+%%b+upp%~
zB*B%_S#aLqi|I2a%l^a{DV-HFd6FV-62lb{9y!Q0jI<1o#Ov^2A{-SP8$KXn1bY?~
z7*DLj<6L1V1V)%t9^hv4kO%v@I+)FfaSw@i$Hut=U6Jl#|2ofpjxOwo)nI=T{IfY{
zd;U&0dfCK4o|0vPIOK6<W7*uu_>jP$IJP$?))njy36EstUki=qit%%`w0T01<4ANx
zKphpl8Nh~;Z#vJ(ZFv=9xph3;L4gsmQMxgLy#|77%g_JtL>6ORvE*}*Jcx-JY-UpQ
z10zTH)g2I1KLeh4r;m+~j*bW?|8d1y^?E}H|LT%Km)jE=7ZdK5C;#b)H(>wah&k~j
zxp&<ETS#K#Ji0!TjQuw!{(Cf%R`Fl<<Uhjv?+pr1zB3;0)+CwxYg_&^82`t9{O{$4
z$0o=BwFmK$;iSBEJT69;rAg4zCCh}wM@00C3>@q(8(Z4X)kNu~MEom5+4V}SG};|Q
z(AWe{8ZVnD?l7;4*O~@|N0RY_y|<8G;@ND@E-5N=SalrTgGrsR@SrfxCBw|Ck3*?9
z41RD{?Y$Z7myj!`bALx~){&Juwb*q9v~L^hJx_n1xhO8q7_*>%Z{1&>o3o|C^NPO8
zo6V#zM<_lzIFNfT@l;OdyfoFAKyT9^93u#huB1P<|0$Id62^tcMYw$j1jZ!x%<n9g
z!sETk^#a0A-QLMR2D}d2SC6^7ldiG~uJ91OA_9ZFH;BtUoGV|ai?0jKV!k|N&%P!6
zTs>&ShDF6k=(EGTW6;bnSi%^##4m9~LFc9v+04$GYe2zHSe)INKcQq1XWxLTzLou5
z{*`K1s+^%sU~HUkmzcoF*oeTmsF>O=B$1)<fuU~SF7Cj=wO!4<oBfxxHuponCQTEH
zx}1{|`F3iWI&~K}i%#JG^+FAwHjIlIz=f(;RX|{TV0;Kk5t?wKlyl7gUuR;2(#|3&
zTQyaJH1%z(H~L`i?M9Kq+~KkDk)dSA$oRpop7Ak9_5}?hiX)K(a|LxU?<H@z_y!B*
z8!R%|9p{(Wr<}7y>a>iKg#>4DXU>Gh6`cXjZi(MlbnbJyT7>J38_IWBuy2Q$sF8Zh
zM;uv+udYZ^GcJ+;5dO>*S*-K1zU`vo!bc`lsp?$jaSh^o&1ks-2QXz&SOhN}JR0Wa
zJ1w$;D>%@FZ;?@?czongF7w#9BP;np3uSeY!O<~M!SRE*^+Ur4#5w+s(Ep}gk1@=<
zjSqt`E%$$Elw5KpcOm(N>iegI|Lz^YONEU{zRdL63-3}Bj#qVdO_vm+go4$a(JlYS
z*bo@4`+tm1!kB8#M@0fm9>w~0_I@q0=P}7wn-Edmx!OO;1FNJp*lJKzu-oyEgd7kU
z?~Y8YR>S!`WkTvY&g_X5>NvYQ3%1aUZ%_nZp8uI@iDT<JH#iG4bH~JmhqB#q?uZC>
zFWF8emap%el|FS$SYX6}gbuBoK8fEncmC;2{Jo{qFMS$cuLFstJ3E`D&ieOwb7U&4
zcjisxzk_=)WgV0Fz8nJY6yCIVSYbfY2d#3`HOPL_;&hx>Bf;6t>60nBII(?i=Yf>P
zn!5+Epw8iLSIaQo%GO#V?^i81OL(MTVy6Dit*LS*9VFLKP6da-9oZmZf3Wl2#9nS^
z&J?BJa+C5hGl(%sc3f_)n2+HKd_NKtcVxnla?X67q$8YcnoxJB*ORb7{HfqQ+}cW6
zjMbaKeCP6Y!1smK(J!VW`$)iO4t+?nRp1C;y}tY=iquzc*T~Q#`y$vHGOMQ>V+o#6
z=VfPbLeDVg@`M`$op}>pg*hu_Q@nj!@JZ%%H6}QL|MaDA;=pj{S*L&3$Pn-D{$p3M
zoc!SYqc5@6AZN)G75<((#+5wH{>oQQX{dYHk(FT)afy8fJMX8-&6OG+;rQE+IJuS3
zE6(ZL)mPb09L>)EOU0gqe~olIWRBZ5i0us@z)0`4`1jb@#Bbu9OVgwe_H(rMZe7CI
z?ao{Yb4EEYIpY!sjdrfiL=<vNbta@O^H&bIWB39M#UMK~(%iX3ms>Z^(IF%-IC1T4
z=b}_OlP{RNE1o?{?DC#-OxlFSi<}WP0^E^DcCsy8vo7nrYgjxNq`f+m$Cg<L6W^4i
zP`bs=&6${$+kdc|A2zXxCl)(*rb_sBnKNDD#^p{|>Wuakp}Riu<QivW#_C>QM#l3y
zJW??TIkGRt6)bzP$<8TXw*R~f6a0JdUTC$=8By&Yi!p8{yP3ULx%a*BkGnMC+%{*?
z#8caxqceM&u*^34HS*tIRINEc{QlRADlmpi*XAro;mFQV?wv4qjNVl43f!!`{V-;(
z-dG*TVY=n{dxN6q=L!ht2dF+LI6>x6vauxytDA4Sq&*~<bYnFsqxiz`OK5h;xjNy=
zA!nYTru;4l=Y;+J3H5i*Bnw}pOZi1k@gqiu)6ezSP2df$?T<LJlMK|!Hm^WeU_9rr
zb$MqIPpI2;#?^K(r}ygrdrlc=$(SOpywSB|gI!(qYL0Y=4d&1faF2}A>)+TlzgWC3
zcy$$WH%B*+zsCGE5noO*{17xFYI|KVmid0*2M+4)81E_M4V>hhpPc(wKoU9(bmnf9
ze3}1uVYq&T|Br5LQC!TCm3#sGHD_%{vt()dcldQ9{M(nmmPsi7n-}Eyf9!#xs&lO5
z@kIU|DSbr}c9$;XkU&08lDqVuVfZ^}{||ZLNuC(q{Z8^MGTE*ezmf&$KQo3njtmdw
zXQ)1=lBJLL#Q*E(i;j+_;pFu3ewp!mhF=$LY_gi9i1k|0=QiJu-pzLLDI7G2-!Q%{
z|Naf5xbx}23y&{EB1jhT>&MU0L@ArFtUmAj5{I466wZi*(np>B5+)yY)@bRy_soT^
zF=0nmM#Q-~M8$^dZ!<bA+9GqU@Oz#Q{pb)ryqQWrg}m=V?~&)=?mFtc?ujvn(d#L{
zKsv|iV>p6KjS=4U|9!Cd_ST;RyaD?A2Ko2tHEaLxne(64|Fvz#cHp46c>eGbD{m9$
z9COB{%Gq?d_xQTHc4}iYCNMGMNoTW^t=jR6%KHh|()$~0<X@geI-0Nsbt}DNTuJ?`
zQq3;>Xyo%kE44!s+kW9(p28CzW4;#nx*?wWQTo@n$G?6$bT+>k^c9r+SA*U=++2M3
z@dMu+1~SamIx13s^5n}`)9Y$76VPYBWSFg~Z#C~P74Ppgb2)myXZYUNj+k7MF;4kN
wj+^~h@=JVlhHnlM<-j@Tl++RWxs=fCymNfjq;yT%H?#Tw!|U?%^G?_Q2TfN?TmS$7

delta 36008
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

diff --git a/InvenTree/locale/de/LC_MESSAGES/django.po b/InvenTree/locale/de/LC_MESSAGES/django.po
index 539f42aa8b..d8342de36c 100644
--- a/InvenTree/locale/de/LC_MESSAGES/django.po
+++ b/InvenTree/locale/de/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-21 09:17+0000\n"
+"POT-Creation-Date: 2021-05-05 17:33+1000\n"
 "PO-Revision-Date: 2021-04-21 10:02\n"
 "Last-Translator: \n"
 "Language-Team: German\n"
@@ -67,35 +67,36 @@ msgstr "Thema anwenden"
 msgid "Select Category"
 msgstr "Kategorie auswählen"
 
-#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344
-#: stock/views.py:1763
-msgid "Invalid quantity provided"
-msgstr "Keine gültige Menge"
-
-#: InvenTree/helpers.py:378
-msgid "Empty serial number string"
-msgstr "Keine Seriennummer angegeben"
-
-#: InvenTree/helpers.py:399
+#: InvenTree/helpers.py:377
 #, python-brace-format
 msgid "Duplicate serial: {n}"
 msgstr "Doppelte Seriennummer: {n}"
 
-#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409
+#: InvenTree/helpers.py:384 order/models.py:245 order/models.py:353
+#: stock/views.py:1763
+msgid "Invalid quantity provided"
+msgstr "Keine gültige Menge"
+
+#: InvenTree/helpers.py:387
+msgid "Empty serial number string"
+msgstr "Keine Seriennummer angegeben"
+
+#: InvenTree/helpers.py:409 InvenTree/helpers.py:412 InvenTree/helpers.py:415
+#: InvenTree/helpers.py:440
 #, python-brace-format
 msgid "Invalid group: {g}"
 msgstr "Ungültige Gruppe: {g}"
 
-#: InvenTree/helpers.py:414
+#: InvenTree/helpers.py:445
 #, python-brace-format
 msgid "Duplicate serial: {g}"
 msgstr "Doppelte Seriennummer: {g}"
 
-#: InvenTree/helpers.py:422
+#: InvenTree/helpers.py:453
 msgid "No serial numbers found"
 msgstr "Keine Seriennummern gefunden"
 
-#: InvenTree/helpers.py:426
+#: InvenTree/helpers.py:457
 #, python-brace-format
 msgid "Number of unique serial number ({s}) must match quantity ({q})"
 msgstr "Anzahl der eindeutigen Seriennummern ({s}) muss mit der Anzahl ({q}) übereinstimmen"
@@ -140,7 +141,7 @@ msgstr "Name"
 #: company/templates/company/manufacturer_part_base.html:72
 #: company/templates/company/supplier_part_base.html:71
 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108
-#: order/models.py:101 order/templates/order/purchase_order_detail.html:168
+#: order/models.py:101 order/templates/order/purchase_order_detail.html:143
 #: part/models.py:710 part/templates/part/detail.html:54
 #: part/templates/part/set_category.html:14 report/models.py:192
 #: report/models.py:505 report/models.py:544
@@ -165,23 +166,23 @@ msgstr "Beschreibung (optional)"
 msgid "parent"
 msgstr "Eltern"
 
-#: InvenTree/settings.py:493
+#: InvenTree/settings.py:491
 msgid "English"
 msgstr "Englisch"
 
-#: InvenTree/settings.py:494
+#: InvenTree/settings.py:492
 msgid "French"
 msgstr "Französisch"
 
-#: InvenTree/settings.py:495
+#: InvenTree/settings.py:493
 msgid "German"
 msgstr "Deutsch"
 
-#: InvenTree/settings.py:496
+#: InvenTree/settings.py:494
 msgid "Polish"
 msgstr "Polnisch"
 
-#: InvenTree/settings.py:497
+#: InvenTree/settings.py:495
 msgid "Turkish"
 msgstr "Türkisch"
 
@@ -375,16 +376,16 @@ msgstr "Zieldatum"
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr "Zieldatum für Bauauftrag-Fertigstellung."
 
-#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1227
+#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1241
 #: build/templates/build/allocation_card.html:23
 #: build/templates/build/auto_allocate.html:17
 #: build/templates/build/build_base.html:123
 #: build/templates/build/detail.html:31 common/models.py:703
 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77
 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261
-#: order/forms.py:278 order/models.py:593 order/models.py:784
+#: order/forms.py:278 order/models.py:603 order/models.py:794
 #: order/templates/order/order_wizard/select_parts.html:32
-#: order/templates/order/purchase_order_detail.html:200
+#: order/templates/order/purchase_order_detail.html:175
 #: order/templates/order/sales_order_detail.html:70
 #: order/templates/order/sales_order_detail.html:77
 #: order/templates/order/sales_order_detail.html:159
@@ -458,7 +459,7 @@ msgid "Location of completed parts"
 msgstr "Lagerort der Endprodukte"
 
 #: build/forms.py:215 build/templates/build/build_base.html:128
-#: build/templates/build/detail.html:59 order/models.py:445
+#: build/templates/build/detail.html:59 order/models.py:455
 #: order/templates/order/receive_parts.html:24
 #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252
 #: templates/js/barcode.js:119 templates/js/build.js:770
@@ -508,7 +509,7 @@ msgstr "Bauauftrag"
 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183
 #: templates/InvenTree/search.html:185
-#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
+#: templates/InvenTree/settings/tabs.html:31 users/models.py:43
 msgid "Build Orders"
 msgstr "Bauaufträge"
 
@@ -516,8 +517,8 @@ msgstr "Bauaufträge"
 msgid "Build Order Reference"
 msgstr "Bauauftragsreferenz"
 
-#: build/models.py:127 order/models.py:99 order/models.py:595
-#: order/templates/order/purchase_order_detail.html:195
+#: build/models.py:127 order/models.py:99 order/models.py:605
+#: order/templates/order/purchase_order_detail.html:170
 #: order/templates/order/sales_order_detail.html:219 part/models.py:2187
 #: report/templates/report/inventree_po_report.html:92
 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
@@ -540,10 +541,10 @@ msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist"
 
 #: build/models.py:152 build/templates/build/auto_allocate.html:16
 #: build/templates/build/build_base.html:118
-#: build/templates/build/detail.html:26 company/models.py:669
-#: order/models.py:637 order/models.py:669
+#: build/templates/build/detail.html:26 company/models.py:688
+#: order/models.py:647 order/models.py:679
 #: order/templates/order/order_wizard/select_parts.html:30
-#: order/templates/order/purchase_order_detail.html:156
+#: order/templates/order/purchase_order_detail.html:131
 #: order/templates/order/receive_parts.html:19
 #: order/templates/order/sales_order_detail.html:207 part/models.py:321
 #: part/models.py:1876 part/models.py:1888 part/models.py:1906
@@ -628,7 +629,7 @@ msgstr "Losnummer für dieses Endprodukt"
 msgid "Creation Date"
 msgstr "Erstelldatum"
 
-#: build/models.py:223 order/models.py:451
+#: build/models.py:223 order/models.py:461
 msgid "Target completion date"
 msgstr "geplantes Fertigstellungsdatum"
 
@@ -678,9 +679,9 @@ msgstr "Link zu einer externen URL"
 #: company/models.py:135 company/models.py:501
 #: company/templates/company/navbar.html:70
 #: company/templates/company/navbar.html:73 order/models.py:123
-#: order/models.py:597 order/templates/order/po_navbar.html:29
+#: order/models.py:607 order/templates/order/po_navbar.html:29
 #: order/templates/order/po_navbar.html:32
-#: order/templates/order/purchase_order_detail.html:234
+#: order/templates/order/purchase_order_detail.html:209
 #: order/templates/order/sales_order_detail.html:264
 #: order/templates/order/so_navbar.html:33
 #: order/templates/order/so_navbar.html:36 part/models.py:871
@@ -713,47 +714,47 @@ msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein"
 msgid "Completed build output"
 msgstr "Endprodukt fertigstellen"
 
-#: build/models.py:1118
+#: build/models.py:1132
 msgid "BuildItem must be unique for build, stock_item and install_into"
 msgstr "Bauauftrags-Objekt muss für Bauauftrag, Lager-Objekt und installiert_in eindeutig sein"
 
-#: build/models.py:1143
+#: build/models.py:1157
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1147
+#: build/models.py:1161
 #, python-brace-format
 msgid "Selected stock item not found in BOM for part '{p}'"
 msgstr "Ausgewähltes BestandsObjekt nicht Stückliste für Teil '{p}' gefunden"
 
-#: build/models.py:1151
+#: build/models.py:1165
 #, python-brace-format
 msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
 msgstr "Reserviermenge ({n}) muss kleiner Bestandsmenge ({q}) sein. Zugewiesene Anzahl ({n}) darf nicht die verfügbare ({q}) Anzahl überschreiten"
 
-#: build/models.py:1158 order/models.py:758
+#: build/models.py:1172 order/models.py:768
 msgid "StockItem is over-allocated"
 msgstr "Zu viele BestandsObjekt zugewiesen"
 
-#: build/models.py:1162 order/models.py:761
+#: build/models.py:1176 order/models.py:771
 msgid "Allocation quantity must be greater than zero"
 msgstr "Reserviermenge muss größer null sein"
 
-#: build/models.py:1166
+#: build/models.py:1180
 msgid "Quantity must be 1 for serialized stock"
 msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein"
 
-#: build/models.py:1206 stock/templates/stock/item_base.html:306
+#: build/models.py:1220 stock/templates/stock/item_base.html:306
 #: templates/InvenTree/search.html:183 templates/js/build.js:714
 #: templates/navbar.html:29
 msgid "Build"
 msgstr "Bauauftrag"
 
-#: build/models.py:1207
+#: build/models.py:1221
 msgid "Build to allocate parts"
 msgstr "Bauauftrag starten um Teile zuzuweisen"
 
-#: build/models.py:1214 part/templates/part/allocation.html:18
+#: build/models.py:1228 part/templates/part/allocation.html:18
 #: part/templates/part/allocation.html:24
 #: part/templates/part/allocation.html:31
 #: part/templates/part/allocation.html:49
@@ -765,19 +766,19 @@ msgstr "Bauauftrag starten um Teile zuzuweisen"
 msgid "Stock Item"
 msgstr "BestandsObjekt"
 
-#: build/models.py:1215
+#: build/models.py:1229
 msgid "Source stock item"
 msgstr "Quell-BestandsObjekt"
 
-#: build/models.py:1228
+#: build/models.py:1242
 msgid "Stock quantity to allocate to build"
 msgstr "BestandsObjekt-Anzahl dem Bauauftrag zuweisen"
 
-#: build/models.py:1236
+#: build/models.py:1250
 msgid "Install into"
 msgstr "Installiere in"
 
-#: build/models.py:1237
+#: build/models.py:1251
 msgid "Destination stock item"
 msgstr "Ziel-BestandsObjekt"
 
@@ -801,7 +802,7 @@ msgstr "Automatisch zuweisen"
 msgid "Unallocate stock"
 msgstr "Bestandszuordnung aufheben"
 
-#: build/templates/build/allocate.html:26 build/views.py:308 build/views.py:794
+#: build/templates/build/allocate.html:26 build/views.py:319 build/views.py:805
 msgid "Unallocate Stock"
 msgstr "Bestandszuordnung aufheben"
 
@@ -811,7 +812,7 @@ msgstr "Benötigte Teile bestellen"
 
 #: build/templates/build/allocate.html:30
 #: company/templates/company/detail_manufacturer_part.html:33
-#: company/templates/company/detail_supplier_part.html:32 order/views.py:794
+#: company/templates/company/detail_supplier_part.html:32 order/views.py:795
 #: part/templates/part/category.html:127
 msgid "Order Parts"
 msgstr "Teile bestellen"
@@ -954,7 +955,7 @@ msgid "Progress"
 msgstr "Fortschritt"
 
 #: build/templates/build/build_base.html:160
-#: build/templates/build/detail.html:84 order/models.py:667
+#: build/templates/build/detail.html:84 order/models.py:677
 #: order/templates/order/sales_order_base.html:9
 #: order/templates/order/sales_order_base.html:33
 #: order/templates/order/sales_order_ship.html:25
@@ -1139,7 +1140,7 @@ msgstr "Bauauftrag ist nicht vollständig"
 msgid "Alter the quantity of stock allocated to the build output"
 msgstr "Anzahl des zugeordneten Bestands für die Endprodukte ändern"
 
-#: build/templates/build/index.html:28 build/views.py:667
+#: build/templates/build/index.html:28 build/views.py:678
 msgid "New Build Order"
 msgstr "Neuer Bauauftrag"
 
@@ -1226,141 +1227,145 @@ msgstr "Bestand dem Endprodukt zuweisen"
 msgid "Create Build Output"
 msgstr "Endprodukt anlegen"
 
-#: build/views.py:173 stock/models.py:969 stock/views.py:1789
+#: build/views.py:168
+msgid "Maximum output quantity is "
+msgstr ""
+
+#: build/views.py:184 stock/models.py:969 stock/views.py:1789
 msgid "Serial numbers already exist"
 msgstr "Seriennummern existieren bereits"
 
-#: build/views.py:182
+#: build/views.py:193
 msgid "Serial numbers required for trackable build output"
 msgstr "Seriennummern für verfolgbare Endprodukte benötigt"
 
-#: build/views.py:248
+#: build/views.py:259
 msgid "Delete Build Output"
 msgstr "Endprodukt entfernen"
 
-#: build/views.py:269 build/views.py:359
+#: build/views.py:280 build/views.py:370
 msgid "Confirm unallocation of build stock"
 msgstr "Entfernung von Bestands-Zuordnung bestätigen"
 
-#: build/views.py:270 build/views.py:360 stock/views.py:425
+#: build/views.py:281 build/views.py:371 stock/views.py:425
 msgid "Check the confirmation box"
 msgstr "Bestätigungsbox bestätigen"
 
-#: build/views.py:282
+#: build/views.py:293
 msgid "Build output does not match build"
 msgstr "Endprodukt stimmt nicht mit Bauauftrag überein"
 
-#: build/views.py:284 build/views.py:485
+#: build/views.py:295 build/views.py:496
 msgid "Build output must be specified"
 msgstr "Endprodukt muss angegeben sein"
 
-#: build/views.py:296
+#: build/views.py:307
 msgid "Build output deleted"
 msgstr "Endprodukt gelöscht"
 
-#: build/views.py:394
+#: build/views.py:405
 msgid "Complete Build Order"
 msgstr "Bauauftrag fertigstellen"
 
-#: build/views.py:400
+#: build/views.py:411
 msgid "Build order cannot be completed - incomplete outputs remain"
 msgstr "Bauauftrag kann nicht abgeschlossen werden, es gibt noch unvollständige Endprodukte"
 
-#: build/views.py:411
+#: build/views.py:422
 msgid "Completed build order"
 msgstr "Bauauftrag fertiggestellt"
 
-#: build/views.py:427
+#: build/views.py:438
 msgid "Complete Build Output"
 msgstr "Endprodukt fertigstellen"
 
-#: build/views.py:469
+#: build/views.py:480
 msgid "Invalid stock status value selected"
 msgstr "Ungültiger Lagerbestands-Status ausgewählt"
 
-#: build/views.py:476
+#: build/views.py:487
 msgid "Quantity to complete cannot exceed build output quantity"
 msgstr "Fertigzustellende Anzahl darf nicht die geplante Endprodukt-Anzahl überschreiten"
 
-#: build/views.py:482
+#: build/views.py:493
 msgid "Confirm completion of incomplete build"
 msgstr "Endprodukt-Fertigstellung bestätigen"
 
-#: build/views.py:581
+#: build/views.py:592
 msgid "Build output completed"
 msgstr "Endprodukt fertiggestellt"
 
-#: build/views.py:721
+#: build/views.py:732
 msgid "Created new build"
 msgstr "Neuen Bauauftrag angelegt"
 
-#: build/views.py:742
+#: build/views.py:753
 msgid "Edit Build Order Details"
 msgstr "Bauauftragdetails bearbeiten"
 
-#: build/views.py:775
+#: build/views.py:786
 msgid "Edited build"
 msgstr "Bauauftrag bearbeitet"
 
-#: build/views.py:784
+#: build/views.py:795
 msgid "Delete Build Order"
 msgstr "Bauauftrag löschen"
 
-#: build/views.py:799
+#: build/views.py:810
 msgid "Removed parts from build allocation"
 msgstr "Teile von Bauzuordnung entfernt"
 
-#: build/views.py:811
+#: build/views.py:822
 msgid "Allocate stock to build output"
 msgstr "Bestand dem Endprodukt zuweisen"
 
-#: build/views.py:854
+#: build/views.py:865
 msgid "Item must be currently in stock"
 msgstr "Teil muss aktuell im Bestand sein"
 
-#: build/views.py:860
+#: build/views.py:871
 msgid "Stock item is over-allocated"
 msgstr "BestandObjekt ist zu oft zugewiesen"
 
-#: build/views.py:861 templates/js/bom.js:230 templates/js/build.js:575
+#: build/views.py:872 templates/js/bom.js:230 templates/js/build.js:575
 #: templates/js/build.js:838 templates/js/build.js:1021
 msgid "Available"
 msgstr "Verfügbar"
 
-#: build/views.py:863
+#: build/views.py:874
 msgid "Stock item must be selected"
 msgstr "BestandsObjekt muss ausgewählt sein"
 
-#: build/views.py:1026
+#: build/views.py:1037
 msgid "Edit Stock Allocation"
 msgstr "Bestandszuordnung bearbeiten"
 
-#: build/views.py:1030
+#: build/views.py:1041
 msgid "Updated Build Item"
 msgstr "Bauobjekt aktualisiert"
 
-#: build/views.py:1059
+#: build/views.py:1070
 msgid "Add Build Order Attachment"
 msgstr "Bauauftrags-Anhang hinzufügen"
 
-#: build/views.py:1072 order/views.py:110 order/views.py:162 part/views.py:172
+#: build/views.py:1083 order/views.py:110 order/views.py:162 part/views.py:172
 #: stock/views.py:277
 msgid "Added attachment"
 msgstr "Anhang hinzugefügt"
 
-#: build/views.py:1108 order/views.py:189 order/views.py:210
+#: build/views.py:1119 order/views.py:189 order/views.py:210
 msgid "Edit Attachment"
 msgstr "Anhang bearbeiten"
 
-#: build/views.py:1118 order/views.py:193 order/views.py:214
+#: build/views.py:1129 order/views.py:193 order/views.py:214
 msgid "Attachment updated"
 msgstr "Anhang aktualisiert"
 
-#: build/views.py:1128 order/views.py:229 order/views.py:243
+#: build/views.py:1139 order/views.py:229 order/views.py:243
 msgid "Delete Attachment"
 msgstr "Anhang löschen"
 
-#: build/views.py:1133 order/views.py:235 order/views.py:249 stock/views.py:333
+#: build/views.py:1144 order/views.py:235 order/views.py:249 stock/views.py:333
 msgid "Deleted attachment"
 msgstr "Anhang gelöscht"
 
@@ -1766,7 +1771,7 @@ msgstr "Hersteller-Teilenummer"
 #: company/templates/company/manufacturer_part_detail.html:26
 #: company/templates/company/supplier_part_base.html:101
 #: company/templates/company/supplier_part_detail.html:35
-#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171
+#: order/templates/order/purchase_order_detail.html:158 part/bom.py:171
 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307
 msgid "MPN"
 msgstr "MPN"
@@ -1865,7 +1870,7 @@ msgstr "Produziert diese Firma Teile?"
 msgid "Base Part"
 msgstr "Basisteil"
 
-#: company/models.py:312 company/models.py:463 order/views.py:1372
+#: company/models.py:312 company/models.py:463 order/views.py:1384
 msgid "Select part"
 msgstr "Teil auswählen"
 
@@ -1905,7 +1910,7 @@ msgstr "Zulieferer auswählen"
 
 #: company/models.py:475 company/templates/company/supplier_part_base.html:88
 #: company/templates/company/supplier_part_detail.html:26
-#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176
+#: order/templates/order/purchase_order_detail.html:149 part/bom.py:176
 #: part/bom.py:287
 msgid "SKU"
 msgstr "SKU (Lagerbestandseinheit)"
@@ -2017,9 +2022,11 @@ msgstr "Sind Sie sicher, dass Sie die Firma '%(name)s' löschen wollen?"
 
 #: company/templates/company/delete.html:12
 #, python-format
-msgid "There are %(count)s parts sourced from this company.<br>\n"
+msgid ""
+"There are %(count)s parts sourced from this company.<br>\n"
 "If this supplier is deleted, these supplier part entries will also be deleted."
-msgstr "Es gibt %(count)s Teile, die von diesem Unternehmen bezogen werden.<br>\n"
+msgstr ""
+"Es gibt %(count)s Teile, die von diesem Unternehmen bezogen werden.<br>\n"
 "Wenn dieser Lieferant gelöscht wird, werden auch diese Zulieferer-Teile gelöscht."
 
 #: company/templates/company/detail.html:21
@@ -2034,7 +2041,7 @@ msgstr "Keine Website angegeben"
 msgid "Uses default currency"
 msgstr "verwendet Standard-Währung"
 
-#: company/templates/company/detail.html:67 order/models.py:440
+#: company/templates/company/detail.html:67 order/models.py:450
 #: order/templates/order/sales_order_base.html:92 stock/models.py:415
 #: stock/models.py:416 stock/templates/stock/item_base.html:251
 #: templates/js/company.js:40 templates/js/order.js:267
@@ -2123,13 +2130,13 @@ msgstr "Zulieferer-Teile"
 
 #: company/templates/company/detail_supplier_part.html:21
 #: order/templates/order/order_wizard/select_parts.html:42
-#: order/templates/order/purchase_order_detail.html:75
+#: order/templates/order/purchase_order_detail.html:50
 msgid "Create new supplier part"
 msgstr "Neues Zulieferer-Teil anlegen"
 
 #: company/templates/company/detail_supplier_part.html:22
 #: company/templates/company/manufacturer_part_suppliers.html:17
-#: order/templates/order/purchase_order_detail.html:74
+#: order/templates/order/purchase_order_detail.html:49
 #: part/templates/part/supplier.html:17 templates/js/stock.js:1163
 msgid "New Supplier Part"
 msgstr "Neues Zulieferer-Teil"
@@ -2227,7 +2234,7 @@ msgstr "Zuliefererteil entfernen"
 #: company/templates/company/manufacturer_part_suppliers.html:22
 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44
 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22
-#: stock/views.py:1002 users/models.py:184
+#: stock/views.py:1002 users/models.py:187
 msgid "Delete"
 msgstr "Löschen"
 
@@ -2253,7 +2260,7 @@ msgstr "Zulieferer-Teile"
 #: stock/templates/stock/location_navbar.html:22
 #: stock/templates/stock/location_navbar.html:29
 #: templates/InvenTree/search.html:198 templates/js/stock.js:968
-#: templates/stats.html:72 templates/stats.html:81 users/models.py:40
+#: templates/stats.html:72 templates/stats.html:81 users/models.py:42
 msgid "Stock Items"
 msgstr "BestandsObjekte"
 
@@ -2267,7 +2274,7 @@ msgstr "BestandsObjekte"
 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228
 #: templates/InvenTree/search.html:345
 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
-#: users/models.py:43
+#: users/models.py:45
 msgid "Sales Orders"
 msgstr "Aufträge"
 
@@ -2279,7 +2286,7 @@ msgstr "Aufträge"
 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:205
 #: templates/InvenTree/search.html:325
 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
-#: users/models.py:42
+#: users/models.py:44
 msgid "Purchase Orders"
 msgstr "Bestellungen"
 
@@ -2358,7 +2365,7 @@ msgid "Pricing Information"
 msgstr "Preisinformationen ansehen"
 
 #: company/templates/company/supplier_part_pricing.html:19 company/views.py:794
-#: part/templates/part/sale_prices.html:17 part/views.py:2624
+#: part/templates/part/sale_prices.html:17 part/views.py:2636
 msgid "Add Price Break"
 msgstr "Preisstaffel hinzufügen"
 
@@ -2468,15 +2475,15 @@ msgstr "Neues Zulieferer-Teil anlegen"
 msgid "Delete Supplier Part"
 msgstr "Zulieferer-Teil entfernen"
 
-#: company/views.py:799 part/views.py:2628
+#: company/views.py:799 part/views.py:2640
 msgid "Added new price break"
 msgstr "neue Preisstaffel hinzufügt"
 
-#: company/views.py:855 part/views.py:2672
+#: company/views.py:855 part/views.py:2684
 msgid "Edit Price Break"
 msgstr "Preisstaffel bearbeiten"
 
-#: company/views.py:870 part/views.py:2686
+#: company/views.py:870 part/views.py:2698
 msgid "Delete Price Break"
 msgstr "Preisstaffel löschen"
 
@@ -2566,7 +2573,7 @@ msgstr "Zieldatum für Auftrags-Lieferung."
 msgid "Enter sales order number"
 msgstr "Auftrag-Nummer eingeben"
 
-#: order/forms.py:145 order/models.py:452
+#: order/forms.py:145 order/models.py:462
 msgid "Target date for order completion. Order will be overdue after this date."
 msgstr "Zieldatum für Auftrags-Fertigstellung."
 
@@ -2602,7 +2609,7 @@ msgstr "Nutzer oder Gruppe der/die für diesen Auftrag zuständig ist/sind"
 msgid "Order notes"
 msgstr "Bestell-Notizen"
 
-#: order/models.py:182 order/models.py:445
+#: order/models.py:182 order/models.py:455
 msgid "Purchase order status"
 msgstr "Bestellungs-Status"
 
@@ -2643,8 +2650,8 @@ msgstr "Geplantes Lieferdatum für Auftrag."
 msgid "Date order was completed"
 msgstr "Datum an dem der Auftrag fertigstellt wurde"
 
-#: order/models.py:243 order/models.py:342 part/views.py:1586
-#: stock/models.py:270 stock/models.py:953
+#: order/models.py:243 part/views.py:1586 stock/models.py:270
+#: stock/models.py:953
 msgid "Quantity must be greater than zero"
 msgstr "Anzahl muss größer Null sein"
 
@@ -2652,120 +2659,132 @@ msgstr "Anzahl muss größer Null sein"
 msgid "Part supplier must match PO supplier"
 msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen"
 
-#: order/models.py:337
+#: order/models.py:344
 msgid "Lines can only be received against an order marked as 'Placed'"
 msgstr "Nur Teile aufgegebener Bestllungen können empfangen werden"
 
-#: order/models.py:359
+#: order/models.py:348
+#, fuzzy
+#| msgid "Quantity must be integer"
+msgid "Quantity must be an integer"
+msgstr "Anzahl muss eine Ganzzahl sein"
+
+#: order/models.py:350
+#, fuzzy
+#| msgid "Quantity must be positive"
+msgid "Quantity must be a positive number"
+msgstr "Anzahl muss positiv sein"
+
+#: order/models.py:369
 msgid "Received items"
 msgstr "Elemente empfangen"
 
-#: order/models.py:441
+#: order/models.py:451
 msgid "Company to which the items are being sold"
 msgstr "Firma an die die Teile verkauft werden"
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer Reference "
 msgstr "Kundenreferenz"
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer order reference code"
 msgstr "Bestellreferenz"
 
-#: order/models.py:455 templates/js/order.js:303
+#: order/models.py:465 templates/js/order.js:303
 msgid "Shipment Date"
 msgstr "Versanddatum"
 
-#: order/models.py:462
+#: order/models.py:472
 msgid "shipped by"
 msgstr "Versand von"
 
-#: order/models.py:506
+#: order/models.py:516
 msgid "SalesOrder cannot be shipped as it is not currently pending"
 msgstr "Bestellung kann nicht versendet werden weil er nicht anhängig ist"
 
-#: order/models.py:593
+#: order/models.py:603
 msgid "Item quantity"
 msgstr "Anzahl"
 
-#: order/models.py:595
+#: order/models.py:605
 msgid "Line item reference"
 msgstr "Position - Referenz"
 
-#: order/models.py:597
+#: order/models.py:607
 msgid "Line item notes"
 msgstr "Position - Notizen"
 
-#: order/models.py:623 order/models.py:667
+#: order/models.py:633 order/models.py:677
 #: part/templates/part/allocation.html:17
 #: part/templates/part/allocation.html:45
 msgid "Order"
 msgstr "Bestellung"
 
-#: order/models.py:624 order/templates/order/order_base.html:9
+#: order/models.py:634 order/templates/order/order_base.html:9
 #: order/templates/order/order_base.html:24
 #: report/templates/report/inventree_po_report.html:77
 #: stock/templates/stock/item_base.html:313 templates/js/order.js:148
 msgid "Purchase Order"
 msgstr "Bestellung"
 
-#: order/models.py:638
+#: order/models.py:648
 msgid "Supplier part"
 msgstr "Zulieferer-Teil"
 
-#: order/models.py:641 order/templates/order/order_base.html:131
-#: order/templates/order/purchase_order_detail.html:214
+#: order/models.py:651 order/templates/order/order_base.html:131
+#: order/templates/order/purchase_order_detail.html:189
 #: order/templates/order/receive_parts.html:22
 #: order/templates/order/sales_order_base.html:131
 msgid "Received"
 msgstr "Empfangen"
 
-#: order/models.py:641
+#: order/models.py:651
 msgid "Number of items received"
 msgstr "Empfangene Objekt-Anzahl"
 
-#: order/models.py:648 stock/models.py:508
+#: order/models.py:658 stock/models.py:508
 #: stock/templates/stock/item_base.html:320
 msgid "Purchase Price"
 msgstr "Preis"
 
-#: order/models.py:649
+#: order/models.py:659
 msgid "Unit purchase price"
 msgstr "Preis pro Einheit"
 
-#: order/models.py:743 order/models.py:745
+#: order/models.py:753 order/models.py:755
 msgid "Stock item has not been assigned"
 msgstr "BestandsObjekt wurde nicht zugewiesen"
 
-#: order/models.py:749
+#: order/models.py:759
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr "Kann BestandsObjekt keiner Zeile mit einem anderen Teil hinzufügen"
 
-#: order/models.py:751
+#: order/models.py:761
 msgid "Cannot allocate stock to a line without a part"
 msgstr "Kann BestandsObjekt keiner Zeile ohne Teil hinzufügen"
 
-#: order/models.py:754
+#: order/models.py:764
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten"
 
-#: order/models.py:764
+#: order/models.py:774
 msgid "Quantity must be 1 for serialized stock item"
 msgstr "Anzahl für BestandsObjekt mit Seriennummer muss 1 sein"
 
-#: order/models.py:769
+#: order/models.py:779
 msgid "Line"
 msgstr "Position"
 
-#: order/models.py:780
+#: order/models.py:790
 msgid "Item"
 msgstr "Position"
 
-#: order/models.py:781
+#: order/models.py:791
 msgid "Select stock item to allocate"
 msgstr "BestandsObjekt für Zuordnung auswählen"
 
-#: order/models.py:784
+#: order/models.py:794
 msgid "Enter stock allocation quantity"
 msgstr "Anzahl für Bestandszuordnung eingeben"
 
@@ -2813,9 +2832,24 @@ msgstr "Bestellstatus"
 msgid "Issued"
 msgstr "Aufgegeben"
 
-#: order/templates/order/order_cancel.html:7
-#: order/templates/order/sales_order_cancel.html:9
-msgid "Cancelling this order means that the order will no longer be editable."
+#: order/templates/order/order_base.html:180
+#: order/templates/order/purchase_order_detail.html:100
+#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: stock/templates/stock/location.html:191 templates/js/stock.js:708
+#: templates/js/stock.js:1169
+msgid "New Location"
+msgstr "Neuer Lagerort"
+
+#: order/templates/order/order_base.html:181
+#: order/templates/order/purchase_order_detail.html:101
+#: stock/templates/stock/location.html:42
+msgid "Create new stock location"
+msgstr "Neuen Lagerort anlegen"
+
+#: order/templates/order/order_cancel.html:8
+#, fuzzy
+#| msgid "Cancelling this order means that the order will no longer be editable."
+msgid "Cancelling this order means that the order and line items will no longer be editable."
 msgstr "Abbruch dieser Bestellung bedeutet, dass sie nicht länger bearbeitbar ist."
 
 #: order/templates/order/order_complete.html:7
@@ -2827,10 +2861,12 @@ msgid "This order has line items which have not been marked as received."
 msgstr "Diese Bestellung enthält Positionen, die nicht als empfangen markiert wurden."
 
 #: order/templates/order/order_complete.html:11
-msgid "Marking this order as complete will remove these line items."
-msgstr "Wenn Sie diese Bestellung als abgeschlossen markieren, werden diese Positionen entfernt."
+#, fuzzy
+#| msgid "Cancelling this order means that the order will no longer be editable."
+msgid "Completing this order means that the order and line items will no longer be editable."
+msgstr "Abbruch dieser Bestellung bedeutet, dass sie nicht länger bearbeitbar ist."
 
-#: order/templates/order/order_issue.html:7
+#: order/templates/order/order_issue.html:8
 msgid "After placing this purchase order, line items will no longer be editable."
 msgstr "Nachdem diese Bestellung plaziert ist können die Positionen nicht länger bearbeitbar ist."
 
@@ -2882,11 +2918,15 @@ msgid "Select Purchase Order"
 msgstr "Bestellung auswählen"
 
 #: order/templates/order/order_wizard/select_pos.html:45
-msgid "Create new purchase order for {{ supplier.name }}"
-msgstr "Neue Bestellung für {{ supplier.name }} anlegen"
+#, fuzzy, python-format
+#| msgid "Create new purchase order"
+msgid "Create new purchase order for %(name)s"
+msgstr "Neue Bestellung anlegen"
 
 #: order/templates/order/order_wizard/select_pos.html:68
-msgid "Select a purchase order for"
+#, fuzzy, python-format
+#| msgid "Select a purchase order for"
+msgid "Select a purchase order for %(name)s"
 msgstr "Bestellung auswählen für"
 
 #: order/templates/order/po_attachments.html:12
@@ -2908,43 +2948,29 @@ msgid "Purchase Order Items"
 msgstr "Bestellungs-Positionen"
 
 #: order/templates/order/purchase_order_detail.html:24
-#: order/templates/order/sales_order_detail.html:22 order/views.py:1108
-#: order/views.py:1191
+#: order/templates/order/sales_order_detail.html:22 order/views.py:1120
+#: order/views.py:1203
 msgid "Add Line Item"
 msgstr "Position hinzufügen"
 
-#: order/templates/order/purchase_order_detail.html:45
-#: order/templates/order/purchase_order_detail.html:125
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
-#: stock/templates/stock/location.html:191 templates/js/stock.js:708
-#: templates/js/stock.js:1169
-msgid "New Location"
-msgstr "Neuer Lagerort"
-
-#: order/templates/order/purchase_order_detail.html:46
-#: order/templates/order/purchase_order_detail.html:126
-#: stock/templates/stock/location.html:42
-msgid "Create new stock location"
-msgstr "Neuen Lagerort anlegen"
-
-#: order/templates/order/purchase_order_detail.html:139
+#: order/templates/order/purchase_order_detail.html:114
 msgid "No line items found"
 msgstr "Keine Positionen gefunden"
 
-#: order/templates/order/purchase_order_detail.html:205
+#: order/templates/order/purchase_order_detail.html:180
 msgid "Unit Price"
 msgstr "Stück-Preis"
 
-#: order/templates/order/purchase_order_detail.html:246
+#: order/templates/order/purchase_order_detail.html:221
 #: order/templates/order/sales_order_detail.html:294
 msgid "Edit line item"
 msgstr "Position bearbeiten"
 
-#: order/templates/order/purchase_order_detail.html:247
+#: order/templates/order/purchase_order_detail.html:222
 msgid "Delete line item"
 msgstr "Position löschen"
 
-#: order/templates/order/purchase_order_detail.html:252
+#: order/templates/order/purchase_order_detail.html:227
 msgid "Receive line item"
 msgstr "Position empfangen"
 
@@ -2967,7 +2993,7 @@ msgstr "Ausstehende Teile für <b>%(order)s</b> - <i>%(desc)s</i> empfangen"
 #: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
 #: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577
 #: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68
-#: users/models.py:38
+#: users/models.py:40
 msgid "Parts"
 msgstr "Teile"
 
@@ -3020,6 +3046,10 @@ msgstr "Kundenreferenz"
 msgid "Warning"
 msgstr "Warnung"
 
+#: order/templates/order/sales_order_cancel.html:9
+msgid "Cancelling this order means that the order will no longer be editable."
+msgstr "Abbruch dieser Bestellung bedeutet, dass sie nicht länger bearbeitbar ist."
+
 #: order/templates/order/sales_order_detail.html:13
 msgid "Sales Order Items"
 msgstr "Auftrags-Positionen"
@@ -3214,65 +3244,65 @@ msgstr "Anzahl kleiner null empfangen"
 msgid "No lines specified"
 msgstr "Keine Zeilen angegeben"
 
-#: order/views.py:1060
+#: order/views.py:1069
 #, python-brace-format
 msgid "Ordered {n} parts"
 msgstr "{n} Teile bestellt"
 
-#: order/views.py:1117
+#: order/views.py:1129
 msgid "Supplier part must be specified"
 msgstr "Zulieferer-Teil muss ausgewählt werden"
 
-#: order/views.py:1123
+#: order/views.py:1135
 msgid "Supplier must match for Part and Order"
 msgstr "Zulieferer muss zu Teil und Bestellung passen"
 
-#: order/views.py:1242 order/views.py:1260
+#: order/views.py:1254 order/views.py:1272
 msgid "Edit Line Item"
 msgstr "Position bearbeiten"
 
-#: order/views.py:1276 order/views.py:1288
+#: order/views.py:1288 order/views.py:1300
 msgid "Delete Line Item"
 msgstr "Position löschen"
 
-#: order/views.py:1281 order/views.py:1293
+#: order/views.py:1293 order/views.py:1305
 msgid "Deleted line item"
 msgstr "Position gelöscht"
 
-#: order/views.py:1306
+#: order/views.py:1318
 msgid "Allocate Serial Numbers"
 msgstr "Seriennummern zuweisen"
 
-#: order/views.py:1351
+#: order/views.py:1363
 #, python-brace-format
 msgid "Allocated {n} items"
 msgstr "{n} Positionen zugeordnet"
 
-#: order/views.py:1367
+#: order/views.py:1379
 msgid "Select line item"
 msgstr "Position auswählen"
 
-#: order/views.py:1398
+#: order/views.py:1410
 msgid "No matching item for serial"
 msgstr "Kein passends Teil für Seriennummer gefunden"
 
-#: order/views.py:1408
+#: order/views.py:1420
 msgid "is not in stock"
 msgstr "ist nicht auf Lager"
 
-#: order/views.py:1416
+#: order/views.py:1428
 msgid "already allocated to an order"
 msgstr "bereits einem Auftrag zugeordnet"
 
-#: order/views.py:1470
+#: order/views.py:1482
 msgid "Allocate Stock to Order"
 msgstr "Lagerbestand dem Auftrag zuweisen"
 
-#: order/views.py:1544
+#: order/views.py:1556
 msgid "Edit Allocation Quantity"
 msgstr "Zuordnung bearbeiten"
 
-#: order/views.py:1559
+#: order/views.py:1571
 msgid "Remove allocation"
 msgstr "Zuordnung entfernen"
 
@@ -3458,7 +3488,7 @@ msgstr "Teil-Kategorie"
 #: part/models.py:83 part/templates/part/category.html:23
 #: part/templates/part/category.html:94 part/templates/part/category.html:141
 #: templates/InvenTree/search.html:127 templates/stats.html:63
-#: users/models.py:37
+#: users/models.py:39
 msgid "Part Categories"
 msgstr "Teil-Kategorien"
 
@@ -4005,7 +4035,7 @@ msgstr "Neuen Bauauftrag beginnen"
 msgid "All parts"
 msgstr "Alle Teile"
 
-#: part/templates/part/category.html:29 part/views.py:2270
+#: part/templates/part/category.html:29 part/views.py:2282
 msgid "Create new part category"
 msgstr "Teil-Kategorie anlegen"
 
@@ -4695,63 +4725,63 @@ msgstr "Teil wurde gelöscht"
 msgid "Part Pricing"
 msgstr "Teilbepreisung"
 
-#: part/views.py:2069
+#: part/views.py:2081
 msgid "Create Part Parameter Template"
 msgstr "Teilparametervorlage anlegen"
 
-#: part/views.py:2079
+#: part/views.py:2091
 msgid "Edit Part Parameter Template"
 msgstr "Teilparametervorlage bearbeiten"
 
-#: part/views.py:2086
+#: part/views.py:2098
 msgid "Delete Part Parameter Template"
 msgstr "Teilparametervorlage löschen"
 
-#: part/views.py:2094
+#: part/views.py:2106
 msgid "Create Part Parameter"
 msgstr "Teilparameter anlegen"
 
-#: part/views.py:2144
+#: part/views.py:2156
 msgid "Edit Part Parameter"
 msgstr "Teilparameter bearbeiten"
 
-#: part/views.py:2158
+#: part/views.py:2170
 msgid "Delete Part Parameter"
 msgstr "Teilparameter löschen"
 
-#: part/views.py:2218
+#: part/views.py:2230
 msgid "Edit Part Category"
 msgstr "Teil-Kategorie bearbeiten"
 
-#: part/views.py:2256
+#: part/views.py:2268
 msgid "Delete Part Category"
 msgstr "Teil-Kategorie löschen"
 
-#: part/views.py:2262
+#: part/views.py:2274
 msgid "Part category was deleted"
 msgstr "Teil-Kategorie wurde gelöscht"
 
-#: part/views.py:2314
+#: part/views.py:2326
 msgid "Create Category Parameter Template"
 msgstr "Kategorieparametervorlage anlegen"
 
-#: part/views.py:2415
+#: part/views.py:2427
 msgid "Edit Category Parameter Template"
 msgstr "Kategorieparametervorlage bearbeiten"
 
-#: part/views.py:2471
+#: part/views.py:2483
 msgid "Delete Category Parameter Template"
 msgstr "Kategorieparametervorlage löschen"
 
-#: part/views.py:2490
+#: part/views.py:2502
 msgid "Create BOM Item"
 msgstr "Stücklisten-Position anlegen"
 
-#: part/views.py:2560
+#: part/views.py:2572
 msgid "Edit BOM item"
 msgstr "Stücklisten-Position bearbeiten"
 
-#: part/views.py:2616
+#: part/views.py:2628
 msgid "Confim BOM item deletion"
 msgstr "löschen von Stücklisten-Position bestätigen"
 
@@ -5302,15 +5332,15 @@ msgid "Stock adjustment actions"
 msgstr "Bestands-Anpassungs Aktionen"
 
 #: stock/templates/stock/item_base.html:164
-#: stock/templates/stock/location.html:65 templates/stock_table.html:56
+#: stock/templates/stock/location.html:65 templates/stock_table.html:57
 msgid "Count stock"
 msgstr "Bestand zählen"
 
-#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54
+#: stock/templates/stock/item_base.html:167 templates/stock_table.html:55
 msgid "Add stock"
 msgstr "Bestand hinzufügen"
 
-#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55
+#: stock/templates/stock/item_base.html:170 templates/stock_table.html:56
 msgid "Remove stock"
 msgstr "Bestand entfernen"
 
@@ -5504,7 +5534,7 @@ msgid "Stock Details"
 msgstr "Objekt-Details"
 
 #: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279
-#: templates/stats.html:76 users/models.py:39
+#: templates/stats.html:76 users/models.py:41
 msgid "Stock Locations"
 msgstr "Bestand-Lagerorte"
 
@@ -5690,7 +5720,7 @@ msgstr "Entfernen"
 msgid "Add Stock Items"
 msgstr "BestandsObjekte hinzufügen"
 
-#: stock/views.py:1001 users/models.py:180
+#: stock/views.py:1001 users/models.py:183
 msgid "Add"
 msgstr "Hinzufügen"
 
@@ -5868,6 +5898,40 @@ msgstr "an Kunde versand"
 msgid "No stock location set"
 msgstr "Kein Lagerort gesetzt"
 
+#: templates/InvenTree/settings/appearance.html:10
+msgid "Theme Settings"
+msgstr "Anzeige-Einstellungen"
+
+#: templates/InvenTree/settings/appearance.html:17
+msgid "Color Themes"
+msgstr "Farbschemata"
+
+#: templates/InvenTree/settings/appearance.html:29
+#, fuzzy, python-format
+#| msgid ""
+#| "\n"
+#| "\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
+#| "\t\tPlease select another color theme :)\n"
+#| "\t"
+msgid ""
+"\n"
+"        The CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
+"        Please select another color theme :)\n"
+"    "
+msgstr ""
+"\n"
+"\t\tDie CSS Datei \"%(invalid_color_theme)s.css\" für das aktuell ausgewählte Farbschema wurde nicht gefunden.<br>\n"
+"\t\tBitte ein anderes Farbschema auswählen:)\n"
+"\t"
+
+#: templates/InvenTree/settings/appearance.html:39
+msgid "Language"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:61
+msgid "Set Language"
+msgstr ""
+
 #: templates/InvenTree/settings/build.html:10
 msgid "Build Order Settings"
 msgstr "Bauauftrag-Einstellungen"
@@ -5951,7 +6015,7 @@ msgstr "Auftrags-Einstellungen"
 msgid "Stock Settings"
 msgstr "Bestands-Einstellungen"
 
-#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49
+#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:50
 msgid "Stock Options"
 msgstr "Stock-Optionen"
 
@@ -5965,8 +6029,8 @@ msgid "Account"
 msgstr "Konto"
 
 #: templates/InvenTree/settings/tabs.html:9
-msgid "Theme"
-msgstr "Thema"
+msgid "Appearance"
+msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:13
 msgid "InvenTree Settings"
@@ -5984,25 +6048,6 @@ msgstr "Bericht"
 msgid "Categories"
 msgstr "Kategorien"
 
-#: templates/InvenTree/settings/theme.html:10
-msgid "Theme Settings"
-msgstr "Anzeige-Einstellungen"
-
-#: templates/InvenTree/settings/theme.html:17
-msgid "Color Themes"
-msgstr "Farbschemata"
-
-#: templates/InvenTree/settings/theme.html:29
-#, python-format
-msgid "\n"
-"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
-"\t\tPlease select another color theme :)\n"
-"\t"
-msgstr "\n"
-"\t\tDie CSS Datei \"%(invalid_color_theme)s.css\" für das aktuell ausgewählte Farbschema wurde nicht gefunden.<br>\n"
-"\t\tBitte ein anderes Farbschema auswählen:)\n"
-"\t"
-
 #: templates/InvenTree/settings/user.html:16
 msgid "User Information"
 msgstr "Benutzerinformation"
@@ -6065,13 +6110,23 @@ msgid "View Code on GitHub"
 msgstr "Code auf GitHub ansehen"
 
 #: templates/about.html:63
-msgid "Get the App"
-msgstr "App herunterladen"
+msgid "Credits"
+msgstr ""
 
 #: templates/about.html:68
+msgid "Mobile App"
+msgstr ""
+
+#: templates/about.html:73
 msgid "Submit Bug Report"
 msgstr "Fehlerbericht senden"
 
+#: templates/about.html:82 templates/js/modals.js:550
+#: templates/js/modals.js:809 templates/modals.html:28 templates/modals.html:52
+#: templates/modals.html:93
+msgid "Close"
+msgstr "Schliessen"
+
 #: templates/attachment_table.html:6
 msgid "Add Attachment"
 msgstr "Anhang hinzufügen"
@@ -6267,7 +6322,7 @@ msgid "Quantity Per"
 msgstr "Anzahl pro"
 
 #: templates/js/build.js:638 templates/js/build.js:1056
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order stock"
 msgstr "Bestand bestellen"
 
@@ -6400,11 +6455,6 @@ msgstr "Lade Daten"
 msgid "Submit"
 msgstr "Abschicken"
 
-#: templates/js/modals.js:550 templates/js/modals.js:809
-#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93
-msgid "Close"
-msgstr "Schliessen"
-
 #: templates/js/modals.js:760
 msgid "Invalid response from server"
 msgstr "ungültige Antwort vom Server"
@@ -6978,6 +7028,10 @@ msgstr "Alle"
 msgid "Form errors exist"
 msgstr "Fehler in Formular"
 
+#: templates/navbar.html:13
+msgid "Toggle navigation"
+msgstr ""
+
 #: templates/navbar.html:33
 msgid "Buy"
 msgstr "Kaufen"
@@ -6990,7 +7044,7 @@ msgstr "Verkaufen"
 msgid "Scan Barcode"
 msgstr "Barcode scannen"
 
-#: templates/navbar.html:77 users/models.py:36
+#: templates/navbar.html:77 users/models.py:38
 msgid "Admin"
 msgstr "Admin"
 
@@ -7122,43 +7176,43 @@ msgstr "Barcode Aktionen"
 msgid "Print test reports"
 msgstr "Test-Berichte drucken"
 
-#: templates/stock_table.html:54
+#: templates/stock_table.html:55
 msgid "Add to selected stock items"
 msgstr "Zu ausgewählten BestandsObjekten hinzufügen"
 
-#: templates/stock_table.html:55
+#: templates/stock_table.html:56
 msgid "Remove from selected stock items"
 msgstr "Von ausgewählten BestandsObjekten entfernen"
 
-#: templates/stock_table.html:56
+#: templates/stock_table.html:57
 msgid "Stocktake selected stock items"
 msgstr "Inventur für gewählte BestandsObjekte"
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move selected stock items"
 msgstr "Ausgewählte BestandsObjekte verschieben"
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move stock"
 msgstr "Bestand verschieben"
 
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order selected items"
 msgstr "Ausgewählte Positionen bestellen"
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change status"
 msgstr "Status ändern"
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change stock status"
 msgstr "Bestandsstatus ändern"
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete selected items"
 msgstr "Ausgewählte Positionen löschen"
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete Stock"
 msgstr "Bestand löschen"
 
@@ -7194,34 +7248,46 @@ msgstr "Berechtigungen"
 msgid "Important dates"
 msgstr "wichtige Daten"
 
-#: users/models.py:167
+#: users/models.py:170
 msgid "Permission set"
 msgstr "Berechtigung geändert"
 
-#: users/models.py:175
+#: users/models.py:178
 msgid "Group"
 msgstr "Gruppe"
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "View"
 msgstr "Ansicht"
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "Permission to view items"
 msgstr "Berechtigung Einträge anzuzeigen"
 
-#: users/models.py:180
+#: users/models.py:183
 msgid "Permission to add items"
 msgstr "Berechtigung Einträge zu erstellen"
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Change"
 msgstr "Ändern"
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Permissions to edit items"
 msgstr "Berechtigungen Einträge zu ändern"
 
-#: users/models.py:184
+#: users/models.py:187
 msgid "Permission to delete items"
 msgstr "Berechtigung Einträge zu löschen"
+
+#~ msgid "Marking this order as complete will remove these line items."
+#~ msgstr "Wenn Sie diese Bestellung als abgeschlossen markieren, werden diese Positionen entfernt."
+
+#~ msgid "Create new purchase order for {{ supplier.name }}"
+#~ msgstr "Neue Bestellung für {{ supplier.name }} anlegen"
+
+#~ msgid "Theme"
+#~ msgstr "Thema"
+
+#~ msgid "Get the App"
+#~ msgstr "App herunterladen"
diff --git a/InvenTree/locale/en/LC_MESSAGES/django.po b/InvenTree/locale/en/LC_MESSAGES/django.po
index 14192c38d6..097f4c0f8c 100644
--- a/InvenTree/locale/en/LC_MESSAGES/django.po
+++ b/InvenTree/locale/en/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-14 11:13+0000\n"
+"POT-Creation-Date: 2021-05-05 17:33+1000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -34,10 +34,10 @@ msgstr ""
 msgid "Enter date"
 msgstr ""
 
-#: InvenTree/forms.py:110 build/forms.py:99 build/forms.py:120
-#: build/forms.py:142 build/forms.py:166 build/forms.py:188 build/forms.py:223
+#: InvenTree/forms.py:110 build/forms.py:102 build/forms.py:123
+#: build/forms.py:145 build/forms.py:169 build/forms.py:185 build/forms.py:227
 #: order/forms.py:27 order/forms.py:38 order/forms.py:49 order/forms.py:60
-#: order/forms.py:71 part/forms.py:132
+#: order/forms.py:71 part/forms.py:134
 msgid "Confirm"
 msgstr ""
 
@@ -49,7 +49,7 @@ msgstr ""
 msgid "Confirm item deletion"
 msgstr ""
 
-#: InvenTree/forms.py:159 templates/registration/login.html:76
+#: InvenTree/forms.py:159 templates/registration/login.html:77
 msgid "Enter password"
 msgstr ""
 
@@ -73,40 +73,41 @@ msgstr ""
 msgid "Select Category"
 msgstr ""
 
-#: InvenTree/helpers.py:361 order/models.py:245 order/models.py:344
-#: stock/views.py:1763
-msgid "Invalid quantity provided"
-msgstr ""
-
-#: InvenTree/helpers.py:364
-msgid "Empty serial number string"
-msgstr ""
-
-#: InvenTree/helpers.py:385
+#: InvenTree/helpers.py:377
 #, python-brace-format
 msgid "Duplicate serial: {n}"
 msgstr ""
 
-#: InvenTree/helpers.py:389 InvenTree/helpers.py:392 InvenTree/helpers.py:395
+#: InvenTree/helpers.py:384 order/models.py:245 order/models.py:353
+#: stock/views.py:1763
+msgid "Invalid quantity provided"
+msgstr ""
+
+#: InvenTree/helpers.py:387
+msgid "Empty serial number string"
+msgstr ""
+
+#: InvenTree/helpers.py:409 InvenTree/helpers.py:412 InvenTree/helpers.py:415
+#: InvenTree/helpers.py:440
 #, python-brace-format
 msgid "Invalid group: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:400
+#: InvenTree/helpers.py:445
 #, python-brace-format
 msgid "Duplicate serial: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:408
+#: InvenTree/helpers.py:453
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:412
+#: InvenTree/helpers.py:457
 #, python-brace-format
 msgid "Number of unique serial number ({s}) must match quantity ({q})"
 msgstr ""
 
-#: InvenTree/models.py:59 stock/models.py:1659
+#: InvenTree/models.py:59 stock/models.py:1662
 msgid "Attachment"
 msgstr ""
 
@@ -122,9 +123,9 @@ msgstr ""
 msgid "File comment"
 msgstr ""
 
-#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1888
+#: InvenTree/models.py:68 InvenTree/models.py:69 part/models.py:1908
 #: report/templates/report/inventree_test_report_base.html:91
-#: templates/js/stock.js:964
+#: templates/js/stock.js:1041
 msgid "User"
 msgstr ""
 
@@ -133,30 +134,33 @@ msgid "upload date"
 msgstr ""
 
 #: InvenTree/models.py:107 InvenTree/models.py:108 label/models.py:101
-#: part/models.py:686 part/models.py:2029 part/templates/part/params.html:27
-#: report/models.py:179 templates/InvenTree/search.html:136
-#: templates/InvenTree/search.html:273 templates/js/part.js:109
+#: part/models.py:686 part/models.py:2049 part/templates/part/params.html:27
+#: report/models.py:179 templates/InvenTree/search.html:137
+#: templates/InvenTree/search.html:289 templates/js/part.js:110
+#: templates/js/part.js:553 templates/js/stock.js:944
 msgid "Name"
 msgstr ""
 
 #: InvenTree/models.py:114 build/models.py:134
-#: build/templates/build/detail.html:21 company/models.py:365
-#: company/templates/company/detail.html:26
-#: company/templates/company/supplier_part_base.html:70
+#: build/templates/build/detail.html:21 company/models.py:342
+#: company/models.py:494 company/templates/company/detail.html:27
+#: company/templates/company/manufacturer_part_base.html:72
+#: company/templates/company/supplier_part_base.html:71
 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108
-#: order/models.py:101 order/templates/order/purchase_order_detail.html:168
+#: order/models.py:101 order/templates/order/purchase_order_detail.html:143
 #: part/models.py:710 part/templates/part/detail.html:54
 #: part/templates/part/set_category.html:14 report/models.py:192
 #: report/models.py:505 report/models.py:544
 #: report/templates/report/inventree_build_order_base.html:118
-#: templates/InvenTree/search.html:143 templates/InvenTree/search.html:208
-#: templates/InvenTree/search.html:280
+#: templates/InvenTree/search.html:144 templates/InvenTree/search.html:224
+#: templates/InvenTree/search.html:296
 #: templates/InvenTree/settings/header.html:9 templates/js/bom.js:190
-#: templates/js/build.js:677 templates/js/build.js:944
+#: templates/js/build.js:736 templates/js/build.js:1004
 #: templates/js/company.js:56 templates/js/order.js:183
-#: templates/js/order.js:280 templates/js/part.js:168 templates/js/part.js:251
-#: templates/js/part.js:370 templates/js/part.js:566 templates/js/stock.js:554
-#: templates/js/stock.js:938
+#: templates/js/order.js:280 templates/js/part.js:169 templates/js/part.js:252
+#: templates/js/part.js:371 templates/js/part.js:565 templates/js/part.js:643
+#: templates/js/stock.js:554 templates/js/stock.js:956
+#: templates/js/stock.js:1015
 msgid "Description"
 msgstr ""
 
@@ -168,92 +172,92 @@ msgstr ""
 msgid "parent"
 msgstr ""
 
-#: InvenTree/settings.py:480
+#: InvenTree/settings.py:491
 msgid "English"
 msgstr ""
 
-#: InvenTree/settings.py:481
+#: InvenTree/settings.py:492
 msgid "French"
 msgstr ""
 
-#: InvenTree/settings.py:482
+#: InvenTree/settings.py:493
 msgid "German"
 msgstr ""
 
-#: InvenTree/settings.py:483
+#: InvenTree/settings.py:494
 msgid "Polish"
 msgstr ""
 
-#: InvenTree/settings.py:484
+#: InvenTree/settings.py:495
 msgid "Turkish"
 msgstr ""
 
-#: InvenTree/status.py:84
+#: InvenTree/status.py:93
 msgid "Background worker check failed"
 msgstr ""
 
-#: InvenTree/status.py:88
+#: InvenTree/status.py:97
 msgid "Email backend not configured"
 msgstr ""
 
-#: InvenTree/status.py:91
+#: InvenTree/status.py:100
 msgid "InvenTree system health checks failed"
 msgstr ""
 
-#: InvenTree/status_codes.py:94 InvenTree/status_codes.py:135
-#: InvenTree/status_codes.py:228
+#: InvenTree/status_codes.py:102 InvenTree/status_codes.py:143
+#: InvenTree/status_codes.py:236
 msgid "Pending"
 msgstr ""
 
-#: InvenTree/status_codes.py:95
+#: InvenTree/status_codes.py:103
 msgid "Placed"
 msgstr ""
 
-#: InvenTree/status_codes.py:96 InvenTree/status_codes.py:231
+#: InvenTree/status_codes.py:104 InvenTree/status_codes.py:239
 msgid "Complete"
 msgstr ""
 
-#: InvenTree/status_codes.py:97 InvenTree/status_codes.py:137
-#: InvenTree/status_codes.py:230
+#: InvenTree/status_codes.py:105 InvenTree/status_codes.py:145
+#: InvenTree/status_codes.py:238
 msgid "Cancelled"
 msgstr ""
 
-#: InvenTree/status_codes.py:98 InvenTree/status_codes.py:138
-#: InvenTree/status_codes.py:180
+#: InvenTree/status_codes.py:106 InvenTree/status_codes.py:146
+#: InvenTree/status_codes.py:188
 msgid "Lost"
 msgstr ""
 
-#: InvenTree/status_codes.py:99 InvenTree/status_codes.py:139
-#: InvenTree/status_codes.py:182
+#: InvenTree/status_codes.py:107 InvenTree/status_codes.py:147
+#: InvenTree/status_codes.py:190
 msgid "Returned"
 msgstr ""
 
-#: InvenTree/status_codes.py:136
+#: InvenTree/status_codes.py:144
 #: order/templates/order/sales_order_base.html:124
 msgid "Shipped"
 msgstr ""
 
-#: InvenTree/status_codes.py:176
+#: InvenTree/status_codes.py:184
 msgid "OK"
 msgstr ""
 
-#: InvenTree/status_codes.py:177
+#: InvenTree/status_codes.py:185
 msgid "Attention needed"
 msgstr ""
 
-#: InvenTree/status_codes.py:178
+#: InvenTree/status_codes.py:186
 msgid "Damaged"
 msgstr ""
 
-#: InvenTree/status_codes.py:179
+#: InvenTree/status_codes.py:187
 msgid "Destroyed"
 msgstr ""
 
-#: InvenTree/status_codes.py:181
+#: InvenTree/status_codes.py:189
 msgid "Rejected"
 msgstr ""
 
-#: InvenTree/status_codes.py:229
+#: InvenTree/status_codes.py:237
 msgid "Production"
 msgstr ""
 
@@ -312,7 +316,7 @@ msgstr ""
 msgid "Password fields must match"
 msgstr ""
 
-#: InvenTree/views.py:887 templates/navbar.html:85
+#: InvenTree/views.py:887 templates/navbar.html:95
 msgid "System Information"
 msgstr ""
 
@@ -356,138 +360,150 @@ msgstr ""
 msgid "Barcode associated with StockItem"
 msgstr ""
 
-#: build/forms.py:34
+#: build/forms.py:37
 msgid "Build Order reference"
 msgstr ""
 
-#: build/forms.py:35
+#: build/forms.py:38
 msgid "Order target date"
 msgstr ""
 
-#: build/forms.py:39 build/templates/build/build_base.html:104
+#: build/forms.py:42 build/templates/build/build_base.html:136
 #: build/templates/build/detail.html:121 order/forms.py:109 order/forms.py:144
 #: order/templates/order/order_base.html:124
 #: order/templates/order/sales_order_base.html:117
 #: report/templates/report/inventree_build_order_base.html:126
-#: templates/js/build.js:723 templates/js/order.js:200
+#: templates/js/build.js:783 templates/js/order.js:200
 #: templates/js/order.js:298
 msgid "Target Date"
 msgstr ""
 
-#: build/forms.py:40 build/models.py:224
-msgid ""
-"Target date for build completion. Build will be overdue after this date."
+#: build/forms.py:43 build/models.py:224
+msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/forms.py:45 build/forms.py:87 build/forms.py:257 build/models.py:1103
+#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1241
+#: build/templates/build/allocation_card.html:23
 #: build/templates/build/auto_allocate.html:17
-#: build/templates/build/build_base.html:91
-#: build/templates/build/detail.html:31 common/models.py:696
-#: company/forms.py:131 company/templates/company/supplier_part_pricing.html:77
+#: build/templates/build/build_base.html:123
+#: build/templates/build/detail.html:31 common/models.py:703
+#: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77
 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261
-#: order/forms.py:278 order/models.py:593 order/models.py:784
+#: order/forms.py:278 order/models.py:603 order/models.py:794
 #: order/templates/order/order_wizard/select_parts.html:32
-#: order/templates/order/purchase_order_detail.html:193
+#: order/templates/order/purchase_order_detail.html:175
 #: order/templates/order/sales_order_detail.html:70
 #: order/templates/order/sales_order_detail.html:77
 #: order/templates/order/sales_order_detail.html:159
-#: order/templates/order/sales_order_detail.html:224 part/forms.py:340
-#: part/forms.py:369 part/forms.py:385 part/models.py:2158
+#: order/templates/order/sales_order_detail.html:224 part/forms.py:342
+#: part/forms.py:371 part/forms.py:387 part/models.py:2178
 #: part/templates/part/allocation.html:19
 #: part/templates/part/allocation.html:53
-#: part/templates/part/part_pricing.html:12
-#: part/templates/part/part_pricing.html:19
+#: part/templates/part/part_pricing.html:11
+#: part/templates/part/part_pricing.html:18
 #: part/templates/part/sale_prices.html:85
 #: report/templates/report/inventree_build_order_base.html:114
 #: report/templates/report/inventree_po_report.html:91
 #: report/templates/report/inventree_so_report.html:91
 #: report/templates/report/inventree_test_report_base.html:77
-#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1563
-#: stock/templates/stock/item_base.html:51
-#: stock/templates/stock/item_base.html:57
-#: stock/templates/stock/item_base.html:240
+#: stock/forms.py:175 stock/forms.py:308 stock/models.py:1566
+#: stock/templates/stock/item_base.html:244
 #: stock/templates/stock/stock_adjust.html:18 templates/js/barcode.js:364
-#: templates/js/bom.js:205 templates/js/build.js:420 templates/js/build.js:954
-#: templates/js/stock.js:956 templates/js/stock.js:1194
+#: templates/js/bom.js:205 templates/js/build.js:476 templates/js/build.js:1014
+#: templates/js/stock.js:1033 templates/js/stock.js:1271
 msgid "Quantity"
 msgstr ""
 
-#: build/forms.py:46
+#: build/forms.py:49
 msgid "Number of items to build"
 msgstr ""
 
-#: build/forms.py:88
+#: build/forms.py:91
 msgid "Enter quantity for build output"
 msgstr ""
 
-#: build/forms.py:92 order/forms.py:233 stock/forms.py:118
+#: build/forms.py:95 order/forms.py:233 stock/forms.py:118
 msgid "Serial Numbers"
 msgstr ""
 
-#: build/forms.py:94
+#: build/forms.py:97
 msgid "Enter serial numbers for build outputs"
 msgstr ""
 
-#: build/forms.py:100
+#: build/forms.py:103
 msgid "Confirm creation of build output"
 msgstr ""
 
-#: build/forms.py:121
+#: build/forms.py:124
 msgid "Confirm deletion of build output"
 msgstr ""
 
-#: build/forms.py:142
+#: build/forms.py:145
 msgid "Confirm unallocation of stock"
 msgstr ""
 
-#: build/forms.py:166
+#: build/forms.py:169
 msgid "Confirm stock allocation"
 msgstr ""
 
-#: build/forms.py:189
+#: build/forms.py:186
 msgid "Mark build as complete"
 msgstr ""
 
-#: build/forms.py:213 build/templates/build/auto_allocate.html:18
+#: build/forms.py:210 build/templates/build/auto_allocate.html:18
 #: order/forms.py:82 stock/forms.py:347
-#: stock/templates/stock/item_base.html:270
+#: stock/templates/stock/item_base.html:274
 #: stock/templates/stock/stock_adjust.html:17
-#: templates/InvenTree/search.html:244 templates/js/barcode.js:363
-#: templates/js/barcode.js:531 templates/js/build.js:434
+#: templates/InvenTree/search.html:260 templates/js/barcode.js:363
+#: templates/js/barcode.js:531 templates/js/build.js:490
 #: templates/js/stock.js:641
 msgid "Location"
 msgstr ""
 
-#: build/forms.py:214
+#: build/forms.py:211
 msgid "Location of completed parts"
 msgstr ""
 
-#: build/forms.py:219
-msgid "Confirm incomplete"
+#: build/forms.py:215 build/templates/build/build_base.html:128
+#: build/templates/build/detail.html:59 order/models.py:455
+#: order/templates/order/receive_parts.html:24
+#: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252
+#: templates/js/barcode.js:119 templates/js/build.js:770
+#: templates/js/order.js:187 templates/js/order.js:285
+#: templates/js/stock.js:628 templates/js/stock.js:1279
+msgid "Status"
 msgstr ""
 
-#: build/forms.py:220
-msgid "Confirm completion with incomplete stock allocation"
+#: build/forms.py:216
+msgid "Build output stock status"
 msgstr ""
 
 #: build/forms.py:223
+msgid "Confirm incomplete"
+msgstr ""
+
+#: build/forms.py:224
+msgid "Confirm completion with incomplete stock allocation"
+msgstr ""
+
+#: build/forms.py:227
 msgid "Confirm build completion"
 msgstr ""
 
-#: build/forms.py:243
+#: build/forms.py:252
 msgid "Confirm cancel"
 msgstr ""
 
-#: build/forms.py:243 build/views.py:66
+#: build/forms.py:252 build/views.py:66
 msgid "Confirm build cancellation"
 msgstr ""
 
-#: build/forms.py:257
+#: build/forms.py:266
 msgid "Select quantity of stock to allocate"
 msgstr ""
 
-#: build/models.py:65 build/templates/build/build_base.html:8
-#: build/templates/build/build_base.html:35
+#: build/models.py:65 build/templates/build/build_base.html:9
+#: build/templates/build/build_base.html:63
 #: part/templates/part/allocation.html:23
 #: report/templates/report/inventree_build_order_base.html:106
 msgid "Build Order"
@@ -497,9 +513,9 @@ msgstr ""
 #: build/templates/build/index.html:15 order/templates/order/so_builds.html:12
 #: order/templates/order/so_navbar.html:19
 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
-#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:182
-#: templates/InvenTree/search.html:169
-#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
+#: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183
+#: templates/InvenTree/search.html:185
+#: templates/InvenTree/settings/tabs.html:31 users/models.py:43
 msgid "Build Orders"
 msgstr ""
 
@@ -507,12 +523,12 @@ msgstr ""
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:127 order/models.py:99 order/models.py:595
-#: order/templates/order/purchase_order_detail.html:188
-#: order/templates/order/sales_order_detail.html:219 part/models.py:2167
+#: build/models.py:127 order/models.py:99 order/models.py:605
+#: order/templates/order/purchase_order_detail.html:170
+#: order/templates/order/sales_order_detail.html:219 part/models.py:2187
 #: report/templates/report/inventree_po_report.html:92
 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
-#: templates/js/build.js:509 templates/js/build.js:948
+#: templates/js/build.js:565 templates/js/build.js:1008
 msgid "Reference"
 msgstr ""
 
@@ -520,7 +536,7 @@ msgstr ""
 msgid "Brief description of the build"
 msgstr ""
 
-#: build/models.py:146 build/templates/build/build_base.html:121
+#: build/models.py:146 build/templates/build/build_base.html:153
 #: build/templates/build/detail.html:77
 msgid "Parent Build"
 msgstr ""
@@ -530,28 +546,27 @@ msgid "BuildOrder to which this build is allocated"
 msgstr ""
 
 #: build/models.py:152 build/templates/build/auto_allocate.html:16
-#: build/templates/build/build_base.html:86
-#: build/templates/build/detail.html:26 company/models.py:539
-#: order/models.py:637 order/models.py:669
+#: build/templates/build/build_base.html:118
+#: build/templates/build/detail.html:26 company/models.py:688
+#: order/models.py:647 order/models.py:679
 #: order/templates/order/order_wizard/select_parts.html:30
-#: order/templates/order/purchase_order_detail.html:156
+#: order/templates/order/purchase_order_detail.html:131
 #: order/templates/order/receive_parts.html:19
 #: order/templates/order/sales_order_detail.html:207 part/models.py:321
-#: part/models.py:1856 part/models.py:1868 part/models.py:1886
-#: part/models.py:1961 part/models.py:2057 part/models.py:2142
-#: part/templates/part/part_app_base.html:7
-#: part/templates/part/part_pricing.html:15 part/templates/part/related.html:29
+#: part/models.py:1876 part/models.py:1888 part/models.py:1906
+#: part/models.py:1981 part/models.py:2077 part/models.py:2162
+#: part/templates/part/part_app_base.html:8
+#: part/templates/part/part_pricing.html:14 part/templates/part/related.html:29
 #: part/templates/part/set_category.html:13
-#: part/templates/part/subcategories.html:17
 #: report/templates/report/inventree_build_order_base.html:110
 #: report/templates/report/inventree_po_report.html:90
 #: report/templates/report/inventree_so_report.html:90
-#: templates/InvenTree/search.html:111 templates/InvenTree/search.html:194
+#: templates/InvenTree/search.html:112 templates/InvenTree/search.html:210
 #: templates/js/barcode.js:362 templates/js/bom.js:163
-#: templates/js/build.js:681 templates/js/build.js:921
-#: templates/js/company.js:138 templates/js/part.js:232
-#: templates/js/part.js:337 templates/js/stock.js:523
-#: templates/js/stock.js:1266
+#: templates/js/build.js:741 templates/js/build.js:981
+#: templates/js/company.js:140 templates/js/company.js:238
+#: templates/js/part.js:233 templates/js/part.js:338 templates/js/stock.js:523
+#: templates/js/stock.js:1343
 msgid "Part"
 msgstr ""
 
@@ -572,9 +587,7 @@ msgid "Source Location"
 msgstr ""
 
 #: build/models.py:178
-msgid ""
-"Select location to take stock from for this build (leave blank to take from "
-"any stock location)"
+msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
 #: build/models.py:183
@@ -601,7 +614,7 @@ msgstr ""
 msgid "Number of stock items which have been completed"
 msgstr ""
 
-#: build/models.py:204 part/templates/part/part_base.html:159
+#: build/models.py:204 part/templates/part/part_base.html:160
 msgid "Build Status"
 msgstr ""
 
@@ -609,7 +622,7 @@ msgstr ""
 msgid "Build status code"
 msgstr ""
 
-#: build/models.py:212 stock/models.py:430
+#: build/models.py:212 stock/models.py:432
 msgid "Batch Code"
 msgstr ""
 
@@ -622,11 +635,11 @@ msgstr ""
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:223 order/models.py:451
+#: build/models.py:223 order/models.py:461
 msgid "Target completion date"
 msgstr ""
 
-#: build/models.py:227 order/models.py:218
+#: build/models.py:227 order/models.py:218 templates/js/build.js:788
 msgid "Completion Date"
 msgstr ""
 
@@ -642,7 +655,7 @@ msgstr ""
 msgid "User who issued this build order"
 msgstr ""
 
-#: build/models.py:250 build/templates/build/build_base.html:142
+#: build/models.py:250 build/templates/build/build_base.html:174
 #: build/templates/build/detail.html:105 order/models.py:119
 #: order/templates/order/order_base.html:138
 #: order/templates/order/sales_order_base.html:138 part/models.py:886
@@ -655,33 +668,35 @@ msgid "User responsible for this build order"
 msgstr ""
 
 #: build/models.py:256 build/templates/build/detail.html:91
-#: company/templates/company/supplier_part_base.html:77
+#: company/templates/company/manufacturer_part_base.html:79
+#: company/templates/company/manufacturer_part_detail.html:28
+#: company/templates/company/supplier_part_base.html:78
 #: company/templates/company/supplier_part_detail.html:28
-#: part/templates/part/detail.html:83 part/templates/part/part_base.html:100
-#: stock/models.py:424 stock/templates/stock/item_base.html:330
+#: part/templates/part/detail.html:83 part/templates/part/part_base.html:101
+#: stock/models.py:426 stock/templates/stock/item_base.html:334
 msgid "External Link"
 msgstr ""
 
-#: build/models.py:257 part/models.py:744 stock/models.py:426
+#: build/models.py:257 part/models.py:744 stock/models.py:428
 msgid "Link to external URL"
 msgstr ""
 
-#: build/models.py:261 build/templates/build/navbar.html:59
-#: company/models.py:133 company/models.py:372
-#: company/templates/company/navbar.html:59
-#: company/templates/company/navbar.html:62 order/models.py:123
-#: order/models.py:597 order/templates/order/po_navbar.html:29
+#: build/models.py:261 build/templates/build/navbar.html:53
+#: company/models.py:135 company/models.py:501
+#: company/templates/company/navbar.html:70
+#: company/templates/company/navbar.html:73 order/models.py:123
+#: order/models.py:607 order/templates/order/po_navbar.html:29
 #: order/templates/order/po_navbar.html:32
-#: order/templates/order/purchase_order_detail.html:227
+#: order/templates/order/purchase_order_detail.html:209
 #: order/templates/order/sales_order_detail.html:264
 #: order/templates/order/so_navbar.html:33
 #: order/templates/order/so_navbar.html:36 part/models.py:871
-#: part/templates/part/navbar.html:122
+#: part/templates/part/navbar.html:128
 #: report/templates/report/inventree_build_order_base.html:173
 #: stock/forms.py:173 stock/forms.py:317 stock/forms.py:349 stock/forms.py:377
-#: stock/models.py:496 stock/models.py:1555 stock/models.py:1665
+#: stock/models.py:498 stock/models.py:1558 stock/models.py:1668
 #: stock/templates/stock/navbar.html:57 templates/js/barcode.js:37
-#: templates/js/bom.js:329 templates/js/stock.js:128 templates/js/stock.js:671
+#: templates/js/bom.js:333 templates/js/stock.js:128 templates/js/stock.js:671
 msgid "Notes"
 msgstr ""
 
@@ -689,141 +704,152 @@ msgstr ""
 msgid "Extra build notes"
 msgstr ""
 
-#: build/models.py:673
+#: build/models.py:739
 msgid "No build output specified"
 msgstr ""
 
-#: build/models.py:676
+#: build/models.py:742
 msgid "Build output is already completed"
 msgstr ""
 
-#: build/models.py:679
+#: build/models.py:745
 msgid "Build output does not match Build Order"
 msgstr ""
 
-#: build/models.py:754
+#: build/models.py:838
 msgid "Completed build output"
 msgstr ""
 
-#: build/models.py:996
+#: build/models.py:1132
 msgid "BuildItem must be unique for build, stock_item and install_into"
 msgstr ""
 
-#: build/models.py:1018
-msgid "Build item must specify a build output"
+#: build/models.py:1157
+msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1023
+#: build/models.py:1161
 #, python-brace-format
 msgid "Selected stock item not found in BOM for part '{p}'"
 msgstr ""
 
-#: build/models.py:1027
+#: build/models.py:1165
 #, python-brace-format
 msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
 msgstr ""
 
-#: build/models.py:1034 order/models.py:758
+#: build/models.py:1172 order/models.py:768
 msgid "StockItem is over-allocated"
 msgstr ""
 
-#: build/models.py:1038 order/models.py:761
+#: build/models.py:1176 order/models.py:771
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1042
+#: build/models.py:1180
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1082 stock/templates/stock/item_base.html:302
-#: templates/InvenTree/search.html:167 templates/js/build.js:655
+#: build/models.py:1220 stock/templates/stock/item_base.html:306
+#: templates/InvenTree/search.html:183 templates/js/build.js:714
 #: templates/navbar.html:29
 msgid "Build"
 msgstr ""
 
-#: build/models.py:1083
+#: build/models.py:1221
 msgid "Build to allocate parts"
 msgstr ""
 
-#: build/models.py:1090 part/templates/part/allocation.html:18
+#: build/models.py:1228 part/templates/part/allocation.html:18
 #: part/templates/part/allocation.html:24
 #: part/templates/part/allocation.html:31
 #: part/templates/part/allocation.html:49
 #: stock/templates/stock/item_base.html:8
-#: stock/templates/stock/item_base.html:89
-#: stock/templates/stock/item_base.html:324
-#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:771
-#: templates/js/stock.js:927 templates/js/stock.js:1185
+#: stock/templates/stock/item_base.html:93
+#: stock/templates/stock/item_base.html:328
+#: stock/templates/stock/stock_adjust.html:16 templates/js/build.js:831
+#: templates/js/stock.js:1004 templates/js/stock.js:1262
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1091
+#: build/models.py:1229
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1104
+#: build/models.py:1242
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1112
+#: build/models.py:1250
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1113
+#: build/models.py:1251
 msgid "Destination stock item"
 msgstr ""
 
+#: build/templates/build/allocate.html:7
+msgid "Allocate Parts"
+msgstr ""
+
 #: build/templates/build/allocate.html:15
-msgid "Incomplete Build Ouputs"
+msgid "Allocate Stock to Build"
 msgstr ""
 
-#: build/templates/build/allocate.html:21
-msgid "Build order has been completed"
+#: build/templates/build/allocate.html:22
+msgid "Allocate stock to build"
 msgstr ""
 
-#: build/templates/build/allocate.html:26
-msgid "Create new build output"
+#: build/templates/build/allocate.html:23
+msgid "Auto Allocate"
 msgstr ""
 
-#: build/templates/build/allocate.html:27
-msgid "Create New Output"
+#: build/templates/build/allocate.html:25 templates/js/build.js:646
+msgid "Unallocate stock"
 msgstr ""
 
-#: build/templates/build/allocate.html:30
+#: build/templates/build/allocate.html:26 build/views.py:319 build/views.py:805
+msgid "Unallocate Stock"
+msgstr ""
+
+#: build/templates/build/allocate.html:29
 msgid "Order required parts"
 msgstr ""
 
-#: build/templates/build/allocate.html:31
-#: company/templates/company/detail_part.html:31 order/views.py:794
+#: build/templates/build/allocate.html:30
+#: company/templates/company/detail_manufacturer_part.html:33
+#: company/templates/company/detail_supplier_part.html:32 order/views.py:795
 #: part/templates/part/category.html:127
 msgid "Order Parts"
 msgstr ""
 
-#: build/templates/build/allocate.html:34 templates/js/build.js:590
-msgid "Unallocate stock"
+#: build/templates/build/allocate.html:36
+msgid "Untracked stock has been fully allocated for this Build Order"
 msgstr ""
 
-#: build/templates/build/allocate.html:35 build/views.py:338 build/views.py:784
-msgid "Unallocate Stock"
+#: build/templates/build/allocate.html:40
+msgid "Untracked stock has not been fully allocated for this Build Order"
 msgstr ""
 
-#: build/templates/build/allocate.html:49
-msgid "Create a new build output"
+#: build/templates/build/allocate.html:47
+msgid "This Build Order does not have any associated untracked BOM items"
 msgstr ""
 
-#: build/templates/build/allocate.html:50
-msgid "No incomplete build outputs remain."
-msgstr ""
-
-#: build/templates/build/allocate.html:51
-msgid "Create a new build output using the button above"
+#: build/templates/build/allocation_card.html:21
+#: build/templates/build/complete_output.html:46
+#: order/templates/order/sales_order_detail.html:75
+#: order/templates/order/sales_order_detail.html:157
+#: report/templates/report/inventree_test_report_base.html:75
+#: stock/models.py:420 stock/templates/stock/item_base.html:238
+#: templates/js/build.js:474
+msgid "Serial Number"
 msgstr ""
 
 #: build/templates/build/attachments.html:12
-#: build/templates/build/navbar.html:49 build/templates/build/navbar.html:52
+#: build/templates/build/navbar.html:43 build/templates/build/navbar.html:46
 #: order/templates/order/po_navbar.html:26
-#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:113
-#: part/templates/part/navbar.html:116 stock/templates/stock/navbar.html:47
+#: order/templates/order/so_navbar.html:29 part/templates/part/navbar.html:119
+#: part/templates/part/navbar.html:122 stock/templates/stock/navbar.html:47
 #: stock/templates/stock/navbar.html:50
 msgid "Attachments"
 msgstr ""
@@ -833,8 +859,7 @@ msgid "Automatically Allocate Stock"
 msgstr ""
 
 #: build/templates/build/auto_allocate.html:10
-msgid ""
-"The following stock items will be allocated to the specified build output"
+msgid "The following stock items will be allocated to the specified build output"
 msgstr ""
 
 #: build/templates/build/auto_allocate.html:37
@@ -845,112 +870,153 @@ msgstr ""
 msgid "Stock items will have to be manually allocated"
 msgstr ""
 
-#: build/templates/build/build_base.html:14
-msgid "This Build Order is allocated to Sales Order"
+#: build/templates/build/build_base.html:16
+#, python-format
+msgid "This Build Order is allocated to Sales Order %(link)s"
 msgstr ""
 
-#: build/templates/build/build_base.html:19
-msgid "This Build Order is a child of Build Order"
+#: build/templates/build/build_base.html:22
+#, python-format
+msgid "This Build Order is a child of Build Order %(link)s"
 msgstr ""
 
-#: build/templates/build/build_base.html:37
+#: build/templates/build/build_base.html:31
+msgid "Build Order is ready to mark as completed"
+msgstr ""
+
+#: build/templates/build/build_base.html:36
+msgid "Build Order cannot be completed as outstanding outputs remain"
+msgstr ""
+
+#: build/templates/build/build_base.html:41
+msgid "Required build quantity has not yet been completed"
+msgstr ""
+
+#: build/templates/build/build_base.html:46
+msgid "Stock has not been fully allocated to this Build Order"
+msgstr ""
+
+#: build/templates/build/build_base.html:65
 #: company/templates/company/company_base.html:40
-#: company/templates/company/supplier_part_base.html:25
+#: company/templates/company/manufacturer_part_base.html:25
+#: company/templates/company/supplier_part_base.html:26
 #: order/templates/order/order_base.html:26
 #: order/templates/order/sales_order_base.html:35
-#: part/templates/part/category.html:14 part/templates/part/part_base.html:28
-#: stock/templates/stock/item_base.html:114
-#: stock/templates/stock/location.html:24
+#: part/templates/part/category.html:18 part/templates/part/part_base.html:29
+#: stock/templates/stock/item_base.html:118
+#: stock/templates/stock/location.html:31
 msgid "Admin view"
 msgstr ""
 
-#: build/templates/build/build_base.html:43
-#: build/templates/build/build_base.html:108
+#: build/templates/build/build_base.html:71
+#: build/templates/build/build_base.html:140
 #: order/templates/order/order_base.html:32
 #: order/templates/order/order_base.html:86
 #: order/templates/order/sales_order_base.html:41
 #: order/templates/order/sales_order_base.html:86
-#: templates/js/table_filters.js:218 templates/js/table_filters.js:237
-#: templates/js/table_filters.js:254
+#: templates/js/table_filters.js:240 templates/js/table_filters.js:259
+#: templates/js/table_filters.js:276
 msgid "Overdue"
 msgstr ""
 
-#: build/templates/build/build_base.html:52
+#: build/templates/build/build_base.html:80
 msgid "Print actions"
 msgstr ""
 
-#: build/templates/build/build_base.html:56
+#: build/templates/build/build_base.html:84
 msgid "Print Build Order"
 msgstr ""
 
-#: build/templates/build/build_base.html:62
-msgid "Build actions"
-msgstr ""
-
-#: build/templates/build/build_base.html:66
-msgid "Edit Build"
-msgstr ""
-
-#: build/templates/build/build_base.html:68
-#: build/templates/build/build_base.html:176
+#: build/templates/build/build_base.html:90
+#: build/templates/build/build_base.html:215
 msgid "Complete Build"
 msgstr ""
 
-#: build/templates/build/build_base.html:69
-#: build/templates/build/build_base.html:167 build/views.py:57
+#: build/templates/build/build_base.html:95
+msgid "Build actions"
+msgstr ""
+
+#: build/templates/build/build_base.html:99
+msgid "Edit Build"
+msgstr ""
+
+#: build/templates/build/build_base.html:101
+#: build/templates/build/build_base.html:199 build/views.py:57
 msgid "Cancel Build"
 msgstr ""
 
-#: build/templates/build/build_base.html:82
+#: build/templates/build/build_base.html:114
 #: build/templates/build/detail.html:11
 msgid "Build Details"
 msgstr ""
 
-#: build/templates/build/build_base.html:96
-#: build/templates/build/detail.html:59 order/models.py:445
-#: order/templates/order/receive_parts.html:24
-#: stock/templates/stock/item_base.html:376 templates/InvenTree/search.html:236
-#: templates/js/barcode.js:119 templates/js/build.js:710
-#: templates/js/order.js:187 templates/js/order.js:285
-#: templates/js/stock.js:628 templates/js/stock.js:1202
-msgid "Status"
+#: build/templates/build/build_base.html:140
+#, python-format
+msgid "This build was due on %(target)s"
 msgstr ""
 
-#: build/templates/build/build_base.html:108
-msgid "This build was due on"
-msgstr ""
-
-#: build/templates/build/build_base.html:115
+#: build/templates/build/build_base.html:147
 #: build/templates/build/detail.html:64
 msgid "Progress"
 msgstr ""
 
-#: build/templates/build/build_base.html:128
-#: build/templates/build/detail.html:84 order/models.py:667
+#: build/templates/build/build_base.html:160
+#: build/templates/build/detail.html:84 order/models.py:677
 #: order/templates/order/sales_order_base.html:9
 #: order/templates/order/sales_order_base.html:33
 #: order/templates/order/sales_order_ship.html:25
 #: part/templates/part/allocation.html:30
 #: report/templates/report/inventree_build_order_base.html:136
 #: report/templates/report/inventree_so_report.html:77
-#: stock/templates/stock/item_base.html:264 templates/js/order.js:245
+#: stock/templates/stock/item_base.html:268 templates/js/order.js:245
 msgid "Sales Order"
 msgstr ""
 
-#: build/templates/build/build_base.html:135
+#: build/templates/build/build_base.html:167
 #: build/templates/build/detail.html:98
 #: report/templates/report/inventree_build_order_base.html:153
 msgid "Issued By"
 msgstr ""
 
+#: build/templates/build/build_base.html:207
+msgid "Incomplete Outputs"
+msgstr ""
+
+#: build/templates/build/build_base.html:208
+msgid "Build Order cannot be completed as incomplete build outputs remain"
+msgstr ""
+
 #: build/templates/build/build_children.html:10
-#: build/templates/build/navbar.html:42
+#: build/templates/build/navbar.html:36
 msgid "Child Build Orders"
 msgstr ""
 
-#: build/templates/build/build_output.html:10
-#: build/templates/build/navbar.html:35 build/templates/build/navbar.html:38
-msgid "Build Outputs"
+#: build/templates/build/build_output.html:15
+msgid "Incomplete Build Outputs"
+msgstr ""
+
+#: build/templates/build/build_output.html:22
+msgid "Create new build output"
+msgstr ""
+
+#: build/templates/build/build_output.html:23
+msgid "Create New Output"
+msgstr ""
+
+#: build/templates/build/build_output.html:36
+msgid "Create a new build output"
+msgstr ""
+
+#: build/templates/build/build_output.html:37
+msgid "No incomplete build outputs remain."
+msgstr ""
+
+#: build/templates/build/build_output.html:38
+msgid "Create a new build output using the button above"
+msgstr ""
+
+#: build/templates/build/build_output.html:49
+msgid "Completed Build Outputs"
 msgstr ""
 
 #: build/templates/build/build_output_create.html:7
@@ -978,11 +1044,11 @@ msgid "Are you sure you wish to cancel this build?"
 msgstr ""
 
 #: build/templates/build/complete.html:8
-msgid "Build can be completed"
+msgid "Build Order is complete"
 msgstr ""
 
 #: build/templates/build/complete.html:12
-msgid "Build cannot be completed"
+msgid "Build Order is incomplete"
 msgstr ""
 
 #: build/templates/build/complete.html:15
@@ -993,19 +1059,23 @@ msgstr ""
 msgid "Required build quantity has not been completed"
 msgstr ""
 
-#: build/templates/build/complete_output.html:9
-msgid "Stock allocation is complete"
+#: build/templates/build/complete.html:21
+msgid "Required stock has not been fully allocated"
 msgstr ""
 
-#: build/templates/build/complete_output.html:13
+#: build/templates/build/complete_output.html:10
+msgid "Stock allocation is complete for this output"
+msgstr ""
+
+#: build/templates/build/complete_output.html:14
 msgid "Stock allocation is incomplete"
 msgstr ""
 
-#: build/templates/build/complete_output.html:19
-msgid "parts have not been fully allocated"
+#: build/templates/build/complete_output.html:20
+msgid "tracked parts have not been fully allocated"
 msgstr ""
 
-#: build/templates/build/complete_output.html:40
+#: build/templates/build/complete_output.html:41
 msgid "The following items will be created"
 msgstr ""
 
@@ -1014,11 +1084,13 @@ msgid "Select a stock item to allocate to the selected build output"
 msgstr ""
 
 #: build/templates/build/create_build_item.html:11
-msgid "The allocated stock will be installed into the following build output:"
+#, python-format
+msgid "The allocated stock will be installed into the following build output:<br><i>%(output)s</i>"
 msgstr ""
 
-#: build/templates/build/create_build_item.html:19
-msgid "No stock available for"
+#: build/templates/build/create_build_item.html:17
+#, python-format
+msgid "No stock available for %(part)s"
 msgstr ""
 
 #: build/templates/build/delete_build_item.html:8
@@ -1046,15 +1118,15 @@ msgid "Destination location not specified"
 msgstr ""
 
 #: build/templates/build/detail.html:70
-#: stock/templates/stock/item_base.html:288 templates/js/stock.js:636
-#: templates/js/stock.js:1209 templates/js/table_filters.js:85
-#: templates/js/table_filters.js:179
+#: stock/templates/stock/item_base.html:292 templates/js/stock.js:636
+#: templates/js/stock.js:1286 templates/js/table_filters.js:107
+#: templates/js/table_filters.js:201
 msgid "Batch"
 msgstr ""
 
 #: build/templates/build/detail.html:116
 #: order/templates/order/order_base.html:111
-#: order/templates/order/sales_order_base.html:111 templates/js/build.js:718
+#: order/templates/order/sales_order_base.html:111 templates/js/build.js:778
 msgid "Created"
 msgstr ""
 
@@ -1062,8 +1134,7 @@ msgstr ""
 msgid "No target date set"
 msgstr ""
 
-#: build/templates/build/detail.html:132 templates/js/build.js:696
-#: templates/js/build.js:728
+#: build/templates/build/detail.html:132 templates/js/build.js:756
 msgid "Completed"
 msgstr ""
 
@@ -1075,7 +1146,7 @@ msgstr ""
 msgid "Alter the quantity of stock allocated to the build output"
 msgstr ""
 
-#: build/templates/build/index.html:28 build/views.py:657
+#: build/templates/build/index.html:28 build/views.py:678
 msgid "New Build Order"
 msgstr ""
 
@@ -1106,20 +1177,20 @@ msgstr ""
 msgid "Details"
 msgstr ""
 
-#: build/templates/build/navbar.html:20 build/templates/build/navbar.html:23
-#: build/templates/build/parts.html:11
-msgid "Required Parts"
+#: build/templates/build/navbar.html:21 build/templates/build/navbar.html:24
+#: build/views.py:91
+msgid "Allocate Stock"
 msgstr ""
 
-#: build/templates/build/navbar.html:27 build/templates/build/navbar.html:30
-msgid "In Progress"
+#: build/templates/build/navbar.html:29 build/templates/build/navbar.html:32
+msgid "Build Outputs"
 msgstr ""
 
-#: build/templates/build/navbar.html:45
+#: build/templates/build/navbar.html:39
 msgid "Child Builds"
 msgstr ""
 
-#: build/templates/build/navbar.html:56
+#: build/templates/build/navbar.html:50
 msgid "Build Order Notes"
 msgstr ""
 
@@ -1137,7 +1208,7 @@ msgstr ""
 #: build/templates/build/notes.html:26 company/templates/company/notes.html:24
 #: order/templates/order/order_notes.html:27
 #: order/templates/order/sales_order_notes.html:29
-#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:454
+#: part/templates/part/notes.html:27 stock/templates/stock/item_base.html:470
 #: stock/templates/stock/item_notes.html:26
 msgid "Save"
 msgstr ""
@@ -1154,149 +1225,153 @@ msgstr ""
 msgid "Build was cancelled"
 msgstr ""
 
-#: build/views.py:91
-msgid "Allocate Stock"
-msgstr ""
-
-#: build/views.py:154 build/views.py:314 build/views.py:485
-msgid "Build output must be specified"
-msgstr ""
-
-#: build/views.py:168
+#: build/views.py:138
 msgid "Allocated stock to build output"
 msgstr ""
 
-#: build/views.py:180
+#: build/views.py:150
 msgid "Create Build Output"
 msgstr ""
 
-#: build/views.py:203 stock/models.py:966 stock/views.py:1789
+#: build/views.py:168
+msgid "Maximum output quantity is "
+msgstr ""
+
+#: build/views.py:184 stock/models.py:969 stock/views.py:1789
 msgid "Serial numbers already exist"
 msgstr ""
 
-#: build/views.py:212
+#: build/views.py:193
 msgid "Serial numbers required for trackable build output"
 msgstr ""
 
-#: build/views.py:278
+#: build/views.py:259
 msgid "Delete Build Output"
 msgstr ""
 
-#: build/views.py:299 build/views.py:383
+#: build/views.py:280 build/views.py:370
 msgid "Confirm unallocation of build stock"
 msgstr ""
 
-#: build/views.py:300 build/views.py:384 stock/views.py:425
+#: build/views.py:281 build/views.py:371 stock/views.py:425
 msgid "Check the confirmation box"
 msgstr ""
 
-#: build/views.py:312
+#: build/views.py:293
 msgid "Build output does not match build"
 msgstr ""
 
-#: build/views.py:326
+#: build/views.py:295 build/views.py:496
+msgid "Build output must be specified"
+msgstr ""
+
+#: build/views.py:307
 msgid "Build output deleted"
 msgstr ""
 
-#: build/views.py:408
+#: build/views.py:405
 msgid "Complete Build Order"
 msgstr ""
 
-#: build/views.py:414
-msgid "Build order cannot be completed"
+#: build/views.py:411
+msgid "Build order cannot be completed - incomplete outputs remain"
 msgstr ""
 
-#: build/views.py:425
+#: build/views.py:422
 msgid "Completed build order"
 msgstr ""
 
-#: build/views.py:441
+#: build/views.py:438
 msgid "Complete Build Output"
 msgstr ""
 
-#: build/views.py:476
+#: build/views.py:480
+msgid "Invalid stock status value selected"
+msgstr ""
+
+#: build/views.py:487
 msgid "Quantity to complete cannot exceed build output quantity"
 msgstr ""
 
-#: build/views.py:482
+#: build/views.py:493
 msgid "Confirm completion of incomplete build"
 msgstr ""
 
-#: build/views.py:573
+#: build/views.py:592
 msgid "Build output completed"
 msgstr ""
 
-#: build/views.py:711
+#: build/views.py:732
 msgid "Created new build"
 msgstr ""
 
-#: build/views.py:732
+#: build/views.py:753
 msgid "Edit Build Order Details"
 msgstr ""
 
-#: build/views.py:765
+#: build/views.py:786
 msgid "Edited build"
 msgstr ""
 
-#: build/views.py:774
+#: build/views.py:795
 msgid "Delete Build Order"
 msgstr ""
 
-#: build/views.py:789
+#: build/views.py:810
 msgid "Removed parts from build allocation"
 msgstr ""
 
-#: build/views.py:801
+#: build/views.py:822
 msgid "Allocate stock to build output"
 msgstr ""
 
-#: build/views.py:844
+#: build/views.py:865
 msgid "Item must be currently in stock"
 msgstr ""
 
-#: build/views.py:850
+#: build/views.py:871
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/views.py:851 templates/js/bom.js:230 templates/js/build.js:519
-#: templates/js/build.js:778 templates/js/build.js:961
+#: build/views.py:872 templates/js/bom.js:230 templates/js/build.js:575
+#: templates/js/build.js:838 templates/js/build.js:1021
 msgid "Available"
 msgstr ""
 
-#: build/views.py:853
+#: build/views.py:874
 msgid "Stock item must be selected"
 msgstr ""
 
-#: build/views.py:1016
+#: build/views.py:1037
 msgid "Edit Stock Allocation"
 msgstr ""
 
-#: build/views.py:1020
+#: build/views.py:1041
 msgid "Updated Build Item"
 msgstr ""
 
-#: build/views.py:1049
+#: build/views.py:1070
 msgid "Add Build Order Attachment"
 msgstr ""
 
-#: build/views.py:1062 order/views.py:110 order/views.py:162 part/views.py:172
+#: build/views.py:1083 order/views.py:110 order/views.py:162 part/views.py:172
 #: stock/views.py:277
 msgid "Added attachment"
 msgstr ""
 
-#: build/views.py:1098 order/views.py:189 order/views.py:210
+#: build/views.py:1119 order/views.py:189 order/views.py:210
 msgid "Edit Attachment"
 msgstr ""
 
-#: build/views.py:1108 order/views.py:193 order/views.py:214
+#: build/views.py:1129 order/views.py:193 order/views.py:214
 msgid "Attachment updated"
 msgstr ""
 
-#: build/views.py:1118 order/views.py:229 order/views.py:243
+#: build/views.py:1139 order/views.py:229 order/views.py:243
 msgid "Delete Attachment"
 msgstr ""
 
-#: build/views.py:1123 order/views.py:235 order/views.py:249 stock/views.py:333
+#: build/views.py:1144 order/views.py:235 order/views.py:249 stock/views.py:333
 msgid "Deleted attachment"
 msgstr ""
 
@@ -1308,335 +1383,343 @@ msgstr ""
 msgid "String descriptor for the server instance"
 msgstr ""
 
-#: common/models.py:62 company/models.py:95 company/models.py:96
-msgid "Company name"
+#: common/models.py:62
+msgid "Use instance name"
 msgstr ""
 
 #: common/models.py:63
+msgid "Use the instance name in the title-bar"
+msgstr ""
+
+#: common/models.py:69 company/models.py:97 company/models.py:98
+msgid "Company name"
+msgstr ""
+
+#: common/models.py:70
 msgid "Internal company name"
 msgstr ""
 
-#: common/models.py:68
+#: common/models.py:75
 msgid "Base URL"
 msgstr ""
 
-#: common/models.py:69
+#: common/models.py:76
 msgid "Base URL for server instance"
 msgstr ""
 
-#: common/models.py:75
+#: common/models.py:82
 msgid "Default Currency"
 msgstr ""
 
-#: common/models.py:76
+#: common/models.py:83
 msgid "Default currency"
 msgstr ""
 
-#: common/models.py:82
+#: common/models.py:89
 msgid "Download from URL"
 msgstr ""
 
-#: common/models.py:83
+#: common/models.py:90
 msgid "Allow download of remote images and files from external URL"
 msgstr ""
 
-#: common/models.py:89
+#: common/models.py:96
 msgid "Barcode Support"
 msgstr ""
 
-#: common/models.py:90
+#: common/models.py:97
 msgid "Enable barcode scanner support"
 msgstr ""
 
-#: common/models.py:96
+#: common/models.py:103
 msgid "IPN Regex"
 msgstr ""
 
-#: common/models.py:97
+#: common/models.py:104
 msgid "Regular expression pattern for matching Part IPN"
 msgstr ""
 
-#: common/models.py:101
+#: common/models.py:108
 msgid "Allow Duplicate IPN"
 msgstr ""
 
-#: common/models.py:102
+#: common/models.py:109
 msgid "Allow multiple parts to share the same IPN"
 msgstr ""
 
-#: common/models.py:108
+#: common/models.py:115
 msgid "Allow Editing IPN"
 msgstr ""
 
-#: common/models.py:109
+#: common/models.py:116
 msgid "Allow changing the IPN value while editing a part"
 msgstr ""
 
-#: common/models.py:115
+#: common/models.py:122
 msgid "Copy Part BOM Data"
 msgstr ""
 
-#: common/models.py:116
+#: common/models.py:123
 msgid "Copy BOM data by default when duplicating a part"
 msgstr ""
 
-#: common/models.py:122
+#: common/models.py:129
 msgid "Copy Part Parameter Data"
 msgstr ""
 
-#: common/models.py:123
+#: common/models.py:130
 msgid "Copy parameter data by default when duplicating a part"
 msgstr ""
 
-#: common/models.py:129
+#: common/models.py:136
 msgid "Copy Part Test Data"
 msgstr ""
 
-#: common/models.py:130
+#: common/models.py:137
 msgid "Copy test data by default when duplicating a part"
 msgstr ""
 
-#: common/models.py:136
+#: common/models.py:143
 msgid "Copy Category Parameter Templates"
 msgstr ""
 
-#: common/models.py:137
+#: common/models.py:144
 msgid "Copy category parameter templates when creating a part"
 msgstr ""
 
-#: common/models.py:143
+#: common/models.py:150
 msgid "Recent Part Count"
 msgstr ""
 
-#: common/models.py:144
+#: common/models.py:151
 msgid "Number of recent parts to display on index page"
 msgstr ""
 
-#: common/models.py:150 part/models.py:2059 part/templates/part/detail.html:160
+#: common/models.py:157 part/models.py:2079 part/templates/part/detail.html:160
 #: report/models.py:185 stock/forms.py:259 templates/js/table_filters.js:24
-#: templates/js/table_filters.js:288
+#: templates/js/table_filters.js:310
 msgid "Template"
 msgstr ""
 
-#: common/models.py:151
+#: common/models.py:158
 msgid "Parts are templates by default"
 msgstr ""
 
-#: common/models.py:157 part/models.py:834 part/templates/part/detail.html:170
-#: templates/js/table_filters.js:101 templates/js/table_filters.js:300
+#: common/models.py:164 part/models.py:834 part/templates/part/detail.html:170
+#: templates/js/table_filters.js:123 templates/js/table_filters.js:322
 msgid "Assembly"
 msgstr ""
 
-#: common/models.py:158
+#: common/models.py:165
 msgid "Parts can be assembled from other components by default"
 msgstr ""
 
-#: common/models.py:164 part/models.py:840 part/templates/part/detail.html:180
-#: templates/js/table_filters.js:304
+#: common/models.py:171 part/models.py:840 part/templates/part/detail.html:180
+#: templates/js/table_filters.js:326
 msgid "Component"
 msgstr ""
 
-#: common/models.py:165
+#: common/models.py:172
 msgid "Parts can be used as sub-components by default"
 msgstr ""
 
-#: common/models.py:171 part/models.py:851 part/templates/part/detail.html:200
+#: common/models.py:178 part/models.py:851 part/templates/part/detail.html:200
 msgid "Purchaseable"
 msgstr ""
 
-#: common/models.py:172
+#: common/models.py:179
 msgid "Parts are purchaseable by default"
 msgstr ""
 
-#: common/models.py:178 part/models.py:856 part/templates/part/detail.html:210
-#: templates/js/table_filters.js:312
+#: common/models.py:185 part/models.py:856 part/templates/part/detail.html:210
+#: templates/js/table_filters.js:334
 msgid "Salable"
 msgstr ""
 
-#: common/models.py:179
+#: common/models.py:186
 msgid "Parts are salable by default"
 msgstr ""
 
-#: common/models.py:185 part/models.py:846 part/templates/part/detail.html:190
-#: templates/js/table_filters.js:32 templates/js/table_filters.js:316
+#: common/models.py:192 part/models.py:846 part/templates/part/detail.html:190
+#: templates/js/table_filters.js:32 templates/js/table_filters.js:338
 msgid "Trackable"
 msgstr ""
 
-#: common/models.py:186
+#: common/models.py:193
 msgid "Parts are trackable by default"
 msgstr ""
 
-#: common/models.py:192 part/models.py:866 part/templates/part/detail.html:150
+#: common/models.py:199 part/models.py:866 part/templates/part/detail.html:150
 #: templates/js/table_filters.js:28
 msgid "Virtual"
 msgstr ""
 
-#: common/models.py:193
+#: common/models.py:200
 msgid "Parts are virtual by default"
 msgstr ""
 
-#: common/models.py:199
+#: common/models.py:206
 msgid "Show Quantity in Forms"
 msgstr ""
 
-#: common/models.py:200
+#: common/models.py:207
 msgid "Display available part quantity in some forms"
 msgstr ""
 
-#: common/models.py:206
+#: common/models.py:213
 msgid "Debug Mode"
 msgstr ""
 
-#: common/models.py:207
+#: common/models.py:214
 msgid "Generate reports in debug mode (HTML output)"
 msgstr ""
 
-#: common/models.py:213
+#: common/models.py:220
 msgid "Page Size"
 msgstr ""
 
-#: common/models.py:214
+#: common/models.py:221
 msgid "Default page size for PDF reports"
 msgstr ""
 
-#: common/models.py:224
+#: common/models.py:231
 msgid "Test Reports"
 msgstr ""
 
-#: common/models.py:225
+#: common/models.py:232
 msgid "Enable generation of test reports"
 msgstr ""
 
-#: common/models.py:231
+#: common/models.py:238
 msgid "Stock Expiry"
 msgstr ""
 
-#: common/models.py:232
+#: common/models.py:239
 msgid "Enable stock expiry functionality"
 msgstr ""
 
-#: common/models.py:238
+#: common/models.py:245
 msgid "Sell Expired Stock"
 msgstr ""
 
-#: common/models.py:239
+#: common/models.py:246
 msgid "Allow sale of expired stock"
 msgstr ""
 
-#: common/models.py:245
+#: common/models.py:252
 msgid "Stock Stale Time"
 msgstr ""
 
-#: common/models.py:246
+#: common/models.py:253
 msgid "Number of days stock items are considered stale before expiring"
 msgstr ""
 
-#: common/models.py:248 part/templates/part/detail.html:121
+#: common/models.py:255 part/templates/part/detail.html:121
 msgid "days"
 msgstr ""
 
-#: common/models.py:253
+#: common/models.py:260
 msgid "Build Expired Stock"
 msgstr ""
 
-#: common/models.py:254
+#: common/models.py:261
 msgid "Allow building with expired stock"
 msgstr ""
 
-#: common/models.py:260
+#: common/models.py:267
 msgid "Stock Ownership Control"
 msgstr ""
 
-#: common/models.py:261
+#: common/models.py:268
 msgid "Enable ownership control over stock locations and items"
 msgstr ""
 
-#: common/models.py:267
+#: common/models.py:274
 msgid "Group by Part"
 msgstr ""
 
-#: common/models.py:268
+#: common/models.py:275
 msgid "Group stock items by part reference in table views"
 msgstr ""
 
-#: common/models.py:274
+#: common/models.py:281
 msgid "Recent Stock Count"
 msgstr ""
 
-#: common/models.py:275
+#: common/models.py:282
 msgid "Number of recent stock items to display on index page"
 msgstr ""
 
-#: common/models.py:281
+#: common/models.py:288
 msgid "Build Order Reference Prefix"
 msgstr ""
 
-#: common/models.py:282
+#: common/models.py:289
 msgid "Prefix value for build order reference"
 msgstr ""
 
-#: common/models.py:287
+#: common/models.py:294
 msgid "Build Order Reference Regex"
 msgstr ""
 
-#: common/models.py:288
+#: common/models.py:295
 msgid "Regular expression pattern for matching build order reference"
 msgstr ""
 
-#: common/models.py:292
+#: common/models.py:299
 msgid "Sales Order Reference Prefix"
 msgstr ""
 
-#: common/models.py:293
+#: common/models.py:300
 msgid "Prefix value for sales order reference"
 msgstr ""
 
-#: common/models.py:298
+#: common/models.py:305
 msgid "Purchase Order Reference Prefix"
 msgstr ""
 
-#: common/models.py:299
+#: common/models.py:306
 msgid "Prefix value for purchase order reference"
 msgstr ""
 
-#: common/models.py:522
+#: common/models.py:529
 msgid "Settings key (must be unique - case insensitive"
 msgstr ""
 
-#: common/models.py:524
+#: common/models.py:531
 msgid "Settings value"
 msgstr ""
 
-#: common/models.py:559
+#: common/models.py:566
 msgid "Must be an integer value"
 msgstr ""
 
-#: common/models.py:582
+#: common/models.py:589
 msgid "Value must be a boolean value"
 msgstr ""
 
-#: common/models.py:593
+#: common/models.py:600
 msgid "Value must be an integer value"
 msgstr ""
 
-#: common/models.py:616
+#: common/models.py:623
 msgid "Key string must be unique"
 msgstr ""
 
-#: common/models.py:697 company/forms.py:132
+#: common/models.py:704 company/forms.py:177
 msgid "Price break quantity"
 msgstr ""
 
-#: common/models.py:705 company/templates/company/supplier_part_pricing.html:82
+#: common/models.py:712 company/templates/company/supplier_part_pricing.html:82
 #: part/templates/part/sale_prices.html:90 templates/js/bom.js:255
 msgid "Price"
 msgstr ""
 
-#: common/models.py:706
+#: common/models.py:713
 msgid "Unit price at specified quantity"
 msgstr ""
 
-#: common/models.py:729
+#: common/models.py:736
 msgid "Default"
 msgstr ""
 
@@ -1656,224 +1739,253 @@ msgstr ""
 msgid "Supplied value must be a boolean"
 msgstr ""
 
-#: company/forms.py:37 company/models.py:143
-#: company/templates/company/detail.html:40
+#: company/forms.py:38 company/models.py:145
+#: company/templates/company/detail.html:42
 msgid "Currency"
 msgstr ""
 
-#: company/forms.py:38 company/models.py:145
+#: company/forms.py:39 company/models.py:147
 msgid "Default currency used for this company"
 msgstr ""
 
-#: company/forms.py:76 part/forms.py:46
+#: company/forms.py:77 part/forms.py:46
 msgid "URL"
 msgstr ""
 
-#: company/forms.py:77 part/forms.py:47
+#: company/forms.py:78 part/forms.py:47
 msgid "Image URL"
 msgstr ""
 
-#: company/forms.py:99
+#: company/forms.py:118
 msgid "Single Price"
 msgstr ""
 
-#: company/forms.py:101
+#: company/forms.py:120
 msgid "Single quantity price"
 msgstr ""
 
-#: company/models.py:100
-msgid "Company description"
-msgstr ""
-
-#: company/models.py:101
-msgid "Description of the company"
-msgstr ""
-
-#: company/models.py:105 company/templates/company/company_base.html:70
-#: company/templates/company/detail.html:31 templates/js/company.js:60
-msgid "Website"
-msgstr ""
-
-#: company/models.py:105
-msgid "Company website URL"
-msgstr ""
-
-#: company/models.py:108 company/templates/company/company_base.html:77
-msgid "Address"
-msgstr ""
-
-#: company/models.py:109
-msgid "Company address"
-msgstr ""
-
-#: company/models.py:112
-msgid "Phone number"
-msgstr ""
-
-#: company/models.py:113
-msgid "Contact phone number"
-msgstr ""
-
-#: company/models.py:116 company/templates/company/company_base.html:91
-msgid "Email"
-msgstr ""
-
-#: company/models.py:116
-msgid "Contact email address"
-msgstr ""
-
-#: company/models.py:119 company/templates/company/company_base.html:98
-msgid "Contact"
-msgstr ""
-
-#: company/models.py:120
-msgid "Point of contact"
-msgstr ""
-
-#: company/models.py:122 company/models.py:359 order/models.py:103
-#: part/models.py:743
-#: report/templates/report/inventree_build_order_base.html:165
-#: stock/models.py:1557 templates/js/company.js:208 templates/js/part.js:430
-msgid "Link"
-msgstr ""
-
-#: company/models.py:122
-msgid "Link to external company information"
-msgstr ""
-
-#: company/models.py:130 part/models.py:753
-msgid "Image"
-msgstr ""
-
-#: company/models.py:135
-msgid "is customer"
-msgstr ""
-
-#: company/models.py:135
-msgid "Do you sell items to this company?"
-msgstr ""
-
-#: company/models.py:137
-msgid "is supplier"
-msgstr ""
-
-#: company/models.py:137
-msgid "Do you purchase items from this company?"
-msgstr ""
-
-#: company/models.py:139
-msgid "is manufacturer"
-msgstr ""
-
-#: company/models.py:139
-msgid "Does this company manufacture parts?"
-msgstr ""
-
-#: company/models.py:319 stock/models.py:371
-#: stock/templates/stock/item_base.html:220
-msgid "Base Part"
-msgstr ""
-
-#: company/models.py:323 order/views.py:1372
-msgid "Select part"
-msgstr ""
-
-#: company/models.py:329 company/templates/company/detail.html:60
-#: company/templates/company/supplier_part_base.html:83
-#: company/templates/company/supplier_part_detail.html:25 order/models.py:190
-#: order/templates/order/order_base.html:92
-#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:170
-#: stock/templates/stock/item_base.html:337 templates/js/company.js:48
-#: templates/js/company.js:164 templates/js/order.js:170
-msgid "Supplier"
-msgstr ""
-
-#: company/models.py:330
-msgid "Select supplier"
-msgstr ""
-
-#: company/models.py:335 company/templates/company/supplier_part_base.html:87
-#: company/templates/company/supplier_part_detail.html:26
-#: order/templates/order/purchase_order_detail.html:174 part/bom.py:171
-msgid "SKU"
-msgstr ""
-
-#: company/models.py:336
-msgid "Supplier stock keeping unit"
-msgstr ""
-
-#: company/models.py:346 company/templates/company/detail.html:55
-#: company/templates/company/supplier_part_base.html:93
-#: company/templates/company/supplier_part_detail.html:34 part/bom.py:172
-#: templates/js/company.js:44 templates/js/company.js:188
-msgid "Manufacturer"
-msgstr ""
-
-#: company/models.py:347
+#: company/forms.py:128 company/models.py:324
 msgid "Select manufacturer"
 msgstr ""
 
-#: company/models.py:353 company/templates/company/supplier_part_base.html:99
+#: company/forms.py:134 company/models.py:331
+msgid "Manufacturer Part Number"
+msgstr ""
+
+#: company/forms.py:136 company/models.py:330
+#: company/templates/company/manufacturer_part_base.html:89
+#: company/templates/company/manufacturer_part_detail.html:26
+#: company/templates/company/supplier_part_base.html:101
 #: company/templates/company/supplier_part_detail.html:35
-#: order/templates/order/purchase_order_detail.html:183 part/bom.py:173
-#: templates/js/company.js:204
+#: order/templates/order/purchase_order_detail.html:158 part/bom.py:171
+#: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307
 msgid "MPN"
 msgstr ""
 
-#: company/models.py:354
-msgid "Manufacturer part number"
+#: company/models.py:102
+msgid "Company description"
 msgstr ""
 
-#: company/models.py:360
+#: company/models.py:103
+msgid "Description of the company"
+msgstr ""
+
+#: company/models.py:107 company/templates/company/company_base.html:70
+#: company/templates/company/detail.html:33 templates/js/company.js:60
+msgid "Website"
+msgstr ""
+
+#: company/models.py:107
+msgid "Company website URL"
+msgstr ""
+
+#: company/models.py:110 company/templates/company/company_base.html:77
+msgid "Address"
+msgstr ""
+
+#: company/models.py:111
+msgid "Company address"
+msgstr ""
+
+#: company/models.py:114
+msgid "Phone number"
+msgstr ""
+
+#: company/models.py:115
+msgid "Contact phone number"
+msgstr ""
+
+#: company/models.py:118 company/templates/company/company_base.html:91
+msgid "Email"
+msgstr ""
+
+#: company/models.py:118
+msgid "Contact email address"
+msgstr ""
+
+#: company/models.py:121 company/templates/company/company_base.html:98
+msgid "Contact"
+msgstr ""
+
+#: company/models.py:122
+msgid "Point of contact"
+msgstr ""
+
+#: company/models.py:124 company/models.py:336 company/models.py:488
+#: order/models.py:103 part/models.py:743
+#: report/templates/report/inventree_build_order_base.html:165
+#: stock/models.py:1560 templates/js/company.js:188 templates/js/company.js:318
+#: templates/js/part.js:431
+msgid "Link"
+msgstr ""
+
+#: company/models.py:124
+msgid "Link to external company information"
+msgstr ""
+
+#: company/models.py:132 part/models.py:753
+msgid "Image"
+msgstr ""
+
+#: company/models.py:137
+msgid "is customer"
+msgstr ""
+
+#: company/models.py:137
+msgid "Do you sell items to this company?"
+msgstr ""
+
+#: company/models.py:139
+msgid "is supplier"
+msgstr ""
+
+#: company/models.py:139
+msgid "Do you purchase items from this company?"
+msgstr ""
+
+#: company/models.py:141
+msgid "is manufacturer"
+msgstr ""
+
+#: company/models.py:141
+msgid "Does this company manufacture parts?"
+msgstr ""
+
+#: company/models.py:308 company/models.py:459 stock/models.py:373
+#: stock/templates/stock/item_base.html:224
+msgid "Base Part"
+msgstr ""
+
+#: company/models.py:312 company/models.py:463 order/views.py:1384
+msgid "Select part"
+msgstr ""
+
+#: company/models.py:323 company/templates/company/detail.html:57
+#: company/templates/company/manufacturer_part_base.html:85
+#: company/templates/company/manufacturer_part_detail.html:25
+#: company/templates/company/supplier_part_base.html:94
+#: company/templates/company/supplier_part_detail.html:34 part/bom.py:170
+#: part/bom.py:241 stock/templates/stock/item_base.html:341
+#: templates/js/company.js:44 templates/js/company.js:165
+#: templates/js/company.js:289
+msgid "Manufacturer"
+msgstr ""
+
+#: company/models.py:337
+msgid "URL for external manufacturer part link"
+msgstr ""
+
+#: company/models.py:343
+msgid "Manufacturer part description"
+msgstr ""
+
+#: company/models.py:469 company/templates/company/detail.html:62
+#: company/templates/company/supplier_part_base.html:84
+#: company/templates/company/supplier_part_detail.html:25 order/models.py:190
+#: order/templates/order/order_base.html:92
+#: order/templates/order/order_wizard/select_pos.html:30 part/bom.py:175
+#: part/bom.py:286 stock/templates/stock/item_base.html:353
+#: templates/js/company.js:48 templates/js/company.js:263
+#: templates/js/order.js:170
+msgid "Supplier"
+msgstr ""
+
+#: company/models.py:470
+msgid "Select supplier"
+msgstr ""
+
+#: company/models.py:475 company/templates/company/supplier_part_base.html:88
+#: company/templates/company/supplier_part_detail.html:26
+#: order/templates/order/purchase_order_detail.html:149 part/bom.py:176
+#: part/bom.py:287
+msgid "SKU"
+msgstr ""
+
+#: company/models.py:476
+msgid "Supplier stock keeping unit"
+msgstr ""
+
+#: company/models.py:482
+#: company/templates/company/manufacturer_part_base.html:6
+#: company/templates/company/manufacturer_part_base.html:19
+#: stock/templates/stock/item_base.html:346
+msgid "Manufacturer Part"
+msgstr ""
+
+#: company/models.py:483
+msgid "Select manufacturer part"
+msgstr ""
+
+#: company/models.py:489
 msgid "URL for external supplier part link"
 msgstr ""
 
-#: company/models.py:366
+#: company/models.py:495
 msgid "Supplier part description"
 msgstr ""
 
-#: company/models.py:371 company/templates/company/supplier_part_base.html:113
-#: company/templates/company/supplier_part_detail.html:38 part/models.py:2170
+#: company/models.py:500 company/templates/company/supplier_part_base.html:115
+#: company/templates/company/supplier_part_detail.html:38 part/models.py:2190
 #: report/templates/report/inventree_po_report.html:93
 #: report/templates/report/inventree_so_report.html:93
 msgid "Note"
 msgstr ""
 
-#: company/models.py:375
+#: company/models.py:504
 msgid "base cost"
 msgstr ""
 
-#: company/models.py:375
+#: company/models.py:504
 msgid "Minimum charge (e.g. stocking fee)"
 msgstr ""
 
-#: company/models.py:377 company/templates/company/supplier_part_base.html:106
-#: stock/models.py:395 stock/templates/stock/item_base.html:295
+#: company/models.py:506 company/templates/company/supplier_part_base.html:108
+#: stock/models.py:397 stock/templates/stock/item_base.html:299
 #: templates/js/stock.js:667
 msgid "Packaging"
 msgstr ""
 
-#: company/models.py:377
+#: company/models.py:506
 msgid "Part packaging"
 msgstr ""
 
-#: company/models.py:379
+#: company/models.py:508
 msgid "multiple"
 msgstr ""
 
-#: company/models.py:379
+#: company/models.py:508
 msgid "Order multiple"
 msgstr ""
 
 #: company/templates/company/assigned_stock.html:10
-#: company/templates/company/navbar.html:51
-#: company/templates/company/navbar.html:54 templates/js/build.js:411
+#: company/templates/company/navbar.html:62
+#: company/templates/company/navbar.html:65 templates/js/build.js:467
 msgid "Assigned Stock"
 msgstr ""
 
 #: company/templates/company/company_base.html:9
 #: company/templates/company/company_base.html:35
-#: templates/InvenTree/search.html:288 templates/js/company.js:33
+#: templates/InvenTree/search.html:304 templates/js/company.js:33
 msgid "Company"
 msgstr ""
 
@@ -1895,7 +2007,7 @@ msgstr ""
 msgid "Edit company information"
 msgstr ""
 
-#: company/templates/company/company_base.html:56 company/views.py:324
+#: company/templates/company/company_base.html:56 company/views.py:326
 msgid "Delete Company"
 msgstr ""
 
@@ -1918,91 +2030,87 @@ msgstr ""
 #, python-format
 msgid ""
 "There are %(count)s parts sourced from this company.<br>\n"
-"If this supplier is deleted, these supplier part entries will also be "
-"deleted."
+"If this supplier is deleted, these supplier part entries will also be deleted."
 msgstr ""
 
 #: company/templates/company/detail.html:21
 msgid "Company Name"
 msgstr ""
 
-#: company/templates/company/detail.html:34
+#: company/templates/company/detail.html:36
 msgid "No website specified"
 msgstr ""
 
-#: company/templates/company/detail.html:43
+#: company/templates/company/detail.html:45
 msgid "Uses default currency"
 msgstr ""
 
-#: company/templates/company/detail.html:65 order/models.py:440
-#: order/templates/order/sales_order_base.html:92 stock/models.py:413
-#: stock/models.py:414 stock/templates/stock/item_base.html:247
+#: company/templates/company/detail.html:67 order/models.py:450
+#: order/templates/order/sales_order_base.html:92 stock/models.py:415
+#: stock/models.py:416 stock/templates/stock/item_base.html:251
 #: templates/js/company.js:40 templates/js/order.js:267
 msgid "Customer"
 msgstr ""
 
-#: company/templates/company/detail_part.html:10
-#: templates/InvenTree/search.html:148
-msgid "Supplier Parts"
+#: company/templates/company/detail_manufacturer_part.html:11
+#: templates/InvenTree/search.html:149
+msgid "Manufacturer Parts"
 msgstr ""
 
-#: company/templates/company/detail_part.html:20
-#: order/templates/order/order_wizard/select_parts.html:42
-#: order/templates/order/purchase_order_detail.html:75
-msgid "Create new supplier part"
+#: company/templates/company/detail_manufacturer_part.html:22
+msgid "Create new manufacturer part"
 msgstr ""
 
-#: company/templates/company/detail_part.html:21
-#: order/templates/order/purchase_order_detail.html:74
-#: part/templates/part/supplier.html:17 templates/js/stock.js:1086
-msgid "New Supplier Part"
+#: company/templates/company/detail_manufacturer_part.html:23
+#: part/templates/part/manufacturer.html:19
+msgid "New Manufacturer Part"
 msgstr ""
 
-#: company/templates/company/detail_part.html:26
-#: part/templates/part/category.html:122 part/templates/part/supplier.html:20
+#: company/templates/company/detail_manufacturer_part.html:28
+#: company/templates/company/detail_supplier_part.html:27
+#: company/templates/company/manufacturer_part_suppliers.html:20
+#: part/templates/part/category.html:122
+#: part/templates/part/manufacturer.html:22
+#: part/templates/part/supplier.html:20
 msgid "Options"
 msgstr ""
 
-#: company/templates/company/detail_part.html:31
+#: company/templates/company/detail_manufacturer_part.html:33
+#: company/templates/company/detail_supplier_part.html:32
 #: part/templates/part/category.html:127
 msgid "Order parts"
 msgstr ""
 
-#: company/templates/company/detail_part.html:34
+#: company/templates/company/detail_manufacturer_part.html:36
+#: company/templates/company/detail_supplier_part.html:35
 msgid "Delete parts"
 msgstr ""
 
-#: company/templates/company/detail_part.html:34
+#: company/templates/company/detail_manufacturer_part.html:36
+#: company/templates/company/detail_supplier_part.html:35
 msgid "Delete Parts"
 msgstr ""
 
-#: company/templates/company/detail_part.html:66
+#: company/templates/company/detail_manufacturer_part.html:66
+#: company/templates/company/detail_supplier_part.html:66
 #: part/templates/part/bom.html:159 part/templates/part/category.html:118
-#: templates/js/stock.js:1080
+#: templates/js/stock.js:1157
 msgid "New Part"
 msgstr ""
 
-#: company/templates/company/detail_part.html:67
+#: company/templates/company/detail_manufacturer_part.html:67
+#: company/templates/company/detail_supplier_part.html:67
 msgid "Create new Part"
 msgstr ""
 
-#: company/templates/company/detail_part.html:72 company/views.py:62
-#: order/templates/order/purchase_orders.html:183
-#: part/templates/part/supplier.html:50
-msgid "New Supplier"
-msgstr ""
-
-#: company/templates/company/detail_part.html:73 company/views.py:279
-#: order/templates/order/purchase_orders.html:184
-msgid "Create new Supplier"
-msgstr ""
-
-#: company/templates/company/detail_part.html:78 company/views.py:69
+#: company/templates/company/detail_manufacturer_part.html:72
+#: company/views.py:71 part/templates/part/manufacturer.html:52
 #: part/templates/part/supplier.html:56
 msgid "New Manufacturer"
 msgstr ""
 
-#: company/templates/company/detail_part.html:79 company/views.py:282
+#: company/templates/company/detail_manufacturer_part.html:73
+#: company/views.py:284
 msgid "Create new Manufacturer"
 msgstr ""
 
@@ -2017,68 +2125,172 @@ msgstr ""
 msgid "Export"
 msgstr ""
 
-#: company/templates/company/index.html:7
+#: company/templates/company/detail_supplier_part.html:11
+#: company/templates/company/manufacturer_part_navbar.html:11
+#: company/templates/company/manufacturer_part_suppliers.html:10
+#: templates/InvenTree/search.html:164
+msgid "Supplier Parts"
+msgstr ""
+
+#: company/templates/company/detail_supplier_part.html:21
+#: order/templates/order/order_wizard/select_parts.html:42
+#: order/templates/order/purchase_order_detail.html:50
+msgid "Create new supplier part"
+msgstr ""
+
+#: company/templates/company/detail_supplier_part.html:22
+#: company/templates/company/manufacturer_part_suppliers.html:17
+#: order/templates/order/purchase_order_detail.html:49
+#: part/templates/part/supplier.html:17 templates/js/stock.js:1163
+msgid "New Supplier Part"
+msgstr ""
+
+#: company/templates/company/detail_supplier_part.html:72
+#: company/templates/company/manufacturer_part_suppliers.html:47
+#: company/views.py:64 order/templates/order/purchase_orders.html:183
+#: part/templates/part/supplier.html:50
+msgid "New Supplier"
+msgstr ""
+
+#: company/templates/company/detail_supplier_part.html:73 company/views.py:281
+#: order/templates/order/purchase_orders.html:184
+msgid "Create new Supplier"
+msgstr ""
+
+#: company/templates/company/index.html:8
 msgid "Supplier List"
 msgstr ""
 
-#: company/templates/company/navbar.html:20
-msgid "Supplied Parts"
+#: company/templates/company/manufacturer_part_base.html:36
+#: company/templates/company/supplier_part_base.html:36
+#: company/templates/company/supplier_part_orders.html:17
+#: part/templates/part/orders.html:17 part/templates/part/part_base.html:65
+msgid "Order part"
 msgstr ""
 
-#: company/templates/company/navbar.html:23
-#: order/templates/order/receive_parts.html:14 part/models.py:322
-#: part/templates/part/cat_link.html:7 part/templates/part/category.html:95
-#: part/templates/part/category_navbar.html:11
-#: part/templates/part/category_navbar.html:14
-#: part/templates/part/category_partlist.html:10
-#: templates/InvenTree/index.html:96 templates/InvenTree/search.html:113
-#: templates/InvenTree/settings/tabs.html:25 templates/navbar.html:23
-#: templates/stats.html:59 templates/stats.html:68 users/models.py:38
-msgid "Parts"
+#: company/templates/company/manufacturer_part_base.html:41
+msgid "Edit manufacturer part"
 msgstr ""
 
-#: company/templates/company/navbar.html:27 part/templates/part/navbar.html:33
-#: stock/templates/stock/location.html:100
-#: stock/templates/stock/location.html:115 templates/InvenTree/search.html:182
-#: templates/stats.html:72 templates/stats.html:81 users/models.py:40
-msgid "Stock Items"
+#: company/templates/company/manufacturer_part_base.html:45
+msgid "Delete manufacturer part"
 msgstr ""
 
-#: company/templates/company/navbar.html:30
-#: company/templates/company/part_navbar.html:14
-#: part/templates/part/navbar.html:36 stock/templates/stock/loc_link.html:7
-#: stock/templates/stock/location.html:29
-#: stock/templates/stock/stock_app_base.html:9
-#: templates/InvenTree/index.html:127 templates/InvenTree/search.html:180
-#: templates/InvenTree/search.html:216
-#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:172
-#: templates/js/part.js:397 templates/js/stock.js:563 templates/navbar.html:26
+#: company/templates/company/manufacturer_part_base.html:57
+#: company/templates/company/manufacturer_part_detail.html:10
+msgid "Manufacturer Part Details"
+msgstr ""
+
+#: company/templates/company/manufacturer_part_base.html:62
+#: company/templates/company/manufacturer_part_detail.html:18
+#: company/templates/company/supplier_part_base.html:61
+#: company/templates/company/supplier_part_detail.html:18
+msgid "Internal Part"
+msgstr ""
+
+#: company/templates/company/manufacturer_part_delete.html:6
+msgid "Are you sure you want to delete the following Manufacturer Parts?"
+msgstr ""
+
+#: company/templates/company/manufacturer_part_delete.html:36
+#, python-format
+msgid "There are %(count)s suppliers defined for this manufacturer part. If you delete it, the following supplier parts will also be deleted:"
+msgstr ""
+
+#: company/templates/company/manufacturer_part_navbar.html:14
+#: company/views.py:63 part/templates/part/navbar.html:78
+#: part/templates/part/navbar.html:81 templates/InvenTree/search.html:316
+#: templates/navbar.html:35
+msgid "Suppliers"
+msgstr ""
+
+#: company/templates/company/manufacturer_part_navbar.html:19
+msgid "Manufacturer Part Stock"
+msgstr ""
+
+#: company/templates/company/manufacturer_part_navbar.html:22
+#: company/templates/company/navbar.html:41
+#: company/templates/company/supplier_part_navbar.html:15
+#: part/templates/part/navbar.html:36 stock/api.py:51
+#: stock/templates/stock/loc_link.html:7 stock/templates/stock/location.html:36
+#: stock/templates/stock/stock_app_base.html:10
+#: templates/InvenTree/index.html:128 templates/InvenTree/search.html:196
+#: templates/InvenTree/search.html:232
+#: templates/InvenTree/settings/tabs.html:28 templates/js/part.js:173
+#: templates/js/part.js:398 templates/js/stock.js:563 templates/navbar.html:26
 msgid "Stock"
 msgstr ""
 
-#: company/templates/company/navbar.html:36
-#: company/templates/company/navbar.html:45
-#: company/templates/company/navbar.html:48
+#: company/templates/company/manufacturer_part_navbar.html:26
+msgid "Manufacturer Part Orders"
+msgstr ""
+
+#: company/templates/company/manufacturer_part_navbar.html:29
+#: company/templates/company/supplier_part_navbar.html:22
+msgid "Orders"
+msgstr ""
+
+#: company/templates/company/manufacturer_part_suppliers.html:22
+#: part/templates/part/supplier.html:22
+msgid "Delete supplier parts"
+msgstr ""
+
+#: company/templates/company/manufacturer_part_suppliers.html:22
+#: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44
+#: part/templates/part/related.html:44 part/templates/part/supplier.html:22
+#: stock/views.py:1002 users/models.py:187
+msgid "Delete"
+msgstr ""
+
+#: company/templates/company/manufacturer_part_suppliers.html:48
+#: part/templates/part/supplier.html:51
+msgid "Create new supplier"
+msgstr ""
+
+#: company/templates/company/navbar.html:20
+#: company/templates/company/navbar.html:23
+msgid "Manufactured Parts"
+msgstr ""
+
+#: company/templates/company/navbar.html:29
+#: company/templates/company/navbar.html:32
+msgid "Supplied Parts"
+msgstr ""
+
+#: company/templates/company/navbar.html:38 part/templates/part/navbar.html:33
+#: stock/templates/stock/location.html:107
+#: stock/templates/stock/location.html:122
+#: stock/templates/stock/location.html:136
+#: stock/templates/stock/location_navbar.html:22
+#: stock/templates/stock/location_navbar.html:29
+#: templates/InvenTree/search.html:198 templates/js/stock.js:968
+#: templates/stats.html:72 templates/stats.html:81 users/models.py:42
+msgid "Stock Items"
+msgstr ""
+
+#: company/templates/company/navbar.html:47
+#: company/templates/company/navbar.html:56
+#: company/templates/company/navbar.html:59
 #: company/templates/company/sales_orders.html:11
 #: order/templates/order/sales_orders.html:8
 #: order/templates/order/sales_orders.html:13
-#: part/templates/part/navbar.html:92 part/templates/part/navbar.html:95
-#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:227
-#: templates/InvenTree/search.html:330
+#: part/templates/part/navbar.html:98 part/templates/part/navbar.html:101
+#: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228
+#: templates/InvenTree/search.html:345
 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
-#: users/models.py:43
+#: users/models.py:45
 msgid "Sales Orders"
 msgstr ""
 
-#: company/templates/company/navbar.html:39
+#: company/templates/company/navbar.html:50
 #: company/templates/company/purchase_orders.html:10
 #: order/templates/order/purchase_orders.html:8
 #: order/templates/order/purchase_orders.html:13
-#: part/templates/part/navbar.html:78 part/templates/part/navbar.html:81
-#: part/templates/part/orders.html:10 templates/InvenTree/index.html:204
-#: templates/InvenTree/search.html:300
+#: part/templates/part/navbar.html:84 part/templates/part/navbar.html:87
+#: part/templates/part/orders.html:10 templates/InvenTree/index.html:205
+#: templates/InvenTree/search.html:325
 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
-#: users/models.py:42
+#: users/models.py:44
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2086,32 +2298,6 @@ msgstr ""
 msgid "Company Notes"
 msgstr ""
 
-#: company/templates/company/part_navbar.html:11
-#: company/templates/company/supplier_part_stock.html:10
-msgid "Supplier Part Stock"
-msgstr ""
-
-#: company/templates/company/part_navbar.html:18
-#: company/templates/company/supplier_part_orders.html:10
-msgid "Supplier Part Orders"
-msgstr ""
-
-#: company/templates/company/part_navbar.html:21
-msgid "Orders"
-msgstr ""
-
-#: company/templates/company/part_navbar.html:25
-msgid "Supplier Part Pricing"
-msgstr ""
-
-#: company/templates/company/part_navbar.html:28
-msgid "Pricing"
-msgstr ""
-
-#: company/templates/company/partdelete.html:5
-msgid "Are you sure you want to delete the following Supplier Parts?"
-msgstr ""
-
 #: company/templates/company/purchase_orders.html:18
 #: order/templates/order/purchase_orders.html:20
 msgid "Create new purchase order"
@@ -2132,34 +2318,45 @@ msgstr ""
 msgid "New Sales Order"
 msgstr ""
 
-#: company/templates/company/supplier_part_base.html:6
-#: company/templates/company/supplier_part_base.html:19 stock/models.py:380
-#: stock/templates/stock/item_base.html:342 templates/js/company.js:180
+#: company/templates/company/supplier_part_base.html:7
+#: company/templates/company/supplier_part_base.html:20 stock/models.py:382
+#: stock/templates/stock/item_base.html:358 templates/js/company.js:279
 msgid "Supplier Part"
 msgstr ""
 
-#: company/templates/company/supplier_part_base.html:35
-#: company/templates/company/supplier_part_orders.html:17
-#: part/templates/part/orders.html:17 part/templates/part/part_base.html:64
-msgid "Order part"
-msgstr ""
-
-#: company/templates/company/supplier_part_base.html:39
+#: company/templates/company/supplier_part_base.html:40
 msgid "Edit supplier part"
 msgstr ""
 
-#: company/templates/company/supplier_part_base.html:43
+#: company/templates/company/supplier_part_base.html:44
 msgid "Delete supplier part"
 msgstr ""
 
-#: company/templates/company/supplier_part_base.html:55
+#: company/templates/company/supplier_part_base.html:56
 #: company/templates/company/supplier_part_detail.html:10
 msgid "Supplier Part Details"
 msgstr ""
 
-#: company/templates/company/supplier_part_base.html:60
-#: company/templates/company/supplier_part_detail.html:18
-msgid "Internal Part"
+#: company/templates/company/supplier_part_delete.html:5
+msgid "Are you sure you want to delete the following Supplier Parts?"
+msgstr ""
+
+#: company/templates/company/supplier_part_navbar.html:12
+#: company/templates/company/supplier_part_stock.html:10
+msgid "Supplier Part Stock"
+msgstr ""
+
+#: company/templates/company/supplier_part_navbar.html:19
+#: company/templates/company/supplier_part_orders.html:10
+msgid "Supplier Part Orders"
+msgstr ""
+
+#: company/templates/company/supplier_part_navbar.html:26
+msgid "Supplier Part Pricing"
+msgstr ""
+
+#: company/templates/company/supplier_part_navbar.html:29
+msgid "Pricing"
 msgstr ""
 
 #: company/templates/company/supplier_part_orders.html:18
@@ -2171,8 +2368,8 @@ msgstr ""
 msgid "Pricing Information"
 msgstr ""
 
-#: company/templates/company/supplier_part_pricing.html:19 company/views.py:569
-#: part/templates/part/sale_prices.html:17 part/views.py:2618
+#: company/templates/company/supplier_part_pricing.html:19 company/views.py:794
+#: part/templates/part/sale_prices.html:17 part/views.py:2636
 msgid "Add Price Break"
 msgstr ""
 
@@ -2191,99 +2388,106 @@ msgstr ""
 msgid "Delete price break"
 msgstr ""
 
-#: company/views.py:61 part/templates/part/navbar.html:72
-#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:291
-#: templates/navbar.html:35
-msgid "Suppliers"
-msgstr ""
-
-#: company/views.py:68 templates/InvenTree/search.html:308
+#: company/views.py:70 part/templates/part/navbar.html:72
+#: part/templates/part/navbar.html:75 templates/InvenTree/search.html:306
 #: templates/navbar.html:36
 msgid "Manufacturers"
 msgstr ""
 
-#: company/views.py:75 templates/InvenTree/search.html:321
+#: company/views.py:77 templates/InvenTree/search.html:336
 #: templates/navbar.html:45
 msgid "Customers"
 msgstr ""
 
-#: company/views.py:76 order/templates/order/sales_orders.html:185
+#: company/views.py:78 order/templates/order/sales_orders.html:185
 msgid "New Customer"
 msgstr ""
 
-#: company/views.py:84
+#: company/views.py:86
 msgid "Companies"
 msgstr ""
 
-#: company/views.py:85
+#: company/views.py:87
 msgid "New Company"
 msgstr ""
 
-#: company/views.py:167 part/views.py:848
+#: company/views.py:169 part/views.py:848
 msgid "Download Image"
 msgstr ""
 
-#: company/views.py:196 part/views.py:880
+#: company/views.py:198 part/views.py:880
 msgid "Image size exceeds maximum allowable size for download"
 msgstr ""
 
-#: company/views.py:212 part/views.py:896
+#: company/views.py:214 part/views.py:896
 msgid "Supplied URL is not a valid image file"
 msgstr ""
 
-#: company/views.py:241
+#: company/views.py:243
 msgid "Update Company Image"
 msgstr ""
 
-#: company/views.py:247
+#: company/views.py:249
 msgid "Updated company image"
 msgstr ""
 
-#: company/views.py:257
+#: company/views.py:259
 msgid "Edit Company"
 msgstr ""
 
-#: company/views.py:262
+#: company/views.py:264
 msgid "Edited company information"
 msgstr ""
 
-#: company/views.py:285 order/templates/order/sales_orders.html:186
+#: company/views.py:287 order/templates/order/sales_orders.html:186
 msgid "Create new Customer"
 msgstr ""
 
-#: company/views.py:287
+#: company/views.py:289
 msgid "Create new Company"
 msgstr ""
 
-#: company/views.py:314
+#: company/views.py:316
 msgid "Created new company"
 msgstr ""
 
-#: company/views.py:330
+#: company/views.py:332
 msgid "Company was deleted"
 msgstr ""
 
-#: company/views.py:355
+#: company/views.py:357
+msgid "Edit Manufacturer Part"
+msgstr ""
+
+#: company/views.py:366
+msgid "Create New Manufacturer Part"
+msgstr ""
+
+#: company/views.py:440
+msgid "Delete Manufacturer Part"
+msgstr ""
+
+#: company/views.py:528
 msgid "Edit Supplier Part"
 msgstr ""
 
-#: company/views.py:378 templates/js/stock.js:1087
+#: company/views.py:578 templates/js/stock.js:1164
 msgid "Create new Supplier Part"
 msgstr ""
 
-#: company/views.py:497
+#: company/views.py:722
 msgid "Delete Supplier Part"
 msgstr ""
 
-#: company/views.py:574 part/views.py:2622
+#: company/views.py:799 part/views.py:2640
 msgid "Added new price break"
 msgstr ""
 
-#: company/views.py:630 part/views.py:2666
+#: company/views.py:855 part/views.py:2684
 msgid "Edit Price Break"
 msgstr ""
 
-#: company/views.py:645 part/views.py:2680
+#: company/views.py:870 part/views.py:2698
 msgid "Delete Price Break"
 msgstr ""
 
@@ -2331,11 +2535,11 @@ msgstr ""
 msgid "Label height, specified in mm"
 msgstr ""
 
-#: label/models.py:222 label/models.py:273
+#: label/models.py:222 label/models.py:275
 msgid "Query filters (comma-separated list of key=value pairs"
 msgstr ""
 
-#: label/models.py:223 label/models.py:274 report/models.py:294
+#: label/models.py:223 label/models.py:276 report/models.py:294
 #: report/models.py:415 report/models.py:449
 msgid "Filters"
 msgstr ""
@@ -2373,9 +2577,8 @@ msgstr ""
 msgid "Enter sales order number"
 msgstr ""
 
-#: order/forms.py:145 order/models.py:452
-msgid ""
-"Target date for order completion. Order will be overdue after this date."
+#: order/forms.py:145 order/models.py:462
+msgid "Target date for order completion. Order will be overdue after this date."
 msgstr ""
 
 #: order/forms.py:235
@@ -2410,7 +2613,7 @@ msgstr ""
 msgid "Order notes"
 msgstr ""
 
-#: order/models.py:182 order/models.py:445
+#: order/models.py:182 order/models.py:455
 msgid "Purchase order status"
 msgstr ""
 
@@ -2444,16 +2647,15 @@ msgid "Target Delivery Date"
 msgstr ""
 
 #: order/models.py:213
-msgid ""
-"Expected date for order delivery. Order will be overdue after this date."
+msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
 #: order/models.py:219
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:243 order/models.py:342 part/views.py:1586
-#: stock/models.py:270 stock/models.py:950
+#: order/models.py:243 part/views.py:1586 stock/models.py:270
+#: stock/models.py:953
 msgid "Quantity must be greater than zero"
 msgstr ""
 
@@ -2461,120 +2663,128 @@ msgstr ""
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:337
+#: order/models.py:344
 msgid "Lines can only be received against an order marked as 'Placed'"
 msgstr ""
 
-#: order/models.py:359
+#: order/models.py:348
+msgid "Quantity must be an integer"
+msgstr ""
+
+#: order/models.py:350
+msgid "Quantity must be a positive number"
+msgstr ""
+
+#: order/models.py:369
 msgid "Received items"
 msgstr ""
 
-#: order/models.py:441
+#: order/models.py:451
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:455 templates/js/order.js:303
+#: order/models.py:465 templates/js/order.js:303
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:462
+#: order/models.py:472
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:506
+#: order/models.py:516
 msgid "SalesOrder cannot be shipped as it is not currently pending"
 msgstr ""
 
-#: order/models.py:593
+#: order/models.py:603
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:595
+#: order/models.py:605
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:597
+#: order/models.py:607
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:623 order/models.py:667
+#: order/models.py:633 order/models.py:677
 #: part/templates/part/allocation.html:17
 #: part/templates/part/allocation.html:45
 msgid "Order"
 msgstr ""
 
-#: order/models.py:624 order/templates/order/order_base.html:9
+#: order/models.py:634 order/templates/order/order_base.html:9
 #: order/templates/order/order_base.html:24
 #: report/templates/report/inventree_po_report.html:77
-#: stock/templates/stock/item_base.html:309 templates/js/order.js:148
+#: stock/templates/stock/item_base.html:313 templates/js/order.js:148
 msgid "Purchase Order"
 msgstr ""
 
-#: order/models.py:638
+#: order/models.py:648
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:641 order/templates/order/order_base.html:131
-#: order/templates/order/purchase_order_detail.html:207
+#: order/models.py:651 order/templates/order/order_base.html:131
+#: order/templates/order/purchase_order_detail.html:189
 #: order/templates/order/receive_parts.html:22
 #: order/templates/order/sales_order_base.html:131
 msgid "Received"
 msgstr ""
 
-#: order/models.py:641
+#: order/models.py:651
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:648 stock/models.py:506
-#: stock/templates/stock/item_base.html:316
+#: order/models.py:658 stock/models.py:508
+#: stock/templates/stock/item_base.html:320
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:649
+#: order/models.py:659
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:743 order/models.py:745
+#: order/models.py:753 order/models.py:755
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:749
+#: order/models.py:759
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:751
+#: order/models.py:761
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:754
+#: order/models.py:764
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:764
+#: order/models.py:774
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:769
+#: order/models.py:779
 msgid "Line"
 msgstr ""
 
-#: order/models.py:780
+#: order/models.py:790
 msgid "Item"
 msgstr ""
 
-#: order/models.py:781
+#: order/models.py:791
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:784
+#: order/models.py:794
 msgid "Enter stock allocation quantity"
 msgstr ""
 
@@ -2622,18 +2832,38 @@ msgstr ""
 msgid "Issued"
 msgstr ""
 
-#: order/templates/order/order_cancel.html:7
-#: order/templates/order/sales_order_cancel.html:9
-msgid "Cancelling this order means that the order will no longer be editable."
+#: order/templates/order/order_base.html:180
+#: order/templates/order/purchase_order_detail.html:100
+#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: stock/templates/stock/location.html:191 templates/js/stock.js:708
+#: templates/js/stock.js:1169
+msgid "New Location"
+msgstr ""
+
+#: order/templates/order/order_base.html:181
+#: order/templates/order/purchase_order_detail.html:101
+#: stock/templates/stock/location.html:42
+msgid "Create new stock location"
+msgstr ""
+
+#: order/templates/order/order_cancel.html:8
+msgid "Cancelling this order means that the order and line items will no longer be editable."
 msgstr ""
 
 #: order/templates/order/order_complete.html:7
 msgid "Mark this order as complete?"
 msgstr ""
 
-#: order/templates/order/order_issue.html:7
-msgid ""
-"After placing this purchase order, line items will no longer be editable."
+#: order/templates/order/order_complete.html:10
+msgid "This order has line items which have not been marked as received."
+msgstr ""
+
+#: order/templates/order/order_complete.html:11
+msgid "Completing this order means that the order and line items will no longer be editable."
+msgstr ""
+
+#: order/templates/order/order_issue.html:8
+msgid "After placing this purchase order, line items will no longer be editable."
 msgstr ""
 
 #: order/templates/order/order_notes.html:13
@@ -2657,7 +2887,8 @@ msgid "Select Supplier"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_parts.html:57
-msgid "Select a supplier for"
+#, python-format
+msgid "Select a supplier for <i>%(name)s</i>"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_parts.html:69
@@ -2683,11 +2914,13 @@ msgid "Select Purchase Order"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:45
-msgid "Create new purchase order for {{ supplier.name }}"
+#, python-format
+msgid "Create new purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:68
-msgid "Select a purchase order for"
+#, python-format
+msgid "Select a purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/po_attachments.html:12
@@ -2709,43 +2942,29 @@ msgid "Purchase Order Items"
 msgstr ""
 
 #: order/templates/order/purchase_order_detail.html:24
-#: order/templates/order/sales_order_detail.html:22 order/views.py:1108
-#: order/views.py:1191
+#: order/templates/order/sales_order_detail.html:22 order/views.py:1120
+#: order/views.py:1203
 msgid "Add Line Item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:45
-#: order/templates/order/purchase_order_detail.html:125
-#: part/templates/part/category.html:197 part/templates/part/category.html:239
-#: stock/templates/stock/location.html:191 templates/js/stock.js:708
-#: templates/js/stock.js:1092
-msgid "New Location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:46
-#: order/templates/order/purchase_order_detail.html:126
-#: stock/templates/stock/location.html:35
-msgid "Create new stock location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:139
+#: order/templates/order/purchase_order_detail.html:114
 msgid "No line items found"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:198
+#: order/templates/order/purchase_order_detail.html:180
 msgid "Unit Price"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:239
+#: order/templates/order/purchase_order_detail.html:221
 #: order/templates/order/sales_order_detail.html:294
 msgid "Edit line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:240
+#: order/templates/order/purchase_order_detail.html:222
 msgid "Delete line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:245
+#: order/templates/order/purchase_order_detail.html:227
 msgid "Receive line item"
 msgstr ""
 
@@ -2755,7 +2974,21 @@ msgid "Print Order Reports"
 msgstr ""
 
 #: order/templates/order/receive_parts.html:8
-msgid "Receive outstanding parts for"
+#, python-format
+msgid "Receive outstanding parts for <b>%(order)s</b> - <i>%(desc)s</i>"
+msgstr ""
+
+#: order/templates/order/receive_parts.html:14 part/api.py:40
+#: part/models.py:322 part/templates/part/cat_link.html:7
+#: part/templates/part/category.html:99
+#: part/templates/part/category_navbar.html:22
+#: part/templates/part/category_navbar.html:29
+#: part/templates/part/category_partlist.html:10
+#: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
+#: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577
+#: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68
+#: users/models.py:40
+msgid "Parts"
 msgstr ""
 
 #: order/templates/order/receive_parts.html:15
@@ -2767,7 +3000,7 @@ msgid "Order Code"
 msgstr ""
 
 #: order/templates/order/receive_parts.html:21
-#: part/templates/part/part_base.html:128 templates/js/part.js:413
+#: part/templates/part/part_base.html:129 templates/js/part.js:414
 msgid "On Order"
 msgstr ""
 
@@ -2807,30 +3040,26 @@ msgstr ""
 msgid "Warning"
 msgstr ""
 
+#: order/templates/order/sales_order_cancel.html:9
+msgid "Cancelling this order means that the order will no longer be editable."
+msgstr ""
+
 #: order/templates/order/sales_order_detail.html:13
 msgid "Sales Order Items"
 msgstr ""
 
-#: order/templates/order/sales_order_detail.html:75
-#: order/templates/order/sales_order_detail.html:157
-#: report/templates/report/inventree_test_report_base.html:75
-#: stock/models.py:418 stock/templates/stock/item_base.html:234
-#: templates/js/build.js:418
-msgid "Serial Number"
-msgstr ""
-
-#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:338
-#: templates/js/build.js:571 templates/js/build.js:984
+#: order/templates/order/sales_order_detail.html:92 templates/js/bom.js:342
+#: templates/js/build.js:627 templates/js/build.js:1044
 msgid "Actions"
 msgstr ""
 
-#: order/templates/order/sales_order_detail.html:99 templates/js/build.js:459
-#: templates/js/build.js:789
+#: order/templates/order/sales_order_detail.html:99 templates/js/build.js:515
+#: templates/js/build.js:849
 msgid "Edit stock allocation"
 msgstr ""
 
-#: order/templates/order/sales_order_detail.html:100 templates/js/build.js:461
-#: templates/js/build.js:790
+#: order/templates/order/sales_order_detail.html:100 templates/js/build.js:517
+#: templates/js/build.js:850
 msgid "Delete stock allocation"
 msgstr ""
 
@@ -2842,8 +3071,8 @@ msgstr ""
 msgid "ID"
 msgstr ""
 
-#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:523
-#: templates/js/build.js:785
+#: order/templates/order/sales_order_detail.html:229 templates/js/build.js:579
+#: templates/js/build.js:845
 msgid "Allocated"
 msgstr ""
 
@@ -2855,7 +3084,7 @@ msgstr ""
 msgid "Allocate serial numbers"
 msgstr ""
 
-#: order/templates/order/sales_order_detail.html:282 templates/js/build.js:585
+#: order/templates/order/sales_order_detail.html:282 templates/js/build.js:641
 msgid "Allocate stock"
 msgstr ""
 
@@ -2863,8 +3092,8 @@ msgstr ""
 msgid "Purchase stock"
 msgstr ""
 
-#: order/templates/order/sales_order_detail.html:289 templates/js/build.js:578
-#: templates/js/build.js:992
+#: order/templates/order/sales_order_detail.html:289 templates/js/build.js:634
+#: templates/js/build.js:1052
 msgid "Build stock"
 msgstr ""
 
@@ -2877,9 +3106,7 @@ msgid "Sales Order Notes"
 msgstr ""
 
 #: order/templates/order/sales_order_ship.html:10
-msgid ""
-"This order has not been fully allocated. If the order is marked as shipped, "
-"it can no longer be adjusted."
+msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted."
 msgstr ""
 
 #: order/templates/order/sales_order_ship.html:12
@@ -3011,87 +3238,87 @@ msgstr ""
 msgid "No lines specified"
 msgstr ""
 
-#: order/views.py:1060
+#: order/views.py:1069
 #, python-brace-format
 msgid "Ordered {n} parts"
 msgstr ""
 
-#: order/views.py:1117
+#: order/views.py:1129
 msgid "Supplier part must be specified"
 msgstr ""
 
-#: order/views.py:1123
+#: order/views.py:1135
 msgid "Supplier must match for Part and Order"
 msgstr ""
 
-#: order/views.py:1242 order/views.py:1260
+#: order/views.py:1254 order/views.py:1272
 msgid "Edit Line Item"
 msgstr ""
 
-#: order/views.py:1276 order/views.py:1288
+#: order/views.py:1288 order/views.py:1300
 msgid "Delete Line Item"
 msgstr ""
 
-#: order/views.py:1281 order/views.py:1293
+#: order/views.py:1293 order/views.py:1305
 msgid "Deleted line item"
 msgstr ""
 
-#: order/views.py:1306
+#: order/views.py:1318
 msgid "Allocate Serial Numbers"
 msgstr ""
 
-#: order/views.py:1351
+#: order/views.py:1363
 #, python-brace-format
 msgid "Allocated {n} items"
 msgstr ""
 
-#: order/views.py:1367
+#: order/views.py:1379
 msgid "Select line item"
 msgstr ""
 
-#: order/views.py:1398
+#: order/views.py:1410
 msgid "No matching item for serial"
 msgstr ""
 
-#: order/views.py:1408
+#: order/views.py:1420
 msgid "is not in stock"
 msgstr ""
 
-#: order/views.py:1416
+#: order/views.py:1428
 msgid "already allocated to an order"
 msgstr ""
 
-#: order/views.py:1470
+#: order/views.py:1482
 msgid "Allocate Stock to Order"
 msgstr ""
 
-#: order/views.py:1544
+#: order/views.py:1556
 msgid "Edit Allocation Quantity"
 msgstr ""
 
-#: order/views.py:1559
+#: order/views.py:1571
 msgid "Remove allocation"
 msgstr ""
 
 #: part/bom.py:138 part/models.py:72 part/models.py:762
-#: part/templates/part/category.html:62 part/templates/part/detail.html:90
+#: part/templates/part/category.html:66 part/templates/part/detail.html:90
 msgid "Default Location"
 msgstr ""
 
-#: part/bom.py:139 part/templates/part/part_base.html:116
+#: part/bom.py:139 part/templates/part/part_base.html:117
 msgid "Available Stock"
 msgstr ""
 
-#: part/bom.py:278
+#: part/bom.py:379
 #, python-brace-format
 msgid "Unsupported file format: {f}"
 msgstr ""
 
-#: part/bom.py:283
+#: part/bom.py:384
 msgid "Error reading BOM file (invalid data)"
 msgstr ""
 
-#: part/bom.py:285
+#: part/bom.py:386
 msgid "Error reading BOM file (incorrect row size)"
 msgstr ""
 
@@ -3136,94 +3363,102 @@ msgid "Include part stock data in exported BOM"
 msgstr ""
 
 #: part/forms.py:99
-msgid "Include Supplier Data"
+msgid "Include Manufacturer Data"
 msgstr ""
 
 #: part/forms.py:99
+msgid "Include part manufacturer data in exported BOM"
+msgstr ""
+
+#: part/forms.py:101
+msgid "Include Supplier Data"
+msgstr ""
+
+#: part/forms.py:101
 msgid "Include part supplier data in exported BOM"
 msgstr ""
 
-#: part/forms.py:120 part/models.py:2057
+#: part/forms.py:122 part/models.py:2077
 msgid "Parent Part"
 msgstr ""
 
-#: part/forms.py:121 part/templates/part/bom_duplicate.html:7
+#: part/forms.py:123 part/templates/part/bom_duplicate.html:7
 msgid "Select parent part to copy BOM from"
 msgstr ""
 
-#: part/forms.py:127
+#: part/forms.py:129
 msgid "Clear existing BOM items"
 msgstr ""
 
-#: part/forms.py:133
+#: part/forms.py:135
 msgid "Confirm BOM duplication"
 msgstr ""
 
-#: part/forms.py:151
+#: part/forms.py:153
 msgid "validate"
 msgstr ""
 
-#: part/forms.py:151
+#: part/forms.py:153
 msgid "Confirm that the BOM is correct"
 msgstr ""
 
-#: part/forms.py:163
+#: part/forms.py:165
 msgid "BOM file"
 msgstr ""
 
-#: part/forms.py:163
+#: part/forms.py:165
 msgid "Select BOM file to upload"
 msgstr ""
 
-#: part/forms.py:182
+#: part/forms.py:184
 msgid "Related Part"
 msgstr ""
 
-#: part/forms.py:201
+#: part/forms.py:203
 msgid "Select part category"
 msgstr ""
 
-#: part/forms.py:218
+#: part/forms.py:220
 msgid "Duplicate all BOM data for this part"
 msgstr ""
 
-#: part/forms.py:219
+#: part/forms.py:221
 msgid "Copy BOM"
 msgstr ""
 
-#: part/forms.py:224
+#: part/forms.py:226
 msgid "Duplicate all parameter data for this part"
 msgstr ""
 
-#: part/forms.py:225
+#: part/forms.py:227
 msgid "Copy Parameters"
 msgstr ""
 
-#: part/forms.py:230
+#: part/forms.py:232
 msgid "Confirm part creation"
 msgstr ""
 
-#: part/forms.py:235
+#: part/forms.py:237
 msgid "Include category parameter templates"
 msgstr ""
 
-#: part/forms.py:240
+#: part/forms.py:242
 msgid "Include parent categories parameter templates"
 msgstr ""
 
-#: part/forms.py:320
+#: part/forms.py:322
 msgid "Add parameter template to same level categories"
 msgstr ""
 
-#: part/forms.py:324
+#: part/forms.py:326
 msgid "Add parameter template to all categories"
 msgstr ""
 
-#: part/forms.py:342 part/models.py:2151
+#: part/forms.py:344 part/models.py:2171
 msgid "Sub part"
 msgstr ""
 
-#: part/forms.py:370
+#: part/forms.py:372
 msgid "Input quantity for price calculation"
 msgstr ""
 
@@ -3239,15 +3474,15 @@ msgstr ""
 msgid "Default keywords for parts in this category"
 msgstr ""
 
-#: part/models.py:82 part/models.py:2103
-#: part/templates/part/part_app_base.html:9
+#: part/models.py:82 part/models.py:2123
+#: part/templates/part/part_app_base.html:10
 msgid "Part Category"
 msgstr ""
 
-#: part/models.py:83 part/templates/part/category.html:19
-#: part/templates/part/category.html:90 part/templates/part/category.html:141
-#: templates/InvenTree/search.html:126 templates/stats.html:63
-#: users/models.py:37
+#: part/models.py:83 part/templates/part/category.html:23
+#: part/templates/part/category.html:94 part/templates/part/category.html:141
+#: templates/InvenTree/search.html:127 templates/stats.html:63
+#: users/models.py:39
 msgid "Part Categories"
 msgstr ""
 
@@ -3300,7 +3535,7 @@ msgstr ""
 msgid "Part description"
 msgstr ""
 
-#: part/models.py:716 part/templates/part/category.html:69
+#: part/models.py:716 part/templates/part/category.html:73
 #: part/templates/part/detail.html:67
 msgid "Keywords"
 msgstr ""
@@ -3309,8 +3544,8 @@ msgstr ""
 msgid "Part keywords to improve visibility in search results"
 msgstr ""
 
-#: part/models.py:724 part/models.py:2102 part/templates/part/detail.html:73
-#: part/templates/part/set_category.html:15 templates/js/part.js:384
+#: part/models.py:724 part/models.py:2122 part/templates/part/detail.html:73
+#: part/templates/part/set_category.html:15 templates/js/part.js:385
 msgid "Category"
 msgstr ""
 
@@ -3319,7 +3554,7 @@ msgid "Part category"
 msgstr ""
 
 #: part/models.py:730 part/templates/part/detail.html:28
-#: part/templates/part/part_base.html:93 templates/js/part.js:160
+#: part/templates/part/part_base.html:94 templates/js/part.js:161
 msgid "IPN"
 msgstr ""
 
@@ -3332,7 +3567,7 @@ msgid "Part revision or version number"
 msgstr ""
 
 #: part/models.py:738 part/templates/part/detail.html:35 report/models.py:198
-#: templates/js/part.js:164
+#: templates/js/part.js:165
 msgid "Revision"
 msgstr ""
 
@@ -3364,7 +3599,7 @@ msgstr ""
 msgid "Minimum allowed stock level"
 msgstr ""
 
-#: part/models.py:828 part/models.py:2031 part/templates/part/detail.html:106
+#: part/models.py:828 part/models.py:2051 part/templates/part/detail.html:106
 #: part/templates/part/params.html:29
 msgid "Units"
 msgstr ""
@@ -3395,7 +3630,7 @@ msgstr ""
 
 #: part/models.py:861 part/templates/part/detail.html:227
 #: templates/js/table_filters.js:20 templates/js/table_filters.js:60
-#: templates/js/table_filters.js:214 templates/js/table_filters.js:283
+#: templates/js/table_filters.js:236 templates/js/table_filters.js:305
 msgid "Active"
 msgstr ""
 
@@ -3431,170 +3666,168 @@ msgstr ""
 msgid "Creation User"
 msgstr ""
 
-#: part/models.py:1929
+#: part/models.py:1949
 msgid "Test templates can only be created for trackable parts"
 msgstr ""
 
-#: part/models.py:1946
+#: part/models.py:1966
 msgid "Test with this name already exists for this part"
 msgstr ""
 
-#: part/models.py:1966 templates/js/part.js:561 templates/js/stock.js:104
+#: part/models.py:1986 templates/js/part.js:638 templates/js/stock.js:104
 msgid "Test Name"
 msgstr ""
 
-#: part/models.py:1967
+#: part/models.py:1987
 msgid "Enter a name for the test"
 msgstr ""
 
-#: part/models.py:1972
+#: part/models.py:1992
 msgid "Test Description"
 msgstr ""
 
-#: part/models.py:1973
+#: part/models.py:1993
 msgid "Enter description for this test"
 msgstr ""
 
-#: part/models.py:1978 templates/js/part.js:570
-#: templates/js/table_filters.js:200
+#: part/models.py:1998 templates/js/part.js:647
+#: templates/js/table_filters.js:222
 msgid "Required"
 msgstr ""
 
-#: part/models.py:1979
+#: part/models.py:1999
 msgid "Is this test required to pass?"
 msgstr ""
 
-#: part/models.py:1984 templates/js/part.js:578
+#: part/models.py:2004 templates/js/part.js:655
 msgid "Requires Value"
 msgstr ""
 
-#: part/models.py:1985
+#: part/models.py:2005
 msgid "Does this test require a value when adding a test result?"
 msgstr ""
 
-#: part/models.py:1990 templates/js/part.js:585
+#: part/models.py:2010 templates/js/part.js:662
 msgid "Requires Attachment"
 msgstr ""
 
-#: part/models.py:1991
+#: part/models.py:2011
 msgid "Does this test require a file attachment when adding a test result?"
 msgstr ""
 
-#: part/models.py:2024
+#: part/models.py:2044
 msgid "Parameter template name must be unique"
 msgstr ""
 
-#: part/models.py:2029
+#: part/models.py:2049
 msgid "Parameter Name"
 msgstr ""
 
-#: part/models.py:2031
+#: part/models.py:2051
 msgid "Parameter Units"
 msgstr ""
 
-#: part/models.py:2059 part/models.py:2108 part/models.py:2109
+#: part/models.py:2079 part/models.py:2128 part/models.py:2129
 #: templates/InvenTree/settings/category.html:62
 msgid "Parameter Template"
 msgstr ""
 
-#: part/models.py:2061
+#: part/models.py:2081
 msgid "Data"
 msgstr ""
 
-#: part/models.py:2061
+#: part/models.py:2081
 msgid "Parameter Value"
 msgstr ""
 
-#: part/models.py:2113 templates/InvenTree/settings/category.html:67
+#: part/models.py:2133 templates/InvenTree/settings/category.html:67
 msgid "Default Value"
 msgstr ""
 
-#: part/models.py:2114
+#: part/models.py:2134
 msgid "Default Parameter Value"
 msgstr ""
 
-#: part/models.py:2143
+#: part/models.py:2163
 msgid "Select parent part"
 msgstr ""
 
-#: part/models.py:2152
+#: part/models.py:2172
 msgid "Select part to be used in BOM"
 msgstr ""
 
-#: part/models.py:2158
+#: part/models.py:2178
 msgid "BOM quantity for this BOM item"
 msgstr ""
 
-#: part/models.py:2160 templates/js/bom.js:216 templates/js/bom.js:269
+#: part/models.py:2180 templates/js/bom.js:216 templates/js/bom.js:269
 msgid "Optional"
 msgstr ""
 
-#: part/models.py:2160
+#: part/models.py:2180
 msgid "This BOM item is optional"
 msgstr ""
 
-#: part/models.py:2163
+#: part/models.py:2183
 msgid "Overage"
 msgstr ""
 
-#: part/models.py:2164
+#: part/models.py:2184
 msgid "Estimated build wastage quantity (absolute or percentage)"
 msgstr ""
 
-#: part/models.py:2167
+#: part/models.py:2187
 msgid "BOM item reference"
 msgstr ""
 
-#: part/models.py:2170
+#: part/models.py:2190
 msgid "BOM item notes"
 msgstr ""
 
-#: part/models.py:2172
+#: part/models.py:2192
 msgid "Checksum"
 msgstr ""
 
-#: part/models.py:2172
+#: part/models.py:2192
 msgid "BOM line checksum"
 msgstr ""
 
-#: part/models.py:2176 templates/js/bom.js:275 templates/js/bom.js:282
+#: part/models.py:2196 templates/js/bom.js:279 templates/js/bom.js:286
 #: templates/js/table_filters.js:50
 msgid "Inherited"
 msgstr ""
 
-#: part/models.py:2177
+#: part/models.py:2197
 msgid "This BOM item is inherited by BOMs for variant parts"
 msgstr ""
 
-#: part/models.py:2253 part/views.py:1592 part/views.py:1644
+#: part/models.py:2273 part/views.py:1592 part/views.py:1644
 #: stock/models.py:260
 msgid "Quantity must be integer value for trackable parts"
 msgstr ""
 
-#: part/models.py:2262 part/models.py:2264
+#: part/models.py:2282 part/models.py:2284
 msgid "Sub part must be specified"
 msgstr ""
 
-#: part/models.py:2267
+#: part/models.py:2287
 msgid "BOM Item"
 msgstr ""
 
-#: part/models.py:2384
+#: part/models.py:2404
 msgid "Part 1"
 msgstr ""
 
-#: part/models.py:2388
+#: part/models.py:2408
 msgid "Part 2"
 msgstr ""
 
-#: part/models.py:2388
+#: part/models.py:2408
 msgid "Select Related Part"
 msgstr ""
 
-#: part/models.py:2420
-msgid ""
-"Error creating relationship: check that the part is not related to itself "
-"and that the relationship is unique"
+#: part/models.py:2440
+msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique"
 msgstr ""
 
 #: part/templates/part/allocation.html:11
@@ -3625,8 +3858,7 @@ msgstr ""
 
 #: part/templates/part/bom.html:21
 #, python-format
-msgid ""
-"The BOM for <i>%(part)s</i> was last checked by %(checker)s on %(check_date)s"
+msgid "The BOM for <i>%(part)s</i> was last checked by %(checker)s on %(check_date)s"
 msgstr ""
 
 #: part/templates/part/bom.html:25
@@ -3662,7 +3894,7 @@ msgstr ""
 msgid "Validate Bill of Materials"
 msgstr ""
 
-#: part/templates/part/bom.html:61 part/views.py:1883
+#: part/templates/part/bom.html:61 part/views.py:1887
 msgid "Export Bill of Materials"
 msgstr ""
 
@@ -3679,7 +3911,7 @@ msgid "All selected BOM items will be deleted"
 msgstr ""
 
 #: part/templates/part/bom.html:160 part/views.py:584
-#: templates/js/stock.js:1081
+#: templates/js/stock.js:1158
 msgid "Create New Part"
 msgstr ""
 
@@ -3761,8 +3993,7 @@ msgid "Requirements for BOM upload"
 msgstr ""
 
 #: part/templates/part/bom_upload/upload_file.html:21
-msgid ""
-"The BOM file must contain the required named columns as provided in the "
+msgid "The BOM file must contain the required named columns as provided in the "
 msgstr ""
 
 #: part/templates/part/bom_upload/upload_file.html:21
@@ -3779,8 +4010,7 @@ msgstr ""
 
 #: part/templates/part/bom_validate.html:6
 #, python-format
-msgid ""
-"Confirm that the Bill of Materials (BOM) is valid for:<br><i>%(part)s</i>"
+msgid "Confirm that the Bill of Materials (BOM) is valid for:<br><i>%(part)s</i>"
 msgstr ""
 
 #: part/templates/part/bom_validate.html:9
@@ -3795,39 +4025,42 @@ msgstr ""
 msgid "Start New Build"
 msgstr ""
 
-#: part/templates/part/category.html:20
+#: part/templates/part/category.html:24
 msgid "All parts"
 msgstr ""
 
-#: part/templates/part/category.html:25 part/views.py:2264
+#: part/templates/part/category.html:29 part/views.py:2282
 msgid "Create new part category"
 msgstr ""
 
-#: part/templates/part/category.html:31
+#: part/templates/part/category.html:35
 msgid "Edit part category"
 msgstr ""
 
-#: part/templates/part/category.html:36
+#: part/templates/part/category.html:40
 msgid "Delete part category"
 msgstr ""
 
-#: part/templates/part/category.html:46 part/templates/part/category.html:85
+#: part/templates/part/category.html:50 part/templates/part/category.html:89
 msgid "Category Details"
 msgstr ""
 
-#: part/templates/part/category.html:51
+#: part/templates/part/category.html:55
 msgid "Category Path"
 msgstr ""
 
-#: part/templates/part/category.html:56
+#: part/templates/part/category.html:60
 msgid "Category Description"
 msgstr ""
 
-#: part/templates/part/category.html:75
+#: part/templates/part/category.html:79
+#: part/templates/part/category_navbar.html:11
+#: part/templates/part/category_navbar.html:18
+#: part/templates/part/subcategory.html:16
 msgid "Subcategories"
 msgstr ""
 
-#: part/templates/part/category.html:80
+#: part/templates/part/category.html:84
 msgid "Parts (Including subcategories)"
 msgstr ""
 
@@ -3847,24 +4080,24 @@ msgstr ""
 msgid "Export Data"
 msgstr ""
 
-#: part/templates/part/category.html:198
+#: part/templates/part/category.html:186
 #: stock/templates/stock/location.html:192 templates/js/stock.js:709
 msgid "Create new location"
 msgstr ""
 
-#: part/templates/part/category.html:203 part/templates/part/category.html:233
+#: part/templates/part/category.html:191 part/templates/part/category.html:221
 msgid "New Category"
 msgstr ""
 
-#: part/templates/part/category.html:204
+#: part/templates/part/category.html:192
 msgid "Create new category"
 msgstr ""
 
-#: part/templates/part/category.html:234
+#: part/templates/part/category.html:222
 msgid "Create new Part Category"
 msgstr ""
 
-#: part/templates/part/category.html:240 stock/views.py:1359
+#: part/templates/part/category.html:228 stock/views.py:1359
 msgid "Create new Stock Location"
 msgstr ""
 
@@ -3873,17 +4106,12 @@ msgid "Are you sure you want to delete category"
 msgstr ""
 
 #: part/templates/part/category_delete.html:8
-#: part/templates/part/category_delete.html:25
-msgid "This category contains"
-msgstr ""
-
-#: part/templates/part/category_delete.html:8
-msgid "child categories"
+#, python-format
+msgid "This category contains %(count)s child categories"
 msgstr ""
 
 #: part/templates/part/category_delete.html:9
-msgid ""
-"If this category is deleted, these child categories will be moved to the"
+msgid "If this category is deleted, these child categories will be moved to the"
 msgstr ""
 
 #: part/templates/part/category_delete.html:11
@@ -3895,22 +4123,21 @@ msgid "top level Parts category"
 msgstr ""
 
 #: part/templates/part/category_delete.html:25
-msgid "parts"
+#, python-format
+msgid "This category contains %(count)s parts"
 msgstr ""
 
 #: part/templates/part/category_delete.html:27
-msgid ""
-"If this category is deleted, these parts will be moved to the parent category"
+#, python-format
+msgid "If this category is deleted, these parts will be moved to the parent category %(path)s"
 msgstr ""
 
 #: part/templates/part/category_delete.html:29
-msgid ""
-"If this category is deleted, these parts will be moved to the top-level "
-"category Teile"
+msgid "If this category is deleted, these parts will be moved to the top-level category Teile"
 msgstr ""
 
-#: part/templates/part/category_navbar.html:18
-#: part/templates/part/category_navbar.html:21
+#: part/templates/part/category_navbar.html:34
+#: part/templates/part/category_navbar.html:37
 #: part/templates/part/navbar.html:22
 msgid "Parameters"
 msgstr ""
@@ -3925,7 +4152,8 @@ msgid "Duplicate Part"
 msgstr ""
 
 #: part/templates/part/copy_part.html:10
-msgid "Make a copy of part"
+#, python-format
+msgid "Make a copy of part '%(full_name)s'."
 msgstr ""
 
 #: part/templates/part/copy_part.html:14
@@ -3938,8 +4166,9 @@ msgstr ""
 msgid "The new part may be a duplicate of these existing parts"
 msgstr ""
 
-#: part/templates/part/create_part.html:16
-msgid "match"
+#: part/templates/part/create_part.html:17
+#, python-format
+msgid "%(full_name)s - <i>%(desc)s</i> (%(match_per)s%% match)"
 msgstr ""
 
 #: part/templates/part/detail.html:11 part/templates/part/navbar.html:11
@@ -4022,6 +4251,19 @@ msgstr ""
 msgid "Part is not active"
 msgstr ""
 
+#: part/templates/part/manufacturer.html:11
+msgid "Part Manufacturers"
+msgstr ""
+
+#: part/templates/part/manufacturer.html:24
+msgid "Delete manufacturer parts"
+msgstr ""
+
+#: part/templates/part/manufacturer.html:53
+#: part/templates/part/supplier.html:57
+msgid "Create new manufacturer"
+msgstr ""
+
 #: part/templates/part/navbar.html:26 part/templates/part/variants.html:11
 msgid "Part Variants"
 msgstr ""
@@ -4042,28 +4284,28 @@ msgstr ""
 msgid "Used In"
 msgstr ""
 
-#: part/templates/part/navbar.html:86
+#: part/templates/part/navbar.html:92
 msgid "Sales Price Information"
 msgstr ""
 
-#: part/templates/part/navbar.html:89
+#: part/templates/part/navbar.html:95
 msgid "Sale Price"
 msgstr ""
 
-#: part/templates/part/navbar.html:100 part/templates/part/part_tests.html:10
+#: part/templates/part/navbar.html:106 part/templates/part/part_tests.html:10
 msgid "Part Test Templates"
 msgstr ""
 
-#: part/templates/part/navbar.html:103 stock/templates/stock/item_base.html:382
+#: part/templates/part/navbar.html:109 stock/templates/stock/item_base.html:398
 msgid "Tests"
 msgstr ""
 
-#: part/templates/part/navbar.html:107 part/templates/part/navbar.html:110
+#: part/templates/part/navbar.html:113 part/templates/part/navbar.html:116
 #: part/templates/part/related.html:10
 msgid "Related Parts"
 msgstr ""
 
-#: part/templates/part/navbar.html:119 part/templates/part/notes.html:12
+#: part/templates/part/navbar.html:125 part/templates/part/notes.html:12
 msgid "Part Notes"
 msgstr ""
 
@@ -4079,7 +4321,7 @@ msgstr ""
 
 #: part/templates/part/params.html:28
 #: report/templates/report/inventree_test_report_base.html:90
-#: stock/models.py:1652 templates/InvenTree/settings/header.html:8
+#: stock/models.py:1655 templates/InvenTree/settings/header.html:8
 #: templates/js/stock.js:124
 msgid "Value"
 msgstr ""
@@ -4088,11 +4330,6 @@ msgstr ""
 msgid "Edit"
 msgstr ""
 
-#: part/templates/part/params.html:44 part/templates/part/related.html:44
-#: part/templates/part/supplier.html:22 stock/views.py:1002 users/models.py:182
-msgid "Delete"
-msgstr ""
-
 #: part/templates/part/params.html:68
 msgid "New Template"
 msgstr ""
@@ -4101,128 +4338,130 @@ msgstr ""
 msgid "Create New Parameter Template"
 msgstr ""
 
-#: part/templates/part/part_app_base.html:11
+#: part/templates/part/part_app_base.html:12
 msgid "Part List"
 msgstr ""
 
-#: part/templates/part/part_base.html:17
-msgid "This part is a variant of"
+#: part/templates/part/part_base.html:18
+#, python-format
+msgid "This part is a variant of %(link)s"
 msgstr ""
 
-#: part/templates/part/part_base.html:32 templates/js/company.js:155
-#: templates/js/part.js:75 templates/js/part.js:152
+#: part/templates/part/part_base.html:33 templates/js/company.js:156
+#: templates/js/company.js:254 templates/js/part.js:76 templates/js/part.js:153
 msgid "Inactive"
 msgstr ""
 
-#: part/templates/part/part_base.html:39
+#: part/templates/part/part_base.html:40
 msgid "Star this part"
 msgstr ""
 
-#: part/templates/part/part_base.html:46
-#: stock/templates/stock/item_base.html:127
-#: stock/templates/stock/location.html:44
+#: part/templates/part/part_base.html:47
+#: stock/templates/stock/item_base.html:131
+#: stock/templates/stock/location.html:51
 msgid "Barcode actions"
 msgstr ""
 
-#: part/templates/part/part_base.html:48
-#: stock/templates/stock/item_base.html:129
-#: stock/templates/stock/location.html:46 templates/qr_button.html:1
+#: part/templates/part/part_base.html:49
+#: stock/templates/stock/item_base.html:133
+#: stock/templates/stock/location.html:53 templates/qr_button.html:1
 msgid "Show QR Code"
 msgstr ""
 
-#: part/templates/part/part_base.html:49
-#: stock/templates/stock/item_base.html:145
-#: stock/templates/stock/location.html:47
+#: part/templates/part/part_base.html:50
+#: stock/templates/stock/item_base.html:149
+#: stock/templates/stock/location.html:54
 msgid "Print Label"
 msgstr ""
 
-#: part/templates/part/part_base.html:54
+#: part/templates/part/part_base.html:55
 msgid "Show pricing information"
 msgstr ""
 
-#: part/templates/part/part_base.html:58
+#: part/templates/part/part_base.html:59
 msgid "Count part stock"
 msgstr ""
 
-#: part/templates/part/part_base.html:73
+#: part/templates/part/part_base.html:74
 msgid "Part actions"
 msgstr ""
 
-#: part/templates/part/part_base.html:76
+#: part/templates/part/part_base.html:77
 msgid "Duplicate part"
 msgstr ""
 
-#: part/templates/part/part_base.html:79
+#: part/templates/part/part_base.html:80
 msgid "Edit part"
 msgstr ""
 
-#: part/templates/part/part_base.html:82
+#: part/templates/part/part_base.html:83
 msgid "Delete part"
 msgstr ""
 
-#: part/templates/part/part_base.html:122 templates/js/table_filters.js:134
+#: part/templates/part/part_base.html:123 templates/js/table_filters.js:156
 msgid "In Stock"
 msgstr ""
 
-#: part/templates/part/part_base.html:135 templates/InvenTree/index.html:130
+#: part/templates/part/part_base.html:136 templates/InvenTree/index.html:131
 msgid "Required for Build Orders"
 msgstr ""
 
-#: part/templates/part/part_base.html:142
+#: part/templates/part/part_base.html:143
 msgid "Required for Sales Orders"
 msgstr ""
 
-#: part/templates/part/part_base.html:149
+#: part/templates/part/part_base.html:150
 msgid "Allocated to Orders"
 msgstr ""
 
-#: part/templates/part/part_base.html:164 templates/js/bom.js:296
+#: part/templates/part/part_base.html:165 templates/js/bom.js:300
 msgid "Can Build"
 msgstr ""
 
-#: part/templates/part/part_base.html:170 templates/js/part.js:417
+#: part/templates/part/part_base.html:171 templates/js/part.js:418
 msgid "Building"
 msgstr ""
 
-#: part/templates/part/part_base.html:249
+#: part/templates/part/part_base.html:250
 msgid "Calculate"
 msgstr ""
 
 #: part/templates/part/part_pricing.html:8
-msgid "Pricing information for:"
+#, python-format
+msgid "Pricing information for:<br>%(part)s."
 msgstr ""
 
-#: part/templates/part/part_pricing.html:24
+#: part/templates/part/part_pricing.html:23
 msgid "Supplier Pricing"
 msgstr ""
 
-#: part/templates/part/part_pricing.html:28
-#: part/templates/part/part_pricing.html:54
+#: part/templates/part/part_pricing.html:27
+#: part/templates/part/part_pricing.html:53
 msgid "Unit Cost"
 msgstr ""
 
-#: part/templates/part/part_pricing.html:34
-#: part/templates/part/part_pricing.html:60
+#: part/templates/part/part_pricing.html:33
+#: part/templates/part/part_pricing.html:59
 msgid "Total Cost"
 msgstr ""
 
-#: part/templates/part/part_pricing.html:42
+#: part/templates/part/part_pricing.html:41
 msgid "No supplier pricing available"
 msgstr ""
 
-#: part/templates/part/part_pricing.html:50
+#: part/templates/part/part_pricing.html:49
 msgid "BOM Pricing"
 msgstr ""
 
-#: part/templates/part/part_pricing.html:68
+#: part/templates/part/part_pricing.html:67
 msgid "Note: BOM pricing is incomplete for this part"
 msgstr ""
 
-#: part/templates/part/part_pricing.html:75
+#: part/templates/part/part_pricing.html:74
 msgid "No BOM pricing available"
 msgstr ""
 
-#: part/templates/part/part_pricing.html:85
+#: part/templates/part/part_pricing.html:84
 msgid "No pricing information is available for this part."
 msgstr ""
 
@@ -4234,6 +4473,36 @@ msgstr ""
 msgid "Select from existing images"
 msgstr ""
 
+#: part/templates/part/partial_delete.html:7
+#, python-format
+msgid "Are you sure you want to delete part '<b>%(full_name)s</b>'?"
+msgstr ""
+
+#: part/templates/part/partial_delete.html:12
+#, python-format
+msgid "This part is used in BOMs for %(count)s other parts. If you delete this part, the BOMs for the following parts will be updated"
+msgstr ""
+
+#: part/templates/part/partial_delete.html:22
+#, python-format
+msgid "There are %(count)s stock entries defined for this part. If you delete this part, the following stock entries will also be deleted:"
+msgstr ""
+
+#: part/templates/part/partial_delete.html:33
+#, python-format
+msgid "There are %(count)s manufacturers defined for this part. If you delete this part, the following manufacturer parts will also be deleted:"
+msgstr ""
+
+#: part/templates/part/partial_delete.html:44
+#, python-format
+msgid "There are %(count)s suppliers defined for this part. If you delete this part, the following supplier parts will also be deleted:"
+msgstr ""
+
+#: part/templates/part/partial_delete.html:55
+#, python-format
+msgid "There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this part will permanently remove this tracking information."
+msgstr ""
+
 #: part/templates/part/related.html:18
 msgid "Add Related"
 msgstr ""
@@ -4259,38 +4528,23 @@ msgid "Part Stock"
 msgstr ""
 
 #: part/templates/part/stock.html:16
-msgid "Showing stock for all variants of"
+#, python-format
+msgid "Showing stock for all variants of <i>%(full_name)s</i>"
 msgstr ""
 
 #: part/templates/part/stock_count.html:7 templates/js/bom.js:239
-#: templates/js/part.js:421
+#: templates/js/part.js:422
 msgid "No Stock"
 msgstr ""
 
-#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:129
+#: part/templates/part/stock_count.html:9 templates/InvenTree/index.html:130
 msgid "Low Stock"
 msgstr ""
 
-#: part/templates/part/subcategories.html:5
-msgid "Child Categories"
-msgstr ""
-
 #: part/templates/part/supplier.html:10
 msgid "Part Suppliers"
 msgstr ""
 
-#: part/templates/part/supplier.html:22
-msgid "Delete supplier parts"
-msgstr ""
-
-#: part/templates/part/supplier.html:51
-msgid "Create new supplier"
-msgstr ""
-
-#: part/templates/part/supplier.html:57
-msgid "Create new manufacturer"
-msgstr ""
-
 #: part/templates/part/track.html:10
 msgid "Part Tracking"
 msgstr ""
@@ -4304,7 +4558,8 @@ msgid "Create new part variant"
 msgstr ""
 
 #: part/templates/part/variant_part.html:10
-msgid "Create a new variant of template"
+#, python-format
+msgid "Create a new variant of template <i>'%(full_name)s'</i>."
 msgstr ""
 
 #: part/templates/part/variants.html:19
@@ -4452,75 +4707,75 @@ msgstr ""
 msgid "Specify quantity"
 msgstr ""
 
-#: part/views.py:1933
+#: part/views.py:1939
 msgid "Confirm Part Deletion"
 msgstr ""
 
-#: part/views.py:1940
+#: part/views.py:1946
 msgid "Part was deleted"
 msgstr ""
 
-#: part/views.py:1949
+#: part/views.py:1955
 msgid "Part Pricing"
 msgstr ""
 
-#: part/views.py:2063
+#: part/views.py:2081
 msgid "Create Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2073
+#: part/views.py:2091
 msgid "Edit Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2080
+#: part/views.py:2098
 msgid "Delete Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2088
+#: part/views.py:2106
 msgid "Create Part Parameter"
 msgstr ""
 
-#: part/views.py:2138
+#: part/views.py:2156
 msgid "Edit Part Parameter"
 msgstr ""
 
-#: part/views.py:2152
+#: part/views.py:2170
 msgid "Delete Part Parameter"
 msgstr ""
 
-#: part/views.py:2212
+#: part/views.py:2230
 msgid "Edit Part Category"
 msgstr ""
 
-#: part/views.py:2250
+#: part/views.py:2268
 msgid "Delete Part Category"
 msgstr ""
 
-#: part/views.py:2256
+#: part/views.py:2274
 msgid "Part category was deleted"
 msgstr ""
 
-#: part/views.py:2308
+#: part/views.py:2326
 msgid "Create Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2409
+#: part/views.py:2427
 msgid "Edit Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2465
+#: part/views.py:2483
 msgid "Delete Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2484
+#: part/views.py:2502
 msgid "Create BOM Item"
 msgstr ""
 
-#: part/views.py:2554
+#: part/views.py:2572
 msgid "Edit BOM item"
 msgstr ""
 
-#: part/views.py:2610
+#: part/views.py:2628
 msgid "Confim BOM item deletion"
 msgstr ""
 
@@ -4622,17 +4877,17 @@ msgid "Test Results"
 msgstr ""
 
 #: report/templates/report/inventree_test_report_base.html:88
-#: stock/models.py:1640
+#: stock/models.py:1643
 msgid "Test"
 msgstr ""
 
 #: report/templates/report/inventree_test_report_base.html:89
-#: stock/models.py:1646
+#: stock/models.py:1649
 msgid "Result"
 msgstr ""
 
 #: report/templates/report/inventree_test_report_base.html:92
-#: templates/js/order.js:195 templates/js/stock.js:909
+#: templates/js/order.js:195 templates/js/stock.js:986
 msgid "Date"
 msgstr ""
 
@@ -4654,8 +4909,8 @@ msgstr ""
 msgid "Moved {n} parts to {loc}"
 msgstr ""
 
-#: stock/forms.py:114 stock/forms.py:406 stock/models.py:473
-#: stock/templates/stock/item_base.html:349 templates/js/stock.js:656
+#: stock/forms.py:114 stock/forms.py:406 stock/models.py:475
+#: stock/templates/stock/item_base.html:365 templates/js/stock.js:656
 msgid "Expiry Date"
 msgstr ""
 
@@ -4668,9 +4923,7 @@ msgid "Enter unique serial numbers (or leave blank)"
 msgstr ""
 
 #: stock/forms.py:169
-msgid ""
-"Destination for serialized stock (by default, will remain in current "
-"location)"
+msgid "Destination for serialized stock (by default, will remain in current location)"
 msgstr ""
 
 #: stock/forms.py:171
@@ -4689,7 +4942,8 @@ msgstr ""
 msgid "Select test report template"
 msgstr ""
 
-#: stock/forms.py:267 templates/js/table_filters.js:111
+#: stock/forms.py:267 templates/js/table_filters.js:70
+#: templates/js/table_filters.js:133
 msgid "Include sublocations"
 msgstr ""
 
@@ -4745,11 +4999,11 @@ msgstr ""
 msgid "Set the destination as the default location for selected parts"
 msgstr ""
 
-#: stock/models.py:54 stock/models.py:511
+#: stock/models.py:54 stock/models.py:513
 msgid "Owner"
 msgstr ""
 
-#: stock/models.py:55 stock/models.py:512
+#: stock/models.py:55 stock/models.py:514
 msgid "Select Owner"
 msgstr ""
 
@@ -4786,203 +5040,202 @@ msgstr ""
 msgid "Build reference does not point to the same part object"
 msgstr ""
 
-#: stock/models.py:363
+#: stock/models.py:365
 msgid "Parent Stock Item"
 msgstr ""
 
-#: stock/models.py:372
+#: stock/models.py:374
 msgid "Base part"
 msgstr ""
 
-#: stock/models.py:381
+#: stock/models.py:383
 msgid "Select a matching supplier part for this stock item"
 msgstr ""
 
-#: stock/models.py:386 stock/templates/stock/stock_app_base.html:7
+#: stock/models.py:388 stock/templates/stock/stock_app_base.html:8
 msgid "Stock Location"
 msgstr ""
 
-#: stock/models.py:389
+#: stock/models.py:391
 msgid "Where is this stock item located?"
 msgstr ""
 
-#: stock/models.py:396
+#: stock/models.py:398
 msgid "Packaging this stock item is stored in"
 msgstr ""
 
-#: stock/models.py:401 stock/templates/stock/item_base.html:255
+#: stock/models.py:403 stock/templates/stock/item_base.html:259
 msgid "Installed In"
 msgstr ""
 
-#: stock/models.py:404
+#: stock/models.py:406
 msgid "Is this item installed in another item?"
 msgstr ""
 
-#: stock/models.py:420
+#: stock/models.py:422
 msgid "Serial number for this item"
 msgstr ""
 
-#: stock/models.py:432
+#: stock/models.py:434
 msgid "Batch code for this stock item"
 msgstr ""
 
-#: stock/models.py:436
+#: stock/models.py:438
 msgid "Stock Quantity"
 msgstr ""
 
-#: stock/models.py:445
+#: stock/models.py:447
 msgid "Source Build"
 msgstr ""
 
-#: stock/models.py:447
+#: stock/models.py:449
 msgid "Build for this stock item"
 msgstr ""
 
-#: stock/models.py:458
+#: stock/models.py:460
 msgid "Source Purchase Order"
 msgstr ""
 
-#: stock/models.py:461
+#: stock/models.py:463
 msgid "Purchase order for this stock item"
 msgstr ""
 
-#: stock/models.py:467
+#: stock/models.py:469
 msgid "Destination Sales Order"
 msgstr ""
 
-#: stock/models.py:474
-msgid ""
-"Expiry date for stock item. Stock will be considered expired after this date"
+#: stock/models.py:476
+msgid "Expiry date for stock item. Stock will be considered expired after this date"
 msgstr ""
 
-#: stock/models.py:487
+#: stock/models.py:489
 msgid "Delete on deplete"
 msgstr ""
 
-#: stock/models.py:487
+#: stock/models.py:489
 msgid "Delete this Stock Item when stock is depleted"
 msgstr ""
 
-#: stock/models.py:497 stock/templates/stock/item_notes.html:13
+#: stock/models.py:499 stock/templates/stock/item_notes.html:13
 #: stock/templates/stock/navbar.html:54
 msgid "Stock Item Notes"
 msgstr ""
 
-#: stock/models.py:507
+#: stock/models.py:509
 msgid "Single unit purchase price at time of purchase"
 msgstr ""
 
-#: stock/models.py:612
+#: stock/models.py:614
 msgid "Assigned to Customer"
 msgstr ""
 
-#: stock/models.py:614
+#: stock/models.py:616
 msgid "Manually assigned to customer"
 msgstr ""
 
-#: stock/models.py:627
+#: stock/models.py:629
 msgid "Returned from customer"
 msgstr ""
 
-#: stock/models.py:629
+#: stock/models.py:631
 msgid "Returned to location"
 msgstr ""
 
-#: stock/models.py:789
+#: stock/models.py:792
 msgid "Installed into stock item"
 msgstr ""
 
-#: stock/models.py:797
+#: stock/models.py:800
 msgid "Installed stock item"
 msgstr ""
 
-#: stock/models.py:821
+#: stock/models.py:824
 msgid "Uninstalled stock item"
 msgstr ""
 
-#: stock/models.py:840
+#: stock/models.py:843
 msgid "Uninstalled into location"
 msgstr ""
 
-#: stock/models.py:941
+#: stock/models.py:944
 msgid "Part is not set as trackable"
 msgstr ""
 
-#: stock/models.py:947
+#: stock/models.py:950
 msgid "Quantity must be integer"
 msgstr ""
 
-#: stock/models.py:953
+#: stock/models.py:956
 #, python-brace-format
 msgid "Quantity must not exceed available stock quantity ({n})"
 msgstr ""
 
-#: stock/models.py:956
+#: stock/models.py:959
 msgid "Serial numbers must be a list of integers"
 msgstr ""
 
-#: stock/models.py:959
+#: stock/models.py:962
 msgid "Quantity does not match serial numbers"
 msgstr ""
 
-#: stock/models.py:991
+#: stock/models.py:994
 msgid "Add serial number"
 msgstr ""
 
-#: stock/models.py:994
+#: stock/models.py:997
 #, python-brace-format
 msgid "Serialized {n} items"
 msgstr ""
 
-#: stock/models.py:1072
+#: stock/models.py:1075
 msgid "Split from existing stock"
 msgstr ""
 
-#: stock/models.py:1110
+#: stock/models.py:1113
 msgid "StockItem cannot be moved as it is not in stock"
 msgstr ""
 
-#: stock/models.py:1553
+#: stock/models.py:1556
 msgid "Title"
 msgstr ""
 
-#: stock/models.py:1553
+#: stock/models.py:1556
 msgid "Tracking entry title"
 msgstr ""
 
-#: stock/models.py:1555
+#: stock/models.py:1558
 msgid "Entry notes"
 msgstr ""
 
-#: stock/models.py:1557
+#: stock/models.py:1560
 msgid "Link to external page for further information"
 msgstr ""
 
-#: stock/models.py:1617
+#: stock/models.py:1620
 msgid "Value must be provided for this test"
 msgstr ""
 
-#: stock/models.py:1623
+#: stock/models.py:1626
 msgid "Attachment must be uploaded for this test"
 msgstr ""
 
-#: stock/models.py:1641
+#: stock/models.py:1644
 msgid "Test name"
 msgstr ""
 
-#: stock/models.py:1647 templates/js/table_filters.js:190
+#: stock/models.py:1650 templates/js/table_filters.js:212
 msgid "Test result"
 msgstr ""
 
-#: stock/models.py:1653
+#: stock/models.py:1656
 msgid "Test output value"
 msgstr ""
 
-#: stock/models.py:1660
+#: stock/models.py:1663
 msgid "Test result attachment"
 msgstr ""
 
-#: stock/models.py:1666
+#: stock/models.py:1669
 msgid "Test notes"
 msgstr ""
 
@@ -4999,9 +5252,7 @@ msgid "Stock Item Attachments"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:24
-msgid ""
-"You are not in the list of owners of this item. This stock item cannot be "
-"edited."
+msgid "You are not in the list of owners of this item. This stock item cannot be edited."
 msgstr ""
 
 #: stock/templates/stock/item_base.html:31
@@ -5016,156 +5267,157 @@ msgstr ""
 msgid "This stock item has not passed all required tests"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:51
-msgid "This stock item is allocated to Sales Order"
+#: stock/templates/stock/item_base.html:53
+#, python-format
+msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:57
-msgid "This stock item is allocated to Build"
-msgstr ""
-
-#: stock/templates/stock/item_base.html:63
-msgid ""
-"This stock item is serialized - it has a unique serial number and the "
-"quantity cannot be adjusted."
+#: stock/templates/stock/item_base.html:61
+#, python-format
+msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:67
-msgid "This stock item cannot be deleted as it has child items"
+msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted."
 msgstr ""
 
 #: stock/templates/stock/item_base.html:71
-msgid ""
-"This stock item will be automatically deleted when all stock is depleted."
+msgid "This stock item cannot be deleted as it has child items"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:91
-#: stock/templates/stock/item_base.html:353 templates/js/table_filters.js:123
-msgid "Expired"
+#: stock/templates/stock/item_base.html:75
+msgid "This stock item will be automatically deleted when all stock is depleted."
 msgstr ""
 
 #: stock/templates/stock/item_base.html:95
-#: stock/templates/stock/item_base.html:355 templates/js/table_filters.js:128
+#: stock/templates/stock/item_base.html:369 templates/js/table_filters.js:145
+msgid "Expired"
+msgstr ""
+
+#: stock/templates/stock/item_base.html:99
+#: stock/templates/stock/item_base.html:371 templates/js/table_filters.js:150
 msgid "Stale"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:132 templates/js/barcode.js:309
+#: stock/templates/stock/item_base.html:136 templates/js/barcode.js:309
 #: templates/js/barcode.js:314
 msgid "Unlink Barcode"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:134
+#: stock/templates/stock/item_base.html:138
 msgid "Link Barcode"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:136 templates/stock_table.html:31
+#: stock/templates/stock/item_base.html:140 templates/stock_table.html:31
 msgid "Scan to Location"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:143
+#: stock/templates/stock/item_base.html:147
 msgid "Printing actions"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:147
+#: stock/templates/stock/item_base.html:151
 #: stock/templates/stock/item_tests.html:27
 msgid "Test Report"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:156
+#: stock/templates/stock/item_base.html:160
 msgid "Stock adjustment actions"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:160
-#: stock/templates/stock/location.html:58 templates/stock_table.html:55
+#: stock/templates/stock/item_base.html:164
+#: stock/templates/stock/location.html:65 templates/stock_table.html:57
 msgid "Count stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:163 templates/stock_table.html:53
+#: stock/templates/stock/item_base.html:167 templates/stock_table.html:55
 msgid "Add stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:166 templates/stock_table.html:54
+#: stock/templates/stock/item_base.html:170 templates/stock_table.html:56
 msgid "Remove stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:169
+#: stock/templates/stock/item_base.html:173
 msgid "Serialize stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:173
+#: stock/templates/stock/item_base.html:177
 msgid "Transfer stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:176
+#: stock/templates/stock/item_base.html:180
 msgid "Assign to customer"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:179
+#: stock/templates/stock/item_base.html:183
 msgid "Return to stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:183 templates/js/stock.js:1222
+#: stock/templates/stock/item_base.html:187 templates/js/stock.js:1299
 msgid "Uninstall stock item"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:183
+#: stock/templates/stock/item_base.html:187
 msgid "Uninstall"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:192
-#: stock/templates/stock/location.html:55
+#: stock/templates/stock/item_base.html:196
+#: stock/templates/stock/location.html:62
 msgid "Stock actions"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:195
+#: stock/templates/stock/item_base.html:199
 msgid "Convert to variant"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:198
+#: stock/templates/stock/item_base.html:202
 msgid "Duplicate stock item"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:200
+#: stock/templates/stock/item_base.html:204
 msgid "Edit stock item"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:203
+#: stock/templates/stock/item_base.html:207
 msgid "Delete stock item"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:215
+#: stock/templates/stock/item_base.html:219
 msgid "Stock Item Details"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:274 templates/js/build.js:442
+#: stock/templates/stock/item_base.html:278 templates/js/build.js:498
 msgid "No location set"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:281
+#: stock/templates/stock/item_base.html:285
 msgid "Barcode Identifier"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:323
+#: stock/templates/stock/item_base.html:327
 msgid "Parent Item"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:353
-msgid "This StockItem expired on"
-msgstr ""
-
-#: stock/templates/stock/item_base.html:355
-msgid "This StockItem expires on"
-msgstr ""
-
-#: stock/templates/stock/item_base.html:362 templates/js/stock.js:662
-msgid "Last Updated"
-msgstr ""
-
-#: stock/templates/stock/item_base.html:367
-msgid "Last Stocktake"
+#: stock/templates/stock/item_base.html:369
+#, python-format
+msgid "This StockItem expired on %(item.expiry_date)s"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:371
+#, python-format
+msgid "This StockItem expires on %(item.expiry_date)s"
+msgstr ""
+
+#: stock/templates/stock/item_base.html:378 templates/js/stock.js:662
+msgid "Last Updated"
+msgstr ""
+
+#: stock/templates/stock/item_base.html:383
+msgid "Last Stocktake"
+msgstr ""
+
+#: stock/templates/stock/item_base.html:387
 msgid "No stocktake performed"
 msgstr ""
 
@@ -5181,6 +5433,11 @@ msgstr ""
 msgid "Are you sure you want to delete this stock item?"
 msgstr ""
 
+#: stock/templates/stock/item_delete.html:12
+#, python-format
+msgid "This will remove <b>%(qty)s</b> units of <b>%(full_name)s</b> from stock."
+msgstr ""
+
 #: stock/templates/stock/item_install.html:7
 msgid "Install another StockItem into this item."
 msgstr ""
@@ -5223,54 +5480,55 @@ msgstr ""
 msgid "Add Test Data"
 msgstr ""
 
-#: stock/templates/stock/location.html:13
-msgid ""
-"You are not in the list of owners of this location. This stock location "
-"cannot be edited."
+#: stock/templates/stock/location.html:20
+msgid "You are not in the list of owners of this location. This stock location cannot be edited."
 msgstr ""
 
-#: stock/templates/stock/location.html:30
+#: stock/templates/stock/location.html:37
 msgid "All stock items"
 msgstr ""
 
-#: stock/templates/stock/location.html:48
+#: stock/templates/stock/location.html:55
 msgid "Check-in Items"
 msgstr ""
 
-#: stock/templates/stock/location.html:64
+#: stock/templates/stock/location.html:71
 msgid "Location actions"
 msgstr ""
 
-#: stock/templates/stock/location.html:66
+#: stock/templates/stock/location.html:73
 msgid "Edit location"
 msgstr ""
 
-#: stock/templates/stock/location.html:68
+#: stock/templates/stock/location.html:75
 msgid "Delete location"
 msgstr ""
 
-#: stock/templates/stock/location.html:80
+#: stock/templates/stock/location.html:87
 msgid "Location Details"
 msgstr ""
 
-#: stock/templates/stock/location.html:85
+#: stock/templates/stock/location.html:92
 msgid "Location Path"
 msgstr ""
 
-#: stock/templates/stock/location.html:90
+#: stock/templates/stock/location.html:97
 msgid "Location Description"
 msgstr ""
 
-#: stock/templates/stock/location.html:95
+#: stock/templates/stock/location.html:102
+#: stock/templates/stock/location_navbar.html:11
+#: stock/templates/stock/location_navbar.html:18
+#: stock/templates/stock/sublocation.html:16
 msgid "Sublocations"
 msgstr ""
 
-#: stock/templates/stock/location.html:105
+#: stock/templates/stock/location.html:112
 msgid "Stock Details"
 msgstr ""
 
-#: stock/templates/stock/location.html:110 templates/InvenTree/search.html:263
-#: templates/stats.html:76 users/models.py:39
+#: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279
+#: templates/stats.html:76 users/models.py:41
 msgid "Stock Locations"
 msgstr ""
 
@@ -5278,18 +5536,6 @@ msgstr ""
 msgid "Are you sure you want to delete this stock location?"
 msgstr ""
 
-#: stock/templates/stock/location_list.html:6
-msgid "Sub-Locations"
-msgstr ""
-
-#. Translators: pluralize with counter
-#: stock/templates/stock/location_list.html:17
-#, python-format
-msgid "%(counter)s Item"
-msgid_plural "%(counter)s Items"
-msgstr[0] ""
-msgstr[1] ""
-
 #: stock/templates/stock/navbar.html:11
 msgid "Stock Item Tracking"
 msgstr ""
@@ -5314,7 +5560,7 @@ msgstr ""
 msgid "Remove item"
 msgstr ""
 
-#: stock/templates/stock/stock_app_base.html:15
+#: stock/templates/stock/stock_app_base.html:16
 msgid "Loading..."
 msgstr ""
 
@@ -5327,7 +5573,8 @@ msgid "Convert Stock Item"
 msgstr ""
 
 #: stock/templates/stock/stockitem_convert.html:8
-msgid "This stock item is current an instance of "
+#, python-format
+msgid "This stock item is current an instance of <i>%(part)s</i>"
 msgstr ""
 
 #: stock/templates/stock/stockitem_convert.html:9
@@ -5338,6 +5585,18 @@ msgstr ""
 msgid "This action cannot be easily undone"
 msgstr ""
 
+#: stock/templates/stock/sublocation.html:23 templates/stock_table.html:37
+msgid "Printing Actions"
+msgstr ""
+
+#: stock/templates/stock/sublocation.html:27 templates/stock_table.html:41
+msgid "Print labels"
+msgstr ""
+
+#: stock/templates/stock/tracking_delete.html:6
+msgid "Are you sure you want to delete this stock tracking entry?"
+msgstr ""
+
 #: stock/views.py:123
 msgid "Edit Stock Location"
 msgstr ""
@@ -5455,7 +5714,7 @@ msgstr ""
 msgid "Add Stock Items"
 msgstr ""
 
-#: stock/views.py:1001 users/models.py:178
+#: stock/views.py:1001 users/models.py:183
 msgid "Add"
 msgstr ""
 
@@ -5517,7 +5776,7 @@ msgstr ""
 msgid "Serialize Stock"
 msgstr ""
 
-#: stock/views.py:1543 templates/js/build.js:210
+#: stock/views.py:1543 templates/js/build.js:244
 msgid "Create new Stock Item"
 msgstr ""
 
@@ -5565,74 +5824,99 @@ msgstr ""
 msgid "The requested page does not exist"
 msgstr ""
 
-#: templates/InvenTree/index.html:6
+#: templates/InvenTree/index.html:7
 msgid "Index"
 msgstr ""
 
-#: templates/InvenTree/index.html:97
+#: templates/InvenTree/index.html:98
 msgid "Starred Parts"
 msgstr ""
 
-#: templates/InvenTree/index.html:98
+#: templates/InvenTree/index.html:99
 msgid "Latest Parts"
 msgstr ""
 
-#: templates/InvenTree/index.html:99
+#: templates/InvenTree/index.html:100
 msgid "BOM Waiting Validation"
 msgstr ""
 
-#: templates/InvenTree/index.html:128
+#: templates/InvenTree/index.html:129
 msgid "Recently Updated"
 msgstr ""
 
-#: templates/InvenTree/index.html:144
+#: templates/InvenTree/index.html:145
 msgid "Expired Stock"
 msgstr ""
 
-#: templates/InvenTree/index.html:145
+#: templates/InvenTree/index.html:146
 msgid "Stale Stock"
 msgstr ""
 
-#: templates/InvenTree/index.html:183
+#: templates/InvenTree/index.html:184
 msgid "Build Orders In Progress"
 msgstr ""
 
-#: templates/InvenTree/index.html:184
+#: templates/InvenTree/index.html:185
 msgid "Overdue Build Orders"
 msgstr ""
 
-#: templates/InvenTree/index.html:205
+#: templates/InvenTree/index.html:206
 msgid "Outstanding Purchase Orders"
 msgstr ""
 
-#: templates/InvenTree/index.html:206
+#: templates/InvenTree/index.html:207
 msgid "Overdue Purchase Orders"
 msgstr ""
 
-#: templates/InvenTree/index.html:228
+#: templates/InvenTree/index.html:229
 msgid "Outstanding Sales Orders"
 msgstr ""
 
-#: templates/InvenTree/index.html:229
+#: templates/InvenTree/index.html:230
 msgid "Overdue Sales Orders"
 msgstr ""
 
-#: templates/InvenTree/search.html:7 templates/InvenTree/search.html:13
+#: templates/InvenTree/search.html:8 templates/InvenTree/search.html:14
 msgid "Search Results"
 msgstr ""
 
-#: templates/InvenTree/search.html:23
+#: templates/InvenTree/search.html:24
 msgid "Enter a search query"
 msgstr ""
 
-#: templates/InvenTree/search.html:252 templates/js/stock.js:300
+#: templates/InvenTree/search.html:268 templates/js/stock.js:300
 msgid "Shipped to customer"
 msgstr ""
 
-#: templates/InvenTree/search.html:255 templates/js/stock.js:310
+#: templates/InvenTree/search.html:271 templates/js/stock.js:310
 msgid "No stock location set"
 msgstr ""
 
+#: templates/InvenTree/settings/appearance.html:10
+msgid "Theme Settings"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:17
+msgid "Color Themes"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:29
+#, python-format
+msgid ""
+"\n"
+"        The CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
+"        Please select another color theme :)\n"
+"    "
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:39
+msgid "Language"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:61
+msgid "Set Language"
+msgstr ""
+
 #: templates/InvenTree/settings/build.html:10
 msgid "Build Order Settings"
 msgstr ""
@@ -5663,7 +5947,7 @@ msgstr ""
 msgid "Global InvenTree Settings"
 msgstr ""
 
-#: templates/InvenTree/settings/global.html:26
+#: templates/InvenTree/settings/global.html:27
 msgid "Barcode Settings"
 msgstr ""
 
@@ -5703,8 +5987,8 @@ msgstr ""
 msgid "Edit setting"
 msgstr ""
 
-#: templates/InvenTree/settings/settings.html:7
-#: templates/InvenTree/settings/settings.html:13 templates/navbar.html:78
+#: templates/InvenTree/settings/settings.html:8
+#: templates/InvenTree/settings/settings.html:14 templates/navbar.html:84
 msgid "Settings"
 msgstr ""
 
@@ -5716,7 +6000,7 @@ msgstr ""
 msgid "Stock Settings"
 msgstr ""
 
-#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:48
+#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:50
 msgid "Stock Options"
 msgstr ""
 
@@ -5730,7 +6014,7 @@ msgid "Account"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:9
-msgid "Theme"
+msgid "Appearance"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:13
@@ -5749,24 +6033,6 @@ msgstr ""
 msgid "Categories"
 msgstr ""
 
-#: templates/InvenTree/settings/theme.html:10
-msgid "Theme Settings"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:17
-msgid "Color Themes"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:29
-#, python-format
-msgid ""
-"\n"
-"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected "
-"color theme was not found.<br>\n"
-"\t\tPlease select another color theme :)\n"
-"\t"
-msgstr ""
-
 #: templates/InvenTree/settings/user.html:16
 msgid "User Information"
 msgstr ""
@@ -5776,7 +6042,7 @@ msgid "Change Password"
 msgstr ""
 
 #: templates/InvenTree/settings/user.html:28
-#: templates/registration/login.html:58
+#: templates/registration/login.html:59
 msgid "Username"
 msgstr ""
 
@@ -5829,13 +6095,23 @@ msgid "View Code on GitHub"
 msgstr ""
 
 #: templates/about.html:63
-msgid "Get the App"
+msgid "Credits"
 msgstr ""
 
 #: templates/about.html:68
+msgid "Mobile App"
+msgstr ""
+
+#: templates/about.html:73
 msgid "Submit Bug Report"
 msgstr ""
 
+#: templates/about.html:82 templates/js/modals.js:550
+#: templates/js/modals.js:809 templates/modals.html:28 templates/modals.html:52
+#: templates/modals.html:93
+msgid "Close"
+msgstr ""
+
 #: templates/attachment_table.html:6
 msgid "Add Attachment"
 msgstr ""
@@ -5913,8 +6189,7 @@ msgid "Link Barcode to Stock Item"
 msgstr ""
 
 #: templates/js/barcode.js:311
-msgid ""
-"This will remove the association between this stock item and the barcode"
+msgid "This will remove the association between this stock item and the barcode"
 msgstr ""
 
 #: templates/js/barcode.js:317
@@ -5961,7 +6236,7 @@ msgstr ""
 msgid "Barcode does not match a valid location"
 msgstr ""
 
-#: templates/js/bom.js:175 templates/js/build.js:934
+#: templates/js/bom.js:175 templates/js/build.js:994
 msgid "Open subassembly"
 msgstr ""
 
@@ -5969,77 +6244,88 @@ msgstr ""
 msgid "No pricing available"
 msgstr ""
 
-#: templates/js/bom.js:286 templates/js/bom.js:372
+#: templates/js/bom.js:272 templates/js/filters.js:167
+#: templates/js/filters.js:397
+msgid "true"
+msgstr ""
+
+#: templates/js/bom.js:273 templates/js/filters.js:171
+#: templates/js/filters.js:398
+msgid "false"
+msgstr ""
+
+#: templates/js/bom.js:290 templates/js/bom.js:376
 msgid "View BOM"
 msgstr ""
 
-#: templates/js/bom.js:346
+#: templates/js/bom.js:350
 msgid "Validate BOM Item"
 msgstr ""
 
-#: templates/js/bom.js:348
+#: templates/js/bom.js:352
 msgid "This line has been validated"
 msgstr ""
 
-#: templates/js/bom.js:350
+#: templates/js/bom.js:354
 msgid "Edit BOM Item"
 msgstr ""
 
-#: templates/js/bom.js:352
+#: templates/js/bom.js:356
 msgid "Delete BOM Item"
 msgstr ""
 
-#: templates/js/bom.js:443 templates/js/build.js:305 templates/js/build.js:1032
+#: templates/js/bom.js:447 templates/js/build.js:340 templates/js/build.js:1092
 msgid "No BOM items found"
 msgstr ""
 
-#: templates/js/build.js:56
+#: templates/js/build.js:62
 msgid "Auto-allocate stock items to this output"
 msgstr ""
 
-#: templates/js/build.js:62
-msgid "Complete build output"
-msgstr ""
-
-#: templates/js/build.js:71
+#: templates/js/build.js:70
 msgid "Unallocate stock from build output"
 msgstr ""
 
-#: templates/js/build.js:77
+#: templates/js/build.js:80
+msgid "Complete build output"
+msgstr ""
+
+#: templates/js/build.js:89
 msgid "Delete build output"
 msgstr ""
 
-#: templates/js/build.js:209 templates/stock_table.html:20
+#: templates/js/build.js:243 templates/stock_table.html:20
 msgid "New Stock Item"
 msgstr ""
 
-#: templates/js/build.js:493
+#: templates/js/build.js:549
 msgid "Required Part"
 msgstr ""
 
-#: templates/js/build.js:514
+#: templates/js/build.js:570
 msgid "Quantity Per"
 msgstr ""
 
-#: templates/js/build.js:582 templates/js/build.js:996
-#: templates/stock_table.html:57
+#: templates/js/build.js:638 templates/js/build.js:1056
+#: templates/stock_table.html:59
 msgid "Order stock"
 msgstr ""
 
-#: templates/js/build.js:632
+#: templates/js/build.js:691
 msgid "No builds matching query"
 msgstr ""
 
-#: templates/js/build.js:649 templates/js/part.js:323 templates/js/stock.js:511
-#: templates/js/stock.js:1254
+#: templates/js/build.js:708 templates/js/part.js:324 templates/js/part.js:546
+#: templates/js/stock.js:511 templates/js/stock.js:938
+#: templates/js/stock.js:1331
 msgid "Select"
 msgstr ""
 
-#: templates/js/build.js:669
+#: templates/js/build.js:728
 msgid "Build order is overdue"
 msgstr ""
 
-#: templates/js/build.js:767
+#: templates/js/build.js:827
 msgid "No parts allocated for"
 msgstr ""
 
@@ -6056,17 +6342,23 @@ msgid "No company information found"
 msgstr ""
 
 #: templates/js/company.js:129
-msgid "No supplier parts found"
+msgid "No manufacturer parts found"
 msgstr ""
 
-#: templates/js/company.js:147 templates/js/part.js:59 templates/js/part.js:144
+#: templates/js/company.js:148 templates/js/company.js:246
+#: templates/js/part.js:60 templates/js/part.js:145
 msgid "Template part"
 msgstr ""
 
-#: templates/js/company.js:151 templates/js/part.js:63 templates/js/part.js:148
+#: templates/js/company.js:152 templates/js/company.js:250
+#: templates/js/part.js:64 templates/js/part.js:149
 msgid "Assembled part"
 msgstr ""
 
+#: templates/js/company.js:227
+msgid "No supplier parts found"
+msgstr ""
+
 #: templates/js/filters.js:193
 msgid "Select filter"
 msgstr ""
@@ -6148,11 +6440,6 @@ msgstr ""
 msgid "Submit"
 msgstr ""
 
-#: templates/js/modals.js:550 templates/js/modals.js:809
-#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93
-msgid "Close"
-msgstr ""
-
 #: templates/js/modals.js:760
 msgid "Invalid response from server"
 msgstr ""
@@ -6233,59 +6520,63 @@ msgstr ""
 msgid "No sales orders found"
 msgstr ""
 
-#: templates/js/part.js:51 templates/js/part.js:136
+#: templates/js/part.js:52 templates/js/part.js:137
 msgid "Trackable part"
 msgstr ""
 
-#: templates/js/part.js:55 templates/js/part.js:140
+#: templates/js/part.js:56 templates/js/part.js:141
 msgid "Virtual part"
 msgstr ""
 
-#: templates/js/part.js:67
+#: templates/js/part.js:68
 msgid "Starred part"
 msgstr ""
 
-#: templates/js/part.js:71
+#: templates/js/part.js:72
 msgid "Salable part"
 msgstr ""
 
-#: templates/js/part.js:185
+#: templates/js/part.js:186
 msgid "No variants found"
 msgstr ""
 
-#: templates/js/part.js:271 templates/js/part.js:451
+#: templates/js/part.js:272 templates/js/part.js:452
 msgid "No parts found"
 msgstr ""
 
-#: templates/js/part.js:390
+#: templates/js/part.js:391
 msgid "No category"
 msgstr ""
 
-#: templates/js/part.js:408 templates/js/table_filters.js:296
+#: templates/js/part.js:409 templates/js/table_filters.js:318
 msgid "Low stock"
 msgstr ""
 
-#: templates/js/part.js:511
+#: templates/js/part.js:571 templates/js/stock.js:962
+msgid "Path"
+msgstr ""
+
+#: templates/js/part.js:588
 msgid "YES"
 msgstr ""
 
-#: templates/js/part.js:513
+#: templates/js/part.js:590
 msgid "NO"
 msgstr ""
 
-#: templates/js/part.js:547
+#: templates/js/part.js:624
 msgid "No test templates matching query"
 msgstr ""
 
-#: templates/js/part.js:598 templates/js/stock.js:75
+#: templates/js/part.js:675 templates/js/stock.js:75
 msgid "Edit test result"
 msgstr ""
 
-#: templates/js/part.js:599 templates/js/stock.js:76
+#: templates/js/part.js:676 templates/js/stock.js:76
 msgid "Delete test result"
 msgstr ""
 
-#: templates/js/part.js:605
+#: templates/js/part.js:682
 msgid "This test is defined for a parent part"
 msgstr ""
 
@@ -6399,6 +6690,18 @@ msgstr ""
 msgid "No stock items matching query"
 msgstr ""
 
+#: templates/js/stock.js:357
+msgid "items"
+msgstr ""
+
+#: templates/js/stock.js:449
+msgid "batches"
+msgstr ""
+
+#: templates/js/stock.js:476
+msgid "locations"
+msgstr ""
+
 #: templates/js/stock.js:478
 msgid "Undefined location"
 msgstr ""
@@ -6443,7 +6746,7 @@ msgstr ""
 msgid "Stock item is destroyed"
 msgstr ""
 
-#: templates/js/stock.js:620 templates/js/table_filters.js:116
+#: templates/js/stock.js:620 templates/js/table_filters.js:138
 msgid "Depleted"
 msgstr ""
 
@@ -6467,31 +6770,31 @@ msgstr ""
 msgid "Status code must be selected"
 msgstr ""
 
-#: templates/js/stock.js:973
+#: templates/js/stock.js:1050
 msgid "No user information"
 msgstr ""
 
-#: templates/js/stock.js:983
+#: templates/js/stock.js:1060
 msgid "Edit tracking entry"
 msgstr ""
 
-#: templates/js/stock.js:984
+#: templates/js/stock.js:1061
 msgid "Delete tracking entry"
 msgstr ""
 
-#: templates/js/stock.js:1093
+#: templates/js/stock.js:1170
 msgid "Create New Location"
 msgstr ""
 
-#: templates/js/stock.js:1192
+#: templates/js/stock.js:1269
 msgid "Serial"
 msgstr ""
 
-#: templates/js/stock.js:1285 templates/js/table_filters.js:149
+#: templates/js/stock.js:1362 templates/js/table_filters.js:171
 msgid "Installed"
 msgstr ""
 
-#: templates/js/stock.js:1310
+#: templates/js/stock.js:1387
 msgid "Install item"
 msgstr ""
 
@@ -6503,148 +6806,153 @@ msgstr ""
 msgid "Validated"
 msgstr ""
 
-#: templates/js/table_filters.js:70 templates/js/table_filters.js:159
-msgid "Is Serialized"
-msgstr ""
-
-#: templates/js/table_filters.js:73 templates/js/table_filters.js:166
-msgid "Serial number GTE"
-msgstr ""
-
-#: templates/js/table_filters.js:74 templates/js/table_filters.js:167
-msgid "Serial number greater than or equal to"
-msgstr ""
-
-#: templates/js/table_filters.js:77 templates/js/table_filters.js:170
-msgid "Serial number LTE"
-msgstr ""
-
-#: templates/js/table_filters.js:78 templates/js/table_filters.js:171
-msgid "Serial number less than or equal to"
+#: templates/js/table_filters.js:71
+msgid "Include locations"
 msgstr ""
 
 #: templates/js/table_filters.js:81 templates/js/table_filters.js:82
-#: templates/js/table_filters.js:162 templates/js/table_filters.js:163
-msgid "Serial number"
-msgstr ""
-
-#: templates/js/table_filters.js:86 templates/js/table_filters.js:180
-msgid "Batch code"
-msgstr ""
-
-#: templates/js/table_filters.js:96 templates/js/table_filters.js:263
-msgid "Active parts"
-msgstr ""
-
-#: templates/js/table_filters.js:97
-msgid "Show stock for active parts"
-msgstr ""
-
-#: templates/js/table_filters.js:102
-msgid "Part is an assembly"
-msgstr ""
-
-#: templates/js/table_filters.js:106
-msgid "Is allocated"
-msgstr ""
-
-#: templates/js/table_filters.js:107
-msgid "Item has been allocated"
-msgstr ""
-
-#: templates/js/table_filters.js:112
-msgid "Include stock in sublocations"
-msgstr ""
-
-#: templates/js/table_filters.js:117
-msgid "Show stock items which are depleted"
-msgstr ""
-
-#: templates/js/table_filters.js:124
-msgid "Show stock items which have expired"
-msgstr ""
-
-#: templates/js/table_filters.js:129
-msgid "Show stock which is close to expiring"
-msgstr ""
-
-#: templates/js/table_filters.js:135
-msgid "Show items which are in stock"
-msgstr ""
-
-#: templates/js/table_filters.js:139
-msgid "In Production"
-msgstr ""
-
-#: templates/js/table_filters.js:140
-msgid "Show items which are in production"
-msgstr ""
-
-#: templates/js/table_filters.js:144
-msgid "Include Variants"
-msgstr ""
-
-#: templates/js/table_filters.js:145
-msgid "Include stock items for variant parts"
-msgstr ""
-
-#: templates/js/table_filters.js:150
-msgid "Show stock items which are installed in another item"
-msgstr ""
-
-#: templates/js/table_filters.js:154
-msgid "Sent to customer"
-msgstr ""
-
-#: templates/js/table_filters.js:155
-msgid "Show items which have been assigned to a customer"
-msgstr ""
-
-#: templates/js/table_filters.js:175 templates/js/table_filters.js:176
-msgid "Stock status"
-msgstr ""
-
-#: templates/js/table_filters.js:209
-msgid "Build status"
-msgstr ""
-
-#: templates/js/table_filters.js:228 templates/js/table_filters.js:245
-msgid "Order status"
-msgstr ""
-
-#: templates/js/table_filters.js:233 templates/js/table_filters.js:250
-msgid "Outstanding"
-msgstr ""
-
-#: templates/js/table_filters.js:273
+#: templates/js/table_filters.js:295
 msgid "Include subcategories"
 msgstr ""
 
-#: templates/js/table_filters.js:274
+#: templates/js/table_filters.js:92 templates/js/table_filters.js:181
+msgid "Is Serialized"
+msgstr ""
+
+#: templates/js/table_filters.js:95 templates/js/table_filters.js:188
+msgid "Serial number GTE"
+msgstr ""
+
+#: templates/js/table_filters.js:96 templates/js/table_filters.js:189
+msgid "Serial number greater than or equal to"
+msgstr ""
+
+#: templates/js/table_filters.js:99 templates/js/table_filters.js:192
+msgid "Serial number LTE"
+msgstr ""
+
+#: templates/js/table_filters.js:100 templates/js/table_filters.js:193
+msgid "Serial number less than or equal to"
+msgstr ""
+
+#: templates/js/table_filters.js:103 templates/js/table_filters.js:104
+#: templates/js/table_filters.js:184 templates/js/table_filters.js:185
+msgid "Serial number"
+msgstr ""
+
+#: templates/js/table_filters.js:108 templates/js/table_filters.js:202
+msgid "Batch code"
+msgstr ""
+
+#: templates/js/table_filters.js:118 templates/js/table_filters.js:285
+msgid "Active parts"
+msgstr ""
+
+#: templates/js/table_filters.js:119
+msgid "Show stock for active parts"
+msgstr ""
+
+#: templates/js/table_filters.js:124
+msgid "Part is an assembly"
+msgstr ""
+
+#: templates/js/table_filters.js:128
+msgid "Is allocated"
+msgstr ""
+
+#: templates/js/table_filters.js:129
+msgid "Item has been allocated"
+msgstr ""
+
+#: templates/js/table_filters.js:134
+msgid "Include stock in sublocations"
+msgstr ""
+
+#: templates/js/table_filters.js:139
+msgid "Show stock items which are depleted"
+msgstr ""
+
+#: templates/js/table_filters.js:146
+msgid "Show stock items which have expired"
+msgstr ""
+
+#: templates/js/table_filters.js:151
+msgid "Show stock which is close to expiring"
+msgstr ""
+
+#: templates/js/table_filters.js:157
+msgid "Show items which are in stock"
+msgstr ""
+
+#: templates/js/table_filters.js:161
+msgid "In Production"
+msgstr ""
+
+#: templates/js/table_filters.js:162
+msgid "Show items which are in production"
+msgstr ""
+
+#: templates/js/table_filters.js:166
+msgid "Include Variants"
+msgstr ""
+
+#: templates/js/table_filters.js:167
+msgid "Include stock items for variant parts"
+msgstr ""
+
+#: templates/js/table_filters.js:172
+msgid "Show stock items which are installed in another item"
+msgstr ""
+
+#: templates/js/table_filters.js:176
+msgid "Sent to customer"
+msgstr ""
+
+#: templates/js/table_filters.js:177
+msgid "Show items which have been assigned to a customer"
+msgstr ""
+
+#: templates/js/table_filters.js:197 templates/js/table_filters.js:198
+msgid "Stock status"
+msgstr ""
+
+#: templates/js/table_filters.js:231
+msgid "Build status"
+msgstr ""
+
+#: templates/js/table_filters.js:250 templates/js/table_filters.js:267
+msgid "Order status"
+msgstr ""
+
+#: templates/js/table_filters.js:255 templates/js/table_filters.js:272
+msgid "Outstanding"
+msgstr ""
+
+#: templates/js/table_filters.js:296
 msgid "Include parts in subcategories"
 msgstr ""
 
-#: templates/js/table_filters.js:278
+#: templates/js/table_filters.js:300
 msgid "Has IPN"
 msgstr ""
 
-#: templates/js/table_filters.js:279
+#: templates/js/table_filters.js:301
 msgid "Part has internal part number"
 msgstr ""
 
-#: templates/js/table_filters.js:284
+#: templates/js/table_filters.js:306
 msgid "Show active parts"
 msgstr ""
 
-#: templates/js/table_filters.js:292
+#: templates/js/table_filters.js:314
 msgid "Stock available"
 msgstr ""
 
-#: templates/js/table_filters.js:308
+#: templates/js/table_filters.js:330
 msgid "Starred"
 msgstr ""
 
-#: templates/js/table_filters.js:320
+#: templates/js/table_filters.js:342
 msgid "Purchasable"
 msgstr ""
 
@@ -6705,6 +7013,10 @@ msgstr ""
 msgid "Form errors exist"
 msgstr ""
 
+#: templates/navbar.html:13
+msgid "Toggle navigation"
+msgstr ""
+
 #: templates/navbar.html:33
 msgid "Buy"
 msgstr ""
@@ -6717,19 +7029,19 @@ msgstr ""
 msgid "Scan Barcode"
 msgstr ""
 
-#: templates/navbar.html:71 users/models.py:36
+#: templates/navbar.html:77 users/models.py:38
 msgid "Admin"
 msgstr ""
 
-#: templates/navbar.html:73
+#: templates/navbar.html:79
 msgid "Logout"
 msgstr ""
 
-#: templates/navbar.html:75 templates/registration/login.html:89
+#: templates/navbar.html:81 templates/registration/login.html:90
 msgid "Login"
 msgstr ""
 
-#: templates/navbar.html:94
+#: templates/navbar.html:104
 msgid "About InvenTree"
 msgstr ""
 
@@ -6737,73 +7049,67 @@ msgstr ""
 msgid "QR data not provided"
 msgstr ""
 
-#: templates/registration/logged_out.html:50
+#: templates/registration/logged_out.html:51
 msgid "You have been logged out"
 msgstr ""
 
-#: templates/registration/logged_out.html:51
-#: templates/registration/password_reset_complete.html:51
-#: templates/registration/password_reset_done.html:58
+#: templates/registration/logged_out.html:52
+#: templates/registration/password_reset_complete.html:52
+#: templates/registration/password_reset_done.html:59
 msgid "Return to login screen"
 msgstr ""
 
-#: templates/registration/login.html:64
+#: templates/registration/login.html:65
 msgid "Enter username"
 msgstr ""
 
-#: templates/registration/login.html:70
+#: templates/registration/login.html:71
 msgid "Password"
 msgstr ""
 
-#: templates/registration/login.html:83
+#: templates/registration/login.html:84
 msgid "Username / password combination is incorrect"
 msgstr ""
 
-#: templates/registration/login.html:95
-#: templates/registration/password_reset_form.html:51
+#: templates/registration/login.html:96
+#: templates/registration/password_reset_form.html:52
 msgid "Forgotten your password?"
 msgstr ""
 
-#: templates/registration/login.html:95
+#: templates/registration/login.html:96
 msgid "Click here to reset"
 msgstr ""
 
-#: templates/registration/password_reset_complete.html:50
+#: templates/registration/password_reset_complete.html:51
 msgid "Password reset complete"
 msgstr ""
 
-#: templates/registration/password_reset_confirm.html:52
-#: templates/registration/password_reset_confirm.html:56
+#: templates/registration/password_reset_confirm.html:53
+#: templates/registration/password_reset_confirm.html:57
 msgid "Change password"
 msgstr ""
 
-#: templates/registration/password_reset_confirm.html:60
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
+#: templates/registration/password_reset_confirm.html:61
+msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset."
 msgstr ""
 
-#: templates/registration/password_reset_done.html:51
-msgid ""
-"We've emailed you instructions for setting your password, if an account "
-"exists with the email you entered. You should receive them shortly."
+#: templates/registration/password_reset_done.html:52
+msgid "We've emailed you instructions for setting your password, if an account exists with the email you entered. You should receive them shortly."
 msgstr ""
 
-#: templates/registration/password_reset_done.html:54
-msgid ""
-"If you don't receive an email, please make sure you've entered the address "
-"you registered with, and check your spam folder."
-msgstr ""
-
-#: templates/registration/password_reset_form.html:52
-msgid "Enter your email address below."
+#: templates/registration/password_reset_done.html:55
+msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder."
 msgstr ""
 
 #: templates/registration/password_reset_form.html:53
+msgid "Enter your email address below."
+msgstr ""
+
+#: templates/registration/password_reset_form.html:54
 msgid "An email will be sent with password reset instructions."
 msgstr ""
 
-#: templates/registration/password_reset_form.html:58
+#: templates/registration/password_reset_form.html:59
 msgid "Send email"
 msgstr ""
 
@@ -6851,58 +7157,58 @@ msgstr ""
 msgid "Barcode Actions"
 msgstr ""
 
-#: templates/stock_table.html:36
-msgid "Printing Actions"
-msgstr ""
-
-#: templates/stock_table.html:40
-msgid "Print labels"
-msgstr ""
-
-#: templates/stock_table.html:42
+#: templates/stock_table.html:43
 msgid "Print test reports"
 msgstr ""
 
-#: templates/stock_table.html:53
+#: templates/stock_table.html:55
 msgid "Add to selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:54
+#: templates/stock_table.html:56
 msgid "Remove from selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:55
+#: templates/stock_table.html:57
 msgid "Stocktake selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:56
+#: templates/stock_table.html:58
 msgid "Move selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:56
+#: templates/stock_table.html:58
 msgid "Move stock"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:59
 msgid "Order selected items"
 msgstr ""
 
-#: templates/stock_table.html:58
+#: templates/stock_table.html:60
 msgid "Change status"
 msgstr ""
 
-#: templates/stock_table.html:58
+#: templates/stock_table.html:60
 msgid "Change stock status"
 msgstr ""
 
-#: templates/stock_table.html:61
+#: templates/stock_table.html:63
 msgid "Delete selected items"
 msgstr ""
 
-#: templates/stock_table.html:61
+#: templates/stock_table.html:63
 msgid "Delete Stock"
 msgstr ""
 
+#: templates/yesnolabel.html:4
+msgid "Yes"
+msgstr ""
+
+#: templates/yesnolabel.html:6
+msgid "No"
+msgstr ""
+
 #: users/admin.py:64
 msgid "Users"
 msgstr ""
@@ -6927,34 +7233,34 @@ msgstr ""
 msgid "Important dates"
 msgstr ""
 
-#: users/models.py:165
+#: users/models.py:170
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:173
+#: users/models.py:178
 msgid "Group"
 msgstr ""
 
-#: users/models.py:176
+#: users/models.py:181
 msgid "View"
 msgstr ""
 
-#: users/models.py:176
+#: users/models.py:181
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:183
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:180
+#: users/models.py:185
 msgid "Change"
 msgstr ""
 
-#: users/models.py:180
+#: users/models.py:185
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:187
 msgid "Permission to delete items"
 msgstr ""
diff --git a/InvenTree/locale/es/LC_MESSAGES/django.mo b/InvenTree/locale/es/LC_MESSAGES/django.mo
index 71cbdf3e9d8d54be31066ec4ad8628bc2c1f2845..2343941a2a4bb6c1a1b8e2cf6c46bc2766f09be7 100644
GIT binary patch
delta 91
zcmeyvbew5|3M21CRgH-;TAoG*MuxfuCb~w33I>)|#>QMeiNz(lAw`LK#W{&3`9)R=
mK#{!k(!}&s-H_D8Tq}j(g2cSc;taU3l|pK9yle2puk8Tgg&mv#

delta 161
zcmX@k^oMDJ3Zv6RRSo_CM`v$GcUOfl*Pvief4_;oTJ@2xjzPM<{<<!X3LgGezMk4q
z{(i1pK8eL8x*<i0dBr)2CHX~G3T~l3J_>%0zOD*3uD*_*J`Rp9E<vur!FE8UdFiEz
z>8ZLQsfoE(3O<g0?x7$%Y<zqiax(Sui_#HltQ5F>J$+qu!%~ZiGxPJT6bvU`C<g#N
C{xNp|

diff --git a/InvenTree/locale/es/LC_MESSAGES/django.po b/InvenTree/locale/es/LC_MESSAGES/django.po
index 28684fc524..459ce5092a 100644
--- a/InvenTree/locale/es/LC_MESSAGES/django.po
+++ b/InvenTree/locale/es/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-21 09:17+0000\n"
+"POT-Creation-Date: 2021-05-05 17:33+1000\n"
 "PO-Revision-Date: 2021-04-21 09:33\n"
 "Last-Translator: \n"
 "Language-Team: Spanish\n"
@@ -67,35 +67,36 @@ msgstr ""
 msgid "Select Category"
 msgstr ""
 
-#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344
-#: stock/views.py:1763
-msgid "Invalid quantity provided"
-msgstr ""
-
-#: InvenTree/helpers.py:378
-msgid "Empty serial number string"
-msgstr ""
-
-#: InvenTree/helpers.py:399
+#: InvenTree/helpers.py:377
 #, python-brace-format
 msgid "Duplicate serial: {n}"
 msgstr ""
 
-#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409
+#: InvenTree/helpers.py:384 order/models.py:245 order/models.py:353
+#: stock/views.py:1763
+msgid "Invalid quantity provided"
+msgstr ""
+
+#: InvenTree/helpers.py:387
+msgid "Empty serial number string"
+msgstr ""
+
+#: InvenTree/helpers.py:409 InvenTree/helpers.py:412 InvenTree/helpers.py:415
+#: InvenTree/helpers.py:440
 #, python-brace-format
 msgid "Invalid group: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:414
+#: InvenTree/helpers.py:445
 #, python-brace-format
 msgid "Duplicate serial: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:422
+#: InvenTree/helpers.py:453
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:426
+#: InvenTree/helpers.py:457
 #, python-brace-format
 msgid "Number of unique serial number ({s}) must match quantity ({q})"
 msgstr ""
@@ -140,7 +141,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_base.html:72
 #: company/templates/company/supplier_part_base.html:71
 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108
-#: order/models.py:101 order/templates/order/purchase_order_detail.html:168
+#: order/models.py:101 order/templates/order/purchase_order_detail.html:143
 #: part/models.py:710 part/templates/part/detail.html:54
 #: part/templates/part/set_category.html:14 report/models.py:192
 #: report/models.py:505 report/models.py:544
@@ -165,23 +166,23 @@ msgstr ""
 msgid "parent"
 msgstr ""
 
-#: InvenTree/settings.py:493
+#: InvenTree/settings.py:491
 msgid "English"
 msgstr ""
 
-#: InvenTree/settings.py:494
+#: InvenTree/settings.py:492
 msgid "French"
 msgstr ""
 
-#: InvenTree/settings.py:495
+#: InvenTree/settings.py:493
 msgid "German"
 msgstr ""
 
-#: InvenTree/settings.py:496
+#: InvenTree/settings.py:494
 msgid "Polish"
 msgstr ""
 
-#: InvenTree/settings.py:497
+#: InvenTree/settings.py:495
 msgid "Turkish"
 msgstr ""
 
@@ -375,16 +376,16 @@ msgstr ""
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1227
+#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1241
 #: build/templates/build/allocation_card.html:23
 #: build/templates/build/auto_allocate.html:17
 #: build/templates/build/build_base.html:123
 #: build/templates/build/detail.html:31 common/models.py:703
 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77
 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261
-#: order/forms.py:278 order/models.py:593 order/models.py:784
+#: order/forms.py:278 order/models.py:603 order/models.py:794
 #: order/templates/order/order_wizard/select_parts.html:32
-#: order/templates/order/purchase_order_detail.html:200
+#: order/templates/order/purchase_order_detail.html:175
 #: order/templates/order/sales_order_detail.html:70
 #: order/templates/order/sales_order_detail.html:77
 #: order/templates/order/sales_order_detail.html:159
@@ -458,7 +459,7 @@ msgid "Location of completed parts"
 msgstr ""
 
 #: build/forms.py:215 build/templates/build/build_base.html:128
-#: build/templates/build/detail.html:59 order/models.py:445
+#: build/templates/build/detail.html:59 order/models.py:455
 #: order/templates/order/receive_parts.html:24
 #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252
 #: templates/js/barcode.js:119 templates/js/build.js:770
@@ -508,7 +509,7 @@ msgstr ""
 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183
 #: templates/InvenTree/search.html:185
-#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
+#: templates/InvenTree/settings/tabs.html:31 users/models.py:43
 msgid "Build Orders"
 msgstr ""
 
@@ -516,8 +517,8 @@ msgstr ""
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:127 order/models.py:99 order/models.py:595
-#: order/templates/order/purchase_order_detail.html:195
+#: build/models.py:127 order/models.py:99 order/models.py:605
+#: order/templates/order/purchase_order_detail.html:170
 #: order/templates/order/sales_order_detail.html:219 part/models.py:2187
 #: report/templates/report/inventree_po_report.html:92
 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
@@ -540,10 +541,10 @@ msgstr ""
 
 #: build/models.py:152 build/templates/build/auto_allocate.html:16
 #: build/templates/build/build_base.html:118
-#: build/templates/build/detail.html:26 company/models.py:669
-#: order/models.py:637 order/models.py:669
+#: build/templates/build/detail.html:26 company/models.py:688
+#: order/models.py:647 order/models.py:679
 #: order/templates/order/order_wizard/select_parts.html:30
-#: order/templates/order/purchase_order_detail.html:156
+#: order/templates/order/purchase_order_detail.html:131
 #: order/templates/order/receive_parts.html:19
 #: order/templates/order/sales_order_detail.html:207 part/models.py:321
 #: part/models.py:1876 part/models.py:1888 part/models.py:1906
@@ -628,7 +629,7 @@ msgstr ""
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:223 order/models.py:451
+#: build/models.py:223 order/models.py:461
 msgid "Target completion date"
 msgstr ""
 
@@ -678,9 +679,9 @@ msgstr ""
 #: company/models.py:135 company/models.py:501
 #: company/templates/company/navbar.html:70
 #: company/templates/company/navbar.html:73 order/models.py:123
-#: order/models.py:597 order/templates/order/po_navbar.html:29
+#: order/models.py:607 order/templates/order/po_navbar.html:29
 #: order/templates/order/po_navbar.html:32
-#: order/templates/order/purchase_order_detail.html:234
+#: order/templates/order/purchase_order_detail.html:209
 #: order/templates/order/sales_order_detail.html:264
 #: order/templates/order/so_navbar.html:33
 #: order/templates/order/so_navbar.html:36 part/models.py:871
@@ -713,47 +714,47 @@ msgstr ""
 msgid "Completed build output"
 msgstr ""
 
-#: build/models.py:1118
+#: build/models.py:1132
 msgid "BuildItem must be unique for build, stock_item and install_into"
 msgstr ""
 
-#: build/models.py:1143
+#: build/models.py:1157
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1147
+#: build/models.py:1161
 #, python-brace-format
 msgid "Selected stock item not found in BOM for part '{p}'"
 msgstr ""
 
-#: build/models.py:1151
+#: build/models.py:1165
 #, python-brace-format
 msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
 msgstr ""
 
-#: build/models.py:1158 order/models.py:758
+#: build/models.py:1172 order/models.py:768
 msgid "StockItem is over-allocated"
 msgstr ""
 
-#: build/models.py:1162 order/models.py:761
+#: build/models.py:1176 order/models.py:771
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1166
+#: build/models.py:1180
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1206 stock/templates/stock/item_base.html:306
+#: build/models.py:1220 stock/templates/stock/item_base.html:306
 #: templates/InvenTree/search.html:183 templates/js/build.js:714
 #: templates/navbar.html:29
 msgid "Build"
 msgstr ""
 
-#: build/models.py:1207
+#: build/models.py:1221
 msgid "Build to allocate parts"
 msgstr ""
 
-#: build/models.py:1214 part/templates/part/allocation.html:18
+#: build/models.py:1228 part/templates/part/allocation.html:18
 #: part/templates/part/allocation.html:24
 #: part/templates/part/allocation.html:31
 #: part/templates/part/allocation.html:49
@@ -765,19 +766,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1215
+#: build/models.py:1229
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1228
+#: build/models.py:1242
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1236
+#: build/models.py:1250
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1237
+#: build/models.py:1251
 msgid "Destination stock item"
 msgstr ""
 
@@ -801,7 +802,7 @@ msgstr ""
 msgid "Unallocate stock"
 msgstr ""
 
-#: build/templates/build/allocate.html:26 build/views.py:308 build/views.py:794
+#: build/templates/build/allocate.html:26 build/views.py:319 build/views.py:805
 msgid "Unallocate Stock"
 msgstr ""
 
@@ -811,7 +812,7 @@ msgstr ""
 
 #: build/templates/build/allocate.html:30
 #: company/templates/company/detail_manufacturer_part.html:33
-#: company/templates/company/detail_supplier_part.html:32 order/views.py:794
+#: company/templates/company/detail_supplier_part.html:32 order/views.py:795
 #: part/templates/part/category.html:127
 msgid "Order Parts"
 msgstr ""
@@ -954,7 +955,7 @@ msgid "Progress"
 msgstr ""
 
 #: build/templates/build/build_base.html:160
-#: build/templates/build/detail.html:84 order/models.py:667
+#: build/templates/build/detail.html:84 order/models.py:677
 #: order/templates/order/sales_order_base.html:9
 #: order/templates/order/sales_order_base.html:33
 #: order/templates/order/sales_order_ship.html:25
@@ -1139,7 +1140,7 @@ msgstr ""
 msgid "Alter the quantity of stock allocated to the build output"
 msgstr ""
 
-#: build/templates/build/index.html:28 build/views.py:667
+#: build/templates/build/index.html:28 build/views.py:678
 msgid "New Build Order"
 msgstr ""
 
@@ -1226,141 +1227,145 @@ msgstr ""
 msgid "Create Build Output"
 msgstr ""
 
-#: build/views.py:173 stock/models.py:969 stock/views.py:1789
+#: build/views.py:168
+msgid "Maximum output quantity is "
+msgstr ""
+
+#: build/views.py:184 stock/models.py:969 stock/views.py:1789
 msgid "Serial numbers already exist"
 msgstr ""
 
-#: build/views.py:182
+#: build/views.py:193
 msgid "Serial numbers required for trackable build output"
 msgstr ""
 
-#: build/views.py:248
+#: build/views.py:259
 msgid "Delete Build Output"
 msgstr ""
 
-#: build/views.py:269 build/views.py:359
+#: build/views.py:280 build/views.py:370
 msgid "Confirm unallocation of build stock"
 msgstr ""
 
-#: build/views.py:270 build/views.py:360 stock/views.py:425
+#: build/views.py:281 build/views.py:371 stock/views.py:425
 msgid "Check the confirmation box"
 msgstr ""
 
-#: build/views.py:282
+#: build/views.py:293
 msgid "Build output does not match build"
 msgstr ""
 
-#: build/views.py:284 build/views.py:485
+#: build/views.py:295 build/views.py:496
 msgid "Build output must be specified"
 msgstr ""
 
-#: build/views.py:296
+#: build/views.py:307
 msgid "Build output deleted"
 msgstr ""
 
-#: build/views.py:394
+#: build/views.py:405
 msgid "Complete Build Order"
 msgstr ""
 
-#: build/views.py:400
+#: build/views.py:411
 msgid "Build order cannot be completed - incomplete outputs remain"
 msgstr ""
 
-#: build/views.py:411
+#: build/views.py:422
 msgid "Completed build order"
 msgstr ""
 
-#: build/views.py:427
+#: build/views.py:438
 msgid "Complete Build Output"
 msgstr ""
 
-#: build/views.py:469
+#: build/views.py:480
 msgid "Invalid stock status value selected"
 msgstr ""
 
-#: build/views.py:476
+#: build/views.py:487
 msgid "Quantity to complete cannot exceed build output quantity"
 msgstr ""
 
-#: build/views.py:482
+#: build/views.py:493
 msgid "Confirm completion of incomplete build"
 msgstr ""
 
-#: build/views.py:581
+#: build/views.py:592
 msgid "Build output completed"
 msgstr ""
 
-#: build/views.py:721
+#: build/views.py:732
 msgid "Created new build"
 msgstr ""
 
-#: build/views.py:742
+#: build/views.py:753
 msgid "Edit Build Order Details"
 msgstr ""
 
-#: build/views.py:775
+#: build/views.py:786
 msgid "Edited build"
 msgstr ""
 
-#: build/views.py:784
+#: build/views.py:795
 msgid "Delete Build Order"
 msgstr ""
 
-#: build/views.py:799
+#: build/views.py:810
 msgid "Removed parts from build allocation"
 msgstr ""
 
-#: build/views.py:811
+#: build/views.py:822
 msgid "Allocate stock to build output"
 msgstr ""
 
-#: build/views.py:854
+#: build/views.py:865
 msgid "Item must be currently in stock"
 msgstr ""
 
-#: build/views.py:860
+#: build/views.py:871
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/views.py:861 templates/js/bom.js:230 templates/js/build.js:575
+#: build/views.py:872 templates/js/bom.js:230 templates/js/build.js:575
 #: templates/js/build.js:838 templates/js/build.js:1021
 msgid "Available"
 msgstr ""
 
-#: build/views.py:863
+#: build/views.py:874
 msgid "Stock item must be selected"
 msgstr ""
 
-#: build/views.py:1026
+#: build/views.py:1037
 msgid "Edit Stock Allocation"
 msgstr ""
 
-#: build/views.py:1030
+#: build/views.py:1041
 msgid "Updated Build Item"
 msgstr ""
 
-#: build/views.py:1059
+#: build/views.py:1070
 msgid "Add Build Order Attachment"
 msgstr ""
 
-#: build/views.py:1072 order/views.py:110 order/views.py:162 part/views.py:172
+#: build/views.py:1083 order/views.py:110 order/views.py:162 part/views.py:172
 #: stock/views.py:277
 msgid "Added attachment"
 msgstr ""
 
-#: build/views.py:1108 order/views.py:189 order/views.py:210
+#: build/views.py:1119 order/views.py:189 order/views.py:210
 msgid "Edit Attachment"
 msgstr ""
 
-#: build/views.py:1118 order/views.py:193 order/views.py:214
+#: build/views.py:1129 order/views.py:193 order/views.py:214
 msgid "Attachment updated"
 msgstr ""
 
-#: build/views.py:1128 order/views.py:229 order/views.py:243
+#: build/views.py:1139 order/views.py:229 order/views.py:243
 msgid "Delete Attachment"
 msgstr ""
 
-#: build/views.py:1133 order/views.py:235 order/views.py:249 stock/views.py:333
+#: build/views.py:1144 order/views.py:235 order/views.py:249 stock/views.py:333
 msgid "Deleted attachment"
 msgstr ""
 
@@ -1766,7 +1771,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_detail.html:26
 #: company/templates/company/supplier_part_base.html:101
 #: company/templates/company/supplier_part_detail.html:35
-#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171
+#: order/templates/order/purchase_order_detail.html:158 part/bom.py:171
 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307
 msgid "MPN"
 msgstr ""
@@ -1865,7 +1870,7 @@ msgstr ""
 msgid "Base Part"
 msgstr ""
 
-#: company/models.py:312 company/models.py:463 order/views.py:1372
+#: company/models.py:312 company/models.py:463 order/views.py:1384
 msgid "Select part"
 msgstr ""
 
@@ -1905,7 +1910,7 @@ msgstr ""
 
 #: company/models.py:475 company/templates/company/supplier_part_base.html:88
 #: company/templates/company/supplier_part_detail.html:26
-#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176
+#: order/templates/order/purchase_order_detail.html:149 part/bom.py:176
 #: part/bom.py:287
 msgid "SKU"
 msgstr ""
@@ -2017,7 +2022,8 @@ msgstr ""
 
 #: company/templates/company/delete.html:12
 #, python-format
-msgid "There are %(count)s parts sourced from this company.<br>\n"
+msgid ""
+"There are %(count)s parts sourced from this company.<br>\n"
 "If this supplier is deleted, these supplier part entries will also be deleted."
 msgstr ""
 
@@ -2033,7 +2039,7 @@ msgstr ""
 msgid "Uses default currency"
 msgstr ""
 
-#: company/templates/company/detail.html:67 order/models.py:440
+#: company/templates/company/detail.html:67 order/models.py:450
 #: order/templates/order/sales_order_base.html:92 stock/models.py:415
 #: stock/models.py:416 stock/templates/stock/item_base.html:251
 #: templates/js/company.js:40 templates/js/order.js:267
@@ -2122,13 +2128,13 @@ msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:21
 #: order/templates/order/order_wizard/select_parts.html:42
-#: order/templates/order/purchase_order_detail.html:75
+#: order/templates/order/purchase_order_detail.html:50
 msgid "Create new supplier part"
 msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:22
 #: company/templates/company/manufacturer_part_suppliers.html:17
-#: order/templates/order/purchase_order_detail.html:74
+#: order/templates/order/purchase_order_detail.html:49
 #: part/templates/part/supplier.html:17 templates/js/stock.js:1163
 msgid "New Supplier Part"
 msgstr ""
@@ -2226,7 +2232,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_suppliers.html:22
 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44
 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22
-#: stock/views.py:1002 users/models.py:184
+#: stock/views.py:1002 users/models.py:187
 msgid "Delete"
 msgstr ""
 
@@ -2252,7 +2258,7 @@ msgstr ""
 #: stock/templates/stock/location_navbar.html:22
 #: stock/templates/stock/location_navbar.html:29
 #: templates/InvenTree/search.html:198 templates/js/stock.js:968
-#: templates/stats.html:72 templates/stats.html:81 users/models.py:40
+#: templates/stats.html:72 templates/stats.html:81 users/models.py:42
 msgid "Stock Items"
 msgstr ""
 
@@ -2266,7 +2272,7 @@ msgstr ""
 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228
 #: templates/InvenTree/search.html:345
 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
-#: users/models.py:43
+#: users/models.py:45
 msgid "Sales Orders"
 msgstr ""
 
@@ -2278,7 +2284,7 @@ msgstr ""
 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:205
 #: templates/InvenTree/search.html:325
 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
-#: users/models.py:42
+#: users/models.py:44
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2357,7 +2363,7 @@ msgid "Pricing Information"
 msgstr ""
 
 #: company/templates/company/supplier_part_pricing.html:19 company/views.py:794
-#: part/templates/part/sale_prices.html:17 part/views.py:2624
+#: part/templates/part/sale_prices.html:17 part/views.py:2636
 msgid "Add Price Break"
 msgstr ""
 
@@ -2467,15 +2473,15 @@ msgstr ""
 msgid "Delete Supplier Part"
 msgstr ""
 
-#: company/views.py:799 part/views.py:2628
+#: company/views.py:799 part/views.py:2640
 msgid "Added new price break"
 msgstr ""
 
-#: company/views.py:855 part/views.py:2672
+#: company/views.py:855 part/views.py:2684
 msgid "Edit Price Break"
 msgstr ""
 
-#: company/views.py:870 part/views.py:2686
+#: company/views.py:870 part/views.py:2698
 msgid "Delete Price Break"
 msgstr ""
 
@@ -2565,7 +2571,7 @@ msgstr ""
 msgid "Enter sales order number"
 msgstr ""
 
-#: order/forms.py:145 order/models.py:452
+#: order/forms.py:145 order/models.py:462
 msgid "Target date for order completion. Order will be overdue after this date."
 msgstr ""
 
@@ -2601,7 +2607,7 @@ msgstr ""
 msgid "Order notes"
 msgstr ""
 
-#: order/models.py:182 order/models.py:445
+#: order/models.py:182 order/models.py:455
 msgid "Purchase order status"
 msgstr ""
 
@@ -2642,8 +2648,8 @@ msgstr ""
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:243 order/models.py:342 part/views.py:1586
-#: stock/models.py:270 stock/models.py:953
+#: order/models.py:243 part/views.py:1586 stock/models.py:270
+#: stock/models.py:953
 msgid "Quantity must be greater than zero"
 msgstr ""
 
@@ -2651,120 +2657,128 @@ msgstr ""
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:337
+#: order/models.py:344
 msgid "Lines can only be received against an order marked as 'Placed'"
 msgstr ""
 
-#: order/models.py:359
+#: order/models.py:348
+msgid "Quantity must be an integer"
+msgstr ""
+
+#: order/models.py:350
+msgid "Quantity must be a positive number"
+msgstr ""
+
+#: order/models.py:369
 msgid "Received items"
 msgstr ""
 
-#: order/models.py:441
+#: order/models.py:451
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:455 templates/js/order.js:303
+#: order/models.py:465 templates/js/order.js:303
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:462
+#: order/models.py:472
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:506
+#: order/models.py:516
 msgid "SalesOrder cannot be shipped as it is not currently pending"
 msgstr ""
 
-#: order/models.py:593
+#: order/models.py:603
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:595
+#: order/models.py:605
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:597
+#: order/models.py:607
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:623 order/models.py:667
+#: order/models.py:633 order/models.py:677
 #: part/templates/part/allocation.html:17
 #: part/templates/part/allocation.html:45
 msgid "Order"
 msgstr ""
 
-#: order/models.py:624 order/templates/order/order_base.html:9
+#: order/models.py:634 order/templates/order/order_base.html:9
 #: order/templates/order/order_base.html:24
 #: report/templates/report/inventree_po_report.html:77
 #: stock/templates/stock/item_base.html:313 templates/js/order.js:148
 msgid "Purchase Order"
 msgstr ""
 
-#: order/models.py:638
+#: order/models.py:648
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:641 order/templates/order/order_base.html:131
-#: order/templates/order/purchase_order_detail.html:214
+#: order/models.py:651 order/templates/order/order_base.html:131
+#: order/templates/order/purchase_order_detail.html:189
 #: order/templates/order/receive_parts.html:22
 #: order/templates/order/sales_order_base.html:131
 msgid "Received"
 msgstr ""
 
-#: order/models.py:641
+#: order/models.py:651
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:648 stock/models.py:508
+#: order/models.py:658 stock/models.py:508
 #: stock/templates/stock/item_base.html:320
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:649
+#: order/models.py:659
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:743 order/models.py:745
+#: order/models.py:753 order/models.py:755
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:749
+#: order/models.py:759
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:751
+#: order/models.py:761
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:754
+#: order/models.py:764
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:764
+#: order/models.py:774
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:769
+#: order/models.py:779
 msgid "Line"
 msgstr ""
 
-#: order/models.py:780
+#: order/models.py:790
 msgid "Item"
 msgstr ""
 
-#: order/models.py:781
+#: order/models.py:791
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:784
+#: order/models.py:794
 msgid "Enter stock allocation quantity"
 msgstr ""
 
@@ -2812,9 +2826,22 @@ msgstr ""
 msgid "Issued"
 msgstr ""
 
-#: order/templates/order/order_cancel.html:7
-#: order/templates/order/sales_order_cancel.html:9
-msgid "Cancelling this order means that the order will no longer be editable."
+#: order/templates/order/order_base.html:180
+#: order/templates/order/purchase_order_detail.html:100
+#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: stock/templates/stock/location.html:191 templates/js/stock.js:708
+#: templates/js/stock.js:1169
+msgid "New Location"
+msgstr ""
+
+#: order/templates/order/order_base.html:181
+#: order/templates/order/purchase_order_detail.html:101
+#: stock/templates/stock/location.html:42
+msgid "Create new stock location"
+msgstr ""
+
+#: order/templates/order/order_cancel.html:8
+msgid "Cancelling this order means that the order and line items will no longer be editable."
 msgstr ""
 
 #: order/templates/order/order_complete.html:7
@@ -2826,10 +2853,10 @@ msgid "This order has line items which have not been marked as received."
 msgstr ""
 
 #: order/templates/order/order_complete.html:11
-msgid "Marking this order as complete will remove these line items."
+msgid "Completing this order means that the order and line items will no longer be editable."
 msgstr ""
 
-#: order/templates/order/order_issue.html:7
+#: order/templates/order/order_issue.html:8
 msgid "After placing this purchase order, line items will no longer be editable."
 msgstr ""
 
@@ -2881,11 +2908,13 @@ msgid "Select Purchase Order"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:45
-msgid "Create new purchase order for {{ supplier.name }}"
+#, python-format
+msgid "Create new purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:68
-msgid "Select a purchase order for"
+#, python-format
+msgid "Select a purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/po_attachments.html:12
@@ -2907,43 +2936,29 @@ msgid "Purchase Order Items"
 msgstr ""
 
 #: order/templates/order/purchase_order_detail.html:24
-#: order/templates/order/sales_order_detail.html:22 order/views.py:1108
-#: order/views.py:1191
+#: order/templates/order/sales_order_detail.html:22 order/views.py:1120
+#: order/views.py:1203
 msgid "Add Line Item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:45
-#: order/templates/order/purchase_order_detail.html:125
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
-#: stock/templates/stock/location.html:191 templates/js/stock.js:708
-#: templates/js/stock.js:1169
-msgid "New Location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:46
-#: order/templates/order/purchase_order_detail.html:126
-#: stock/templates/stock/location.html:42
-msgid "Create new stock location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:139
+#: order/templates/order/purchase_order_detail.html:114
 msgid "No line items found"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:205
+#: order/templates/order/purchase_order_detail.html:180
 msgid "Unit Price"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:246
+#: order/templates/order/purchase_order_detail.html:221
 #: order/templates/order/sales_order_detail.html:294
 msgid "Edit line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:247
+#: order/templates/order/purchase_order_detail.html:222
 msgid "Delete line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:252
+#: order/templates/order/purchase_order_detail.html:227
 msgid "Receive line item"
 msgstr ""
 
@@ -2966,7 +2981,7 @@ msgstr ""
 #: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
 #: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577
 #: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68
-#: users/models.py:38
+#: users/models.py:40
 msgid "Parts"
 msgstr ""
 
@@ -3019,6 +3034,10 @@ msgstr ""
 msgid "Warning"
 msgstr ""
 
+#: order/templates/order/sales_order_cancel.html:9
+msgid "Cancelling this order means that the order will no longer be editable."
+msgstr ""
+
 #: order/templates/order/sales_order_detail.html:13
 msgid "Sales Order Items"
 msgstr ""
@@ -3213,65 +3232,65 @@ msgstr ""
 msgid "No lines specified"
 msgstr ""
 
-#: order/views.py:1060
+#: order/views.py:1069
 #, python-brace-format
 msgid "Ordered {n} parts"
 msgstr ""
 
-#: order/views.py:1117
+#: order/views.py:1129
 msgid "Supplier part must be specified"
 msgstr ""
 
-#: order/views.py:1123
+#: order/views.py:1135
 msgid "Supplier must match for Part and Order"
 msgstr ""
 
-#: order/views.py:1242 order/views.py:1260
+#: order/views.py:1254 order/views.py:1272
 msgid "Edit Line Item"
 msgstr ""
 
-#: order/views.py:1276 order/views.py:1288
+#: order/views.py:1288 order/views.py:1300
 msgid "Delete Line Item"
 msgstr ""
 
-#: order/views.py:1281 order/views.py:1293
+#: order/views.py:1293 order/views.py:1305
 msgid "Deleted line item"
 msgstr ""
 
-#: order/views.py:1306
+#: order/views.py:1318
 msgid "Allocate Serial Numbers"
 msgstr ""
 
-#: order/views.py:1351
+#: order/views.py:1363
 #, python-brace-format
 msgid "Allocated {n} items"
 msgstr ""
 
-#: order/views.py:1367
+#: order/views.py:1379
 msgid "Select line item"
 msgstr ""
 
-#: order/views.py:1398
+#: order/views.py:1410
 msgid "No matching item for serial"
 msgstr ""
 
-#: order/views.py:1408
+#: order/views.py:1420
 msgid "is not in stock"
 msgstr ""
 
-#: order/views.py:1416
+#: order/views.py:1428
 msgid "already allocated to an order"
 msgstr ""
 
-#: order/views.py:1470
+#: order/views.py:1482
 msgid "Allocate Stock to Order"
 msgstr ""
 
-#: order/views.py:1544
+#: order/views.py:1556
 msgid "Edit Allocation Quantity"
 msgstr ""
 
-#: order/views.py:1559
+#: order/views.py:1571
 msgid "Remove allocation"
 msgstr ""
 
@@ -3457,7 +3476,7 @@ msgstr ""
 #: part/models.py:83 part/templates/part/category.html:23
 #: part/templates/part/category.html:94 part/templates/part/category.html:141
 #: templates/InvenTree/search.html:127 templates/stats.html:63
-#: users/models.py:37
+#: users/models.py:39
 msgid "Part Categories"
 msgstr ""
 
@@ -4004,7 +4023,7 @@ msgstr ""
 msgid "All parts"
 msgstr ""
 
-#: part/templates/part/category.html:29 part/views.py:2270
+#: part/templates/part/category.html:29 part/views.py:2282
 msgid "Create new part category"
 msgstr ""
 
@@ -4694,63 +4713,63 @@ msgstr ""
 msgid "Part Pricing"
 msgstr ""
 
-#: part/views.py:2069
+#: part/views.py:2081
 msgid "Create Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2079
+#: part/views.py:2091
 msgid "Edit Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2086
+#: part/views.py:2098
 msgid "Delete Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2094
+#: part/views.py:2106
 msgid "Create Part Parameter"
 msgstr ""
 
-#: part/views.py:2144
+#: part/views.py:2156
 msgid "Edit Part Parameter"
 msgstr ""
 
-#: part/views.py:2158
+#: part/views.py:2170
 msgid "Delete Part Parameter"
 msgstr ""
 
-#: part/views.py:2218
+#: part/views.py:2230
 msgid "Edit Part Category"
 msgstr ""
 
-#: part/views.py:2256
+#: part/views.py:2268
 msgid "Delete Part Category"
 msgstr ""
 
-#: part/views.py:2262
+#: part/views.py:2274
 msgid "Part category was deleted"
 msgstr ""
 
-#: part/views.py:2314
+#: part/views.py:2326
 msgid "Create Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2415
+#: part/views.py:2427
 msgid "Edit Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2471
+#: part/views.py:2483
 msgid "Delete Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2490
+#: part/views.py:2502
 msgid "Create BOM Item"
 msgstr ""
 
-#: part/views.py:2560
+#: part/views.py:2572
 msgid "Edit BOM item"
 msgstr ""
 
-#: part/views.py:2616
+#: part/views.py:2628
 msgid "Confim BOM item deletion"
 msgstr ""
 
@@ -5301,15 +5320,15 @@ msgid "Stock adjustment actions"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:164
-#: stock/templates/stock/location.html:65 templates/stock_table.html:56
+#: stock/templates/stock/location.html:65 templates/stock_table.html:57
 msgid "Count stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54
+#: stock/templates/stock/item_base.html:167 templates/stock_table.html:55
 msgid "Add stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55
+#: stock/templates/stock/item_base.html:170 templates/stock_table.html:56
 msgid "Remove stock"
 msgstr ""
 
@@ -5503,7 +5522,7 @@ msgid "Stock Details"
 msgstr ""
 
 #: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279
-#: templates/stats.html:76 users/models.py:39
+#: templates/stats.html:76 users/models.py:41
 msgid "Stock Locations"
 msgstr ""
 
@@ -5689,7 +5708,7 @@ msgstr ""
 msgid "Add Stock Items"
 msgstr ""
 
-#: stock/views.py:1001 users/models.py:180
+#: stock/views.py:1001 users/models.py:183
 msgid "Add"
 msgstr ""
 
@@ -5867,6 +5886,31 @@ msgstr ""
 msgid "No stock location set"
 msgstr ""
 
+#: templates/InvenTree/settings/appearance.html:10
+msgid "Theme Settings"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:17
+msgid "Color Themes"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:29
+#, python-format
+msgid ""
+"\n"
+"        The CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
+"        Please select another color theme :)\n"
+"    "
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:39
+msgid "Language"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:61
+msgid "Set Language"
+msgstr ""
+
 #: templates/InvenTree/settings/build.html:10
 msgid "Build Order Settings"
 msgstr ""
@@ -5950,7 +5994,7 @@ msgstr ""
 msgid "Stock Settings"
 msgstr ""
 
-#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49
+#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:50
 msgid "Stock Options"
 msgstr ""
 
@@ -5964,7 +6008,7 @@ msgid "Account"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:9
-msgid "Theme"
+msgid "Appearance"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:13
@@ -5983,22 +6027,6 @@ msgstr ""
 msgid "Categories"
 msgstr ""
 
-#: templates/InvenTree/settings/theme.html:10
-msgid "Theme Settings"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:17
-msgid "Color Themes"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:29
-#, python-format
-msgid "\n"
-"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
-"\t\tPlease select another color theme :)\n"
-"\t"
-msgstr ""
-
 #: templates/InvenTree/settings/user.html:16
 msgid "User Information"
 msgstr ""
@@ -6061,13 +6089,23 @@ msgid "View Code on GitHub"
 msgstr ""
 
 #: templates/about.html:63
-msgid "Get the App"
+msgid "Credits"
 msgstr ""
 
 #: templates/about.html:68
+msgid "Mobile App"
+msgstr ""
+
+#: templates/about.html:73
 msgid "Submit Bug Report"
 msgstr ""
 
+#: templates/about.html:82 templates/js/modals.js:550
+#: templates/js/modals.js:809 templates/modals.html:28 templates/modals.html:52
+#: templates/modals.html:93
+msgid "Close"
+msgstr ""
+
 #: templates/attachment_table.html:6
 msgid "Add Attachment"
 msgstr ""
@@ -6263,7 +6301,7 @@ msgid "Quantity Per"
 msgstr ""
 
 #: templates/js/build.js:638 templates/js/build.js:1056
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order stock"
 msgstr ""
 
@@ -6396,11 +6434,6 @@ msgstr ""
 msgid "Submit"
 msgstr ""
 
-#: templates/js/modals.js:550 templates/js/modals.js:809
-#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93
-msgid "Close"
-msgstr ""
-
 #: templates/js/modals.js:760
 msgid "Invalid response from server"
 msgstr ""
@@ -6974,6 +7007,10 @@ msgstr ""
 msgid "Form errors exist"
 msgstr ""
 
+#: templates/navbar.html:13
+msgid "Toggle navigation"
+msgstr ""
+
 #: templates/navbar.html:33
 msgid "Buy"
 msgstr ""
@@ -6986,7 +7023,7 @@ msgstr ""
 msgid "Scan Barcode"
 msgstr ""
 
-#: templates/navbar.html:77 users/models.py:36
+#: templates/navbar.html:77 users/models.py:38
 msgid "Admin"
 msgstr ""
 
@@ -7118,43 +7155,43 @@ msgstr ""
 msgid "Print test reports"
 msgstr ""
 
-#: templates/stock_table.html:54
+#: templates/stock_table.html:55
 msgid "Add to selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:55
+#: templates/stock_table.html:56
 msgid "Remove from selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:56
+#: templates/stock_table.html:57
 msgid "Stocktake selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move stock"
 msgstr ""
 
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order selected items"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change status"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change stock status"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete selected items"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete Stock"
 msgstr ""
 
@@ -7190,34 +7227,34 @@ msgstr ""
 msgid "Important dates"
 msgstr ""
 
-#: users/models.py:167
+#: users/models.py:170
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:175
+#: users/models.py:178
 msgid "Group"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "View"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:180
+#: users/models.py:183
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Change"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:184
+#: users/models.py:187
 msgid "Permission to delete items"
 msgstr ""
diff --git a/InvenTree/locale/fr/LC_MESSAGES/django.mo b/InvenTree/locale/fr/LC_MESSAGES/django.mo
index 2c90dd0c81aca562856271a6885816b565885734..71c5e169163d4e95748145ef537da8839930b0c2 100644
GIT binary patch
delta 90
zcmey(bd+g=3M2PKRgH-;S{_CQMuxfuCb~w33I>)|#>QMeiNz(lAw`LK#W{&3`9)R=
lK#{!k(!}&s-H_D8Tq^~)qSU<P47jM3LRwM0ThPR>Z2-TA9Tflo

delta 161
zcmX@g^qXmd3ZvshRSo_CM`v$GcUOfl*Pvief4_;oTJ@2xjzPM<{<<!X3LgGezMk4q
z{(i1pK8eL8x*<i0dBr)2CHX~G3T~l3J_>%0zOD*3uD*_*J`Rp9E<vur!FE8UdFiEz
z>8ZLQsfoE(3O<g0?x7$%Y<zqiax(Sui_#HltQ5F>J$+qu!%~ZiGxPJT6bvVxF9QHO
CfH83Z

diff --git a/InvenTree/locale/fr/LC_MESSAGES/django.po b/InvenTree/locale/fr/LC_MESSAGES/django.po
index f344b4140c..ae5d861fa2 100644
--- a/InvenTree/locale/fr/LC_MESSAGES/django.po
+++ b/InvenTree/locale/fr/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-21 09:17+0000\n"
+"POT-Creation-Date: 2021-05-05 17:33+1000\n"
 "PO-Revision-Date: 2021-04-21 09:33\n"
 "Last-Translator: \n"
 "Language-Team: French\n"
@@ -67,35 +67,36 @@ msgstr ""
 msgid "Select Category"
 msgstr ""
 
-#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344
-#: stock/views.py:1763
-msgid "Invalid quantity provided"
-msgstr ""
-
-#: InvenTree/helpers.py:378
-msgid "Empty serial number string"
-msgstr ""
-
-#: InvenTree/helpers.py:399
+#: InvenTree/helpers.py:377
 #, python-brace-format
 msgid "Duplicate serial: {n}"
 msgstr ""
 
-#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409
+#: InvenTree/helpers.py:384 order/models.py:245 order/models.py:353
+#: stock/views.py:1763
+msgid "Invalid quantity provided"
+msgstr ""
+
+#: InvenTree/helpers.py:387
+msgid "Empty serial number string"
+msgstr ""
+
+#: InvenTree/helpers.py:409 InvenTree/helpers.py:412 InvenTree/helpers.py:415
+#: InvenTree/helpers.py:440
 #, python-brace-format
 msgid "Invalid group: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:414
+#: InvenTree/helpers.py:445
 #, python-brace-format
 msgid "Duplicate serial: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:422
+#: InvenTree/helpers.py:453
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:426
+#: InvenTree/helpers.py:457
 #, python-brace-format
 msgid "Number of unique serial number ({s}) must match quantity ({q})"
 msgstr ""
@@ -140,7 +141,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_base.html:72
 #: company/templates/company/supplier_part_base.html:71
 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108
-#: order/models.py:101 order/templates/order/purchase_order_detail.html:168
+#: order/models.py:101 order/templates/order/purchase_order_detail.html:143
 #: part/models.py:710 part/templates/part/detail.html:54
 #: part/templates/part/set_category.html:14 report/models.py:192
 #: report/models.py:505 report/models.py:544
@@ -165,23 +166,23 @@ msgstr ""
 msgid "parent"
 msgstr ""
 
-#: InvenTree/settings.py:493
+#: InvenTree/settings.py:491
 msgid "English"
 msgstr ""
 
-#: InvenTree/settings.py:494
+#: InvenTree/settings.py:492
 msgid "French"
 msgstr ""
 
-#: InvenTree/settings.py:495
+#: InvenTree/settings.py:493
 msgid "German"
 msgstr ""
 
-#: InvenTree/settings.py:496
+#: InvenTree/settings.py:494
 msgid "Polish"
 msgstr ""
 
-#: InvenTree/settings.py:497
+#: InvenTree/settings.py:495
 msgid "Turkish"
 msgstr ""
 
@@ -375,16 +376,16 @@ msgstr ""
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1227
+#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1241
 #: build/templates/build/allocation_card.html:23
 #: build/templates/build/auto_allocate.html:17
 #: build/templates/build/build_base.html:123
 #: build/templates/build/detail.html:31 common/models.py:703
 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77
 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261
-#: order/forms.py:278 order/models.py:593 order/models.py:784
+#: order/forms.py:278 order/models.py:603 order/models.py:794
 #: order/templates/order/order_wizard/select_parts.html:32
-#: order/templates/order/purchase_order_detail.html:200
+#: order/templates/order/purchase_order_detail.html:175
 #: order/templates/order/sales_order_detail.html:70
 #: order/templates/order/sales_order_detail.html:77
 #: order/templates/order/sales_order_detail.html:159
@@ -458,7 +459,7 @@ msgid "Location of completed parts"
 msgstr ""
 
 #: build/forms.py:215 build/templates/build/build_base.html:128
-#: build/templates/build/detail.html:59 order/models.py:445
+#: build/templates/build/detail.html:59 order/models.py:455
 #: order/templates/order/receive_parts.html:24
 #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252
 #: templates/js/barcode.js:119 templates/js/build.js:770
@@ -508,7 +509,7 @@ msgstr ""
 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183
 #: templates/InvenTree/search.html:185
-#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
+#: templates/InvenTree/settings/tabs.html:31 users/models.py:43
 msgid "Build Orders"
 msgstr ""
 
@@ -516,8 +517,8 @@ msgstr ""
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:127 order/models.py:99 order/models.py:595
-#: order/templates/order/purchase_order_detail.html:195
+#: build/models.py:127 order/models.py:99 order/models.py:605
+#: order/templates/order/purchase_order_detail.html:170
 #: order/templates/order/sales_order_detail.html:219 part/models.py:2187
 #: report/templates/report/inventree_po_report.html:92
 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
@@ -540,10 +541,10 @@ msgstr ""
 
 #: build/models.py:152 build/templates/build/auto_allocate.html:16
 #: build/templates/build/build_base.html:118
-#: build/templates/build/detail.html:26 company/models.py:669
-#: order/models.py:637 order/models.py:669
+#: build/templates/build/detail.html:26 company/models.py:688
+#: order/models.py:647 order/models.py:679
 #: order/templates/order/order_wizard/select_parts.html:30
-#: order/templates/order/purchase_order_detail.html:156
+#: order/templates/order/purchase_order_detail.html:131
 #: order/templates/order/receive_parts.html:19
 #: order/templates/order/sales_order_detail.html:207 part/models.py:321
 #: part/models.py:1876 part/models.py:1888 part/models.py:1906
@@ -628,7 +629,7 @@ msgstr ""
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:223 order/models.py:451
+#: build/models.py:223 order/models.py:461
 msgid "Target completion date"
 msgstr ""
 
@@ -678,9 +679,9 @@ msgstr ""
 #: company/models.py:135 company/models.py:501
 #: company/templates/company/navbar.html:70
 #: company/templates/company/navbar.html:73 order/models.py:123
-#: order/models.py:597 order/templates/order/po_navbar.html:29
+#: order/models.py:607 order/templates/order/po_navbar.html:29
 #: order/templates/order/po_navbar.html:32
-#: order/templates/order/purchase_order_detail.html:234
+#: order/templates/order/purchase_order_detail.html:209
 #: order/templates/order/sales_order_detail.html:264
 #: order/templates/order/so_navbar.html:33
 #: order/templates/order/so_navbar.html:36 part/models.py:871
@@ -713,47 +714,47 @@ msgstr ""
 msgid "Completed build output"
 msgstr ""
 
-#: build/models.py:1118
+#: build/models.py:1132
 msgid "BuildItem must be unique for build, stock_item and install_into"
 msgstr ""
 
-#: build/models.py:1143
+#: build/models.py:1157
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1147
+#: build/models.py:1161
 #, python-brace-format
 msgid "Selected stock item not found in BOM for part '{p}'"
 msgstr ""
 
-#: build/models.py:1151
+#: build/models.py:1165
 #, python-brace-format
 msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
 msgstr ""
 
-#: build/models.py:1158 order/models.py:758
+#: build/models.py:1172 order/models.py:768
 msgid "StockItem is over-allocated"
 msgstr ""
 
-#: build/models.py:1162 order/models.py:761
+#: build/models.py:1176 order/models.py:771
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1166
+#: build/models.py:1180
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1206 stock/templates/stock/item_base.html:306
+#: build/models.py:1220 stock/templates/stock/item_base.html:306
 #: templates/InvenTree/search.html:183 templates/js/build.js:714
 #: templates/navbar.html:29
 msgid "Build"
 msgstr ""
 
-#: build/models.py:1207
+#: build/models.py:1221
 msgid "Build to allocate parts"
 msgstr ""
 
-#: build/models.py:1214 part/templates/part/allocation.html:18
+#: build/models.py:1228 part/templates/part/allocation.html:18
 #: part/templates/part/allocation.html:24
 #: part/templates/part/allocation.html:31
 #: part/templates/part/allocation.html:49
@@ -765,19 +766,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1215
+#: build/models.py:1229
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1228
+#: build/models.py:1242
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1236
+#: build/models.py:1250
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1237
+#: build/models.py:1251
 msgid "Destination stock item"
 msgstr ""
 
@@ -801,7 +802,7 @@ msgstr ""
 msgid "Unallocate stock"
 msgstr ""
 
-#: build/templates/build/allocate.html:26 build/views.py:308 build/views.py:794
+#: build/templates/build/allocate.html:26 build/views.py:319 build/views.py:805
 msgid "Unallocate Stock"
 msgstr ""
 
@@ -811,7 +812,7 @@ msgstr ""
 
 #: build/templates/build/allocate.html:30
 #: company/templates/company/detail_manufacturer_part.html:33
-#: company/templates/company/detail_supplier_part.html:32 order/views.py:794
+#: company/templates/company/detail_supplier_part.html:32 order/views.py:795
 #: part/templates/part/category.html:127
 msgid "Order Parts"
 msgstr ""
@@ -954,7 +955,7 @@ msgid "Progress"
 msgstr ""
 
 #: build/templates/build/build_base.html:160
-#: build/templates/build/detail.html:84 order/models.py:667
+#: build/templates/build/detail.html:84 order/models.py:677
 #: order/templates/order/sales_order_base.html:9
 #: order/templates/order/sales_order_base.html:33
 #: order/templates/order/sales_order_ship.html:25
@@ -1139,7 +1140,7 @@ msgstr ""
 msgid "Alter the quantity of stock allocated to the build output"
 msgstr ""
 
-#: build/templates/build/index.html:28 build/views.py:667
+#: build/templates/build/index.html:28 build/views.py:678
 msgid "New Build Order"
 msgstr ""
 
@@ -1226,141 +1227,145 @@ msgstr ""
 msgid "Create Build Output"
 msgstr ""
 
-#: build/views.py:173 stock/models.py:969 stock/views.py:1789
+#: build/views.py:168
+msgid "Maximum output quantity is "
+msgstr ""
+
+#: build/views.py:184 stock/models.py:969 stock/views.py:1789
 msgid "Serial numbers already exist"
 msgstr ""
 
-#: build/views.py:182
+#: build/views.py:193
 msgid "Serial numbers required for trackable build output"
 msgstr ""
 
-#: build/views.py:248
+#: build/views.py:259
 msgid "Delete Build Output"
 msgstr ""
 
-#: build/views.py:269 build/views.py:359
+#: build/views.py:280 build/views.py:370
 msgid "Confirm unallocation of build stock"
 msgstr ""
 
-#: build/views.py:270 build/views.py:360 stock/views.py:425
+#: build/views.py:281 build/views.py:371 stock/views.py:425
 msgid "Check the confirmation box"
 msgstr ""
 
-#: build/views.py:282
+#: build/views.py:293
 msgid "Build output does not match build"
 msgstr ""
 
-#: build/views.py:284 build/views.py:485
+#: build/views.py:295 build/views.py:496
 msgid "Build output must be specified"
 msgstr ""
 
-#: build/views.py:296
+#: build/views.py:307
 msgid "Build output deleted"
 msgstr ""
 
-#: build/views.py:394
+#: build/views.py:405
 msgid "Complete Build Order"
 msgstr ""
 
-#: build/views.py:400
+#: build/views.py:411
 msgid "Build order cannot be completed - incomplete outputs remain"
 msgstr ""
 
-#: build/views.py:411
+#: build/views.py:422
 msgid "Completed build order"
 msgstr ""
 
-#: build/views.py:427
+#: build/views.py:438
 msgid "Complete Build Output"
 msgstr ""
 
-#: build/views.py:469
+#: build/views.py:480
 msgid "Invalid stock status value selected"
 msgstr ""
 
-#: build/views.py:476
+#: build/views.py:487
 msgid "Quantity to complete cannot exceed build output quantity"
 msgstr ""
 
-#: build/views.py:482
+#: build/views.py:493
 msgid "Confirm completion of incomplete build"
 msgstr ""
 
-#: build/views.py:581
+#: build/views.py:592
 msgid "Build output completed"
 msgstr ""
 
-#: build/views.py:721
+#: build/views.py:732
 msgid "Created new build"
 msgstr ""
 
-#: build/views.py:742
+#: build/views.py:753
 msgid "Edit Build Order Details"
 msgstr ""
 
-#: build/views.py:775
+#: build/views.py:786
 msgid "Edited build"
 msgstr ""
 
-#: build/views.py:784
+#: build/views.py:795
 msgid "Delete Build Order"
 msgstr ""
 
-#: build/views.py:799
+#: build/views.py:810
 msgid "Removed parts from build allocation"
 msgstr ""
 
-#: build/views.py:811
+#: build/views.py:822
 msgid "Allocate stock to build output"
 msgstr ""
 
-#: build/views.py:854
+#: build/views.py:865
 msgid "Item must be currently in stock"
 msgstr ""
 
-#: build/views.py:860
+#: build/views.py:871
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/views.py:861 templates/js/bom.js:230 templates/js/build.js:575
+#: build/views.py:872 templates/js/bom.js:230 templates/js/build.js:575
 #: templates/js/build.js:838 templates/js/build.js:1021
 msgid "Available"
 msgstr ""
 
-#: build/views.py:863
+#: build/views.py:874
 msgid "Stock item must be selected"
 msgstr ""
 
-#: build/views.py:1026
+#: build/views.py:1037
 msgid "Edit Stock Allocation"
 msgstr ""
 
-#: build/views.py:1030
+#: build/views.py:1041
 msgid "Updated Build Item"
 msgstr ""
 
-#: build/views.py:1059
+#: build/views.py:1070
 msgid "Add Build Order Attachment"
 msgstr ""
 
-#: build/views.py:1072 order/views.py:110 order/views.py:162 part/views.py:172
+#: build/views.py:1083 order/views.py:110 order/views.py:162 part/views.py:172
 #: stock/views.py:277
 msgid "Added attachment"
 msgstr ""
 
-#: build/views.py:1108 order/views.py:189 order/views.py:210
+#: build/views.py:1119 order/views.py:189 order/views.py:210
 msgid "Edit Attachment"
 msgstr ""
 
-#: build/views.py:1118 order/views.py:193 order/views.py:214
+#: build/views.py:1129 order/views.py:193 order/views.py:214
 msgid "Attachment updated"
 msgstr ""
 
-#: build/views.py:1128 order/views.py:229 order/views.py:243
+#: build/views.py:1139 order/views.py:229 order/views.py:243
 msgid "Delete Attachment"
 msgstr ""
 
-#: build/views.py:1133 order/views.py:235 order/views.py:249 stock/views.py:333
+#: build/views.py:1144 order/views.py:235 order/views.py:249 stock/views.py:333
 msgid "Deleted attachment"
 msgstr ""
 
@@ -1766,7 +1771,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_detail.html:26
 #: company/templates/company/supplier_part_base.html:101
 #: company/templates/company/supplier_part_detail.html:35
-#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171
+#: order/templates/order/purchase_order_detail.html:158 part/bom.py:171
 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307
 msgid "MPN"
 msgstr ""
@@ -1865,7 +1870,7 @@ msgstr ""
 msgid "Base Part"
 msgstr ""
 
-#: company/models.py:312 company/models.py:463 order/views.py:1372
+#: company/models.py:312 company/models.py:463 order/views.py:1384
 msgid "Select part"
 msgstr ""
 
@@ -1905,7 +1910,7 @@ msgstr ""
 
 #: company/models.py:475 company/templates/company/supplier_part_base.html:88
 #: company/templates/company/supplier_part_detail.html:26
-#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176
+#: order/templates/order/purchase_order_detail.html:149 part/bom.py:176
 #: part/bom.py:287
 msgid "SKU"
 msgstr ""
@@ -2017,7 +2022,8 @@ msgstr ""
 
 #: company/templates/company/delete.html:12
 #, python-format
-msgid "There are %(count)s parts sourced from this company.<br>\n"
+msgid ""
+"There are %(count)s parts sourced from this company.<br>\n"
 "If this supplier is deleted, these supplier part entries will also be deleted."
 msgstr ""
 
@@ -2033,7 +2039,7 @@ msgstr ""
 msgid "Uses default currency"
 msgstr ""
 
-#: company/templates/company/detail.html:67 order/models.py:440
+#: company/templates/company/detail.html:67 order/models.py:450
 #: order/templates/order/sales_order_base.html:92 stock/models.py:415
 #: stock/models.py:416 stock/templates/stock/item_base.html:251
 #: templates/js/company.js:40 templates/js/order.js:267
@@ -2122,13 +2128,13 @@ msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:21
 #: order/templates/order/order_wizard/select_parts.html:42
-#: order/templates/order/purchase_order_detail.html:75
+#: order/templates/order/purchase_order_detail.html:50
 msgid "Create new supplier part"
 msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:22
 #: company/templates/company/manufacturer_part_suppliers.html:17
-#: order/templates/order/purchase_order_detail.html:74
+#: order/templates/order/purchase_order_detail.html:49
 #: part/templates/part/supplier.html:17 templates/js/stock.js:1163
 msgid "New Supplier Part"
 msgstr ""
@@ -2226,7 +2232,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_suppliers.html:22
 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44
 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22
-#: stock/views.py:1002 users/models.py:184
+#: stock/views.py:1002 users/models.py:187
 msgid "Delete"
 msgstr ""
 
@@ -2252,7 +2258,7 @@ msgstr ""
 #: stock/templates/stock/location_navbar.html:22
 #: stock/templates/stock/location_navbar.html:29
 #: templates/InvenTree/search.html:198 templates/js/stock.js:968
-#: templates/stats.html:72 templates/stats.html:81 users/models.py:40
+#: templates/stats.html:72 templates/stats.html:81 users/models.py:42
 msgid "Stock Items"
 msgstr ""
 
@@ -2266,7 +2272,7 @@ msgstr ""
 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228
 #: templates/InvenTree/search.html:345
 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
-#: users/models.py:43
+#: users/models.py:45
 msgid "Sales Orders"
 msgstr ""
 
@@ -2278,7 +2284,7 @@ msgstr ""
 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:205
 #: templates/InvenTree/search.html:325
 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
-#: users/models.py:42
+#: users/models.py:44
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2357,7 +2363,7 @@ msgid "Pricing Information"
 msgstr ""
 
 #: company/templates/company/supplier_part_pricing.html:19 company/views.py:794
-#: part/templates/part/sale_prices.html:17 part/views.py:2624
+#: part/templates/part/sale_prices.html:17 part/views.py:2636
 msgid "Add Price Break"
 msgstr ""
 
@@ -2467,15 +2473,15 @@ msgstr ""
 msgid "Delete Supplier Part"
 msgstr ""
 
-#: company/views.py:799 part/views.py:2628
+#: company/views.py:799 part/views.py:2640
 msgid "Added new price break"
 msgstr ""
 
-#: company/views.py:855 part/views.py:2672
+#: company/views.py:855 part/views.py:2684
 msgid "Edit Price Break"
 msgstr ""
 
-#: company/views.py:870 part/views.py:2686
+#: company/views.py:870 part/views.py:2698
 msgid "Delete Price Break"
 msgstr ""
 
@@ -2565,7 +2571,7 @@ msgstr ""
 msgid "Enter sales order number"
 msgstr ""
 
-#: order/forms.py:145 order/models.py:452
+#: order/forms.py:145 order/models.py:462
 msgid "Target date for order completion. Order will be overdue after this date."
 msgstr ""
 
@@ -2601,7 +2607,7 @@ msgstr ""
 msgid "Order notes"
 msgstr ""
 
-#: order/models.py:182 order/models.py:445
+#: order/models.py:182 order/models.py:455
 msgid "Purchase order status"
 msgstr ""
 
@@ -2642,8 +2648,8 @@ msgstr ""
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:243 order/models.py:342 part/views.py:1586
-#: stock/models.py:270 stock/models.py:953
+#: order/models.py:243 part/views.py:1586 stock/models.py:270
+#: stock/models.py:953
 msgid "Quantity must be greater than zero"
 msgstr ""
 
@@ -2651,120 +2657,128 @@ msgstr ""
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:337
+#: order/models.py:344
 msgid "Lines can only be received against an order marked as 'Placed'"
 msgstr ""
 
-#: order/models.py:359
+#: order/models.py:348
+msgid "Quantity must be an integer"
+msgstr ""
+
+#: order/models.py:350
+msgid "Quantity must be a positive number"
+msgstr ""
+
+#: order/models.py:369
 msgid "Received items"
 msgstr ""
 
-#: order/models.py:441
+#: order/models.py:451
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:455 templates/js/order.js:303
+#: order/models.py:465 templates/js/order.js:303
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:462
+#: order/models.py:472
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:506
+#: order/models.py:516
 msgid "SalesOrder cannot be shipped as it is not currently pending"
 msgstr ""
 
-#: order/models.py:593
+#: order/models.py:603
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:595
+#: order/models.py:605
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:597
+#: order/models.py:607
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:623 order/models.py:667
+#: order/models.py:633 order/models.py:677
 #: part/templates/part/allocation.html:17
 #: part/templates/part/allocation.html:45
 msgid "Order"
 msgstr ""
 
-#: order/models.py:624 order/templates/order/order_base.html:9
+#: order/models.py:634 order/templates/order/order_base.html:9
 #: order/templates/order/order_base.html:24
 #: report/templates/report/inventree_po_report.html:77
 #: stock/templates/stock/item_base.html:313 templates/js/order.js:148
 msgid "Purchase Order"
 msgstr ""
 
-#: order/models.py:638
+#: order/models.py:648
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:641 order/templates/order/order_base.html:131
-#: order/templates/order/purchase_order_detail.html:214
+#: order/models.py:651 order/templates/order/order_base.html:131
+#: order/templates/order/purchase_order_detail.html:189
 #: order/templates/order/receive_parts.html:22
 #: order/templates/order/sales_order_base.html:131
 msgid "Received"
 msgstr ""
 
-#: order/models.py:641
+#: order/models.py:651
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:648 stock/models.py:508
+#: order/models.py:658 stock/models.py:508
 #: stock/templates/stock/item_base.html:320
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:649
+#: order/models.py:659
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:743 order/models.py:745
+#: order/models.py:753 order/models.py:755
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:749
+#: order/models.py:759
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:751
+#: order/models.py:761
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:754
+#: order/models.py:764
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:764
+#: order/models.py:774
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:769
+#: order/models.py:779
 msgid "Line"
 msgstr ""
 
-#: order/models.py:780
+#: order/models.py:790
 msgid "Item"
 msgstr ""
 
-#: order/models.py:781
+#: order/models.py:791
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:784
+#: order/models.py:794
 msgid "Enter stock allocation quantity"
 msgstr ""
 
@@ -2812,9 +2826,22 @@ msgstr ""
 msgid "Issued"
 msgstr ""
 
-#: order/templates/order/order_cancel.html:7
-#: order/templates/order/sales_order_cancel.html:9
-msgid "Cancelling this order means that the order will no longer be editable."
+#: order/templates/order/order_base.html:180
+#: order/templates/order/purchase_order_detail.html:100
+#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: stock/templates/stock/location.html:191 templates/js/stock.js:708
+#: templates/js/stock.js:1169
+msgid "New Location"
+msgstr ""
+
+#: order/templates/order/order_base.html:181
+#: order/templates/order/purchase_order_detail.html:101
+#: stock/templates/stock/location.html:42
+msgid "Create new stock location"
+msgstr ""
+
+#: order/templates/order/order_cancel.html:8
+msgid "Cancelling this order means that the order and line items will no longer be editable."
 msgstr ""
 
 #: order/templates/order/order_complete.html:7
@@ -2826,10 +2853,10 @@ msgid "This order has line items which have not been marked as received."
 msgstr ""
 
 #: order/templates/order/order_complete.html:11
-msgid "Marking this order as complete will remove these line items."
+msgid "Completing this order means that the order and line items will no longer be editable."
 msgstr ""
 
-#: order/templates/order/order_issue.html:7
+#: order/templates/order/order_issue.html:8
 msgid "After placing this purchase order, line items will no longer be editable."
 msgstr ""
 
@@ -2881,11 +2908,13 @@ msgid "Select Purchase Order"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:45
-msgid "Create new purchase order for {{ supplier.name }}"
+#, python-format
+msgid "Create new purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:68
-msgid "Select a purchase order for"
+#, python-format
+msgid "Select a purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/po_attachments.html:12
@@ -2907,43 +2936,29 @@ msgid "Purchase Order Items"
 msgstr ""
 
 #: order/templates/order/purchase_order_detail.html:24
-#: order/templates/order/sales_order_detail.html:22 order/views.py:1108
-#: order/views.py:1191
+#: order/templates/order/sales_order_detail.html:22 order/views.py:1120
+#: order/views.py:1203
 msgid "Add Line Item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:45
-#: order/templates/order/purchase_order_detail.html:125
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
-#: stock/templates/stock/location.html:191 templates/js/stock.js:708
-#: templates/js/stock.js:1169
-msgid "New Location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:46
-#: order/templates/order/purchase_order_detail.html:126
-#: stock/templates/stock/location.html:42
-msgid "Create new stock location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:139
+#: order/templates/order/purchase_order_detail.html:114
 msgid "No line items found"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:205
+#: order/templates/order/purchase_order_detail.html:180
 msgid "Unit Price"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:246
+#: order/templates/order/purchase_order_detail.html:221
 #: order/templates/order/sales_order_detail.html:294
 msgid "Edit line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:247
+#: order/templates/order/purchase_order_detail.html:222
 msgid "Delete line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:252
+#: order/templates/order/purchase_order_detail.html:227
 msgid "Receive line item"
 msgstr ""
 
@@ -2966,7 +2981,7 @@ msgstr ""
 #: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
 #: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577
 #: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68
-#: users/models.py:38
+#: users/models.py:40
 msgid "Parts"
 msgstr ""
 
@@ -3019,6 +3034,10 @@ msgstr ""
 msgid "Warning"
 msgstr ""
 
+#: order/templates/order/sales_order_cancel.html:9
+msgid "Cancelling this order means that the order will no longer be editable."
+msgstr ""
+
 #: order/templates/order/sales_order_detail.html:13
 msgid "Sales Order Items"
 msgstr ""
@@ -3213,65 +3232,65 @@ msgstr ""
 msgid "No lines specified"
 msgstr ""
 
-#: order/views.py:1060
+#: order/views.py:1069
 #, python-brace-format
 msgid "Ordered {n} parts"
 msgstr ""
 
-#: order/views.py:1117
+#: order/views.py:1129
 msgid "Supplier part must be specified"
 msgstr ""
 
-#: order/views.py:1123
+#: order/views.py:1135
 msgid "Supplier must match for Part and Order"
 msgstr ""
 
-#: order/views.py:1242 order/views.py:1260
+#: order/views.py:1254 order/views.py:1272
 msgid "Edit Line Item"
 msgstr ""
 
-#: order/views.py:1276 order/views.py:1288
+#: order/views.py:1288 order/views.py:1300
 msgid "Delete Line Item"
 msgstr ""
 
-#: order/views.py:1281 order/views.py:1293
+#: order/views.py:1293 order/views.py:1305
 msgid "Deleted line item"
 msgstr ""
 
-#: order/views.py:1306
+#: order/views.py:1318
 msgid "Allocate Serial Numbers"
 msgstr ""
 
-#: order/views.py:1351
+#: order/views.py:1363
 #, python-brace-format
 msgid "Allocated {n} items"
 msgstr ""
 
-#: order/views.py:1367
+#: order/views.py:1379
 msgid "Select line item"
 msgstr ""
 
-#: order/views.py:1398
+#: order/views.py:1410
 msgid "No matching item for serial"
 msgstr ""
 
-#: order/views.py:1408
+#: order/views.py:1420
 msgid "is not in stock"
 msgstr ""
 
-#: order/views.py:1416
+#: order/views.py:1428
 msgid "already allocated to an order"
 msgstr ""
 
-#: order/views.py:1470
+#: order/views.py:1482
 msgid "Allocate Stock to Order"
 msgstr ""
 
-#: order/views.py:1544
+#: order/views.py:1556
 msgid "Edit Allocation Quantity"
 msgstr ""
 
-#: order/views.py:1559
+#: order/views.py:1571
 msgid "Remove allocation"
 msgstr ""
 
@@ -3457,7 +3476,7 @@ msgstr ""
 #: part/models.py:83 part/templates/part/category.html:23
 #: part/templates/part/category.html:94 part/templates/part/category.html:141
 #: templates/InvenTree/search.html:127 templates/stats.html:63
-#: users/models.py:37
+#: users/models.py:39
 msgid "Part Categories"
 msgstr ""
 
@@ -4004,7 +4023,7 @@ msgstr ""
 msgid "All parts"
 msgstr ""
 
-#: part/templates/part/category.html:29 part/views.py:2270
+#: part/templates/part/category.html:29 part/views.py:2282
 msgid "Create new part category"
 msgstr ""
 
@@ -4694,63 +4713,63 @@ msgstr ""
 msgid "Part Pricing"
 msgstr ""
 
-#: part/views.py:2069
+#: part/views.py:2081
 msgid "Create Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2079
+#: part/views.py:2091
 msgid "Edit Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2086
+#: part/views.py:2098
 msgid "Delete Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2094
+#: part/views.py:2106
 msgid "Create Part Parameter"
 msgstr ""
 
-#: part/views.py:2144
+#: part/views.py:2156
 msgid "Edit Part Parameter"
 msgstr ""
 
-#: part/views.py:2158
+#: part/views.py:2170
 msgid "Delete Part Parameter"
 msgstr ""
 
-#: part/views.py:2218
+#: part/views.py:2230
 msgid "Edit Part Category"
 msgstr ""
 
-#: part/views.py:2256
+#: part/views.py:2268
 msgid "Delete Part Category"
 msgstr ""
 
-#: part/views.py:2262
+#: part/views.py:2274
 msgid "Part category was deleted"
 msgstr ""
 
-#: part/views.py:2314
+#: part/views.py:2326
 msgid "Create Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2415
+#: part/views.py:2427
 msgid "Edit Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2471
+#: part/views.py:2483
 msgid "Delete Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2490
+#: part/views.py:2502
 msgid "Create BOM Item"
 msgstr ""
 
-#: part/views.py:2560
+#: part/views.py:2572
 msgid "Edit BOM item"
 msgstr ""
 
-#: part/views.py:2616
+#: part/views.py:2628
 msgid "Confim BOM item deletion"
 msgstr ""
 
@@ -5301,15 +5320,15 @@ msgid "Stock adjustment actions"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:164
-#: stock/templates/stock/location.html:65 templates/stock_table.html:56
+#: stock/templates/stock/location.html:65 templates/stock_table.html:57
 msgid "Count stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54
+#: stock/templates/stock/item_base.html:167 templates/stock_table.html:55
 msgid "Add stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55
+#: stock/templates/stock/item_base.html:170 templates/stock_table.html:56
 msgid "Remove stock"
 msgstr ""
 
@@ -5503,7 +5522,7 @@ msgid "Stock Details"
 msgstr ""
 
 #: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279
-#: templates/stats.html:76 users/models.py:39
+#: templates/stats.html:76 users/models.py:41
 msgid "Stock Locations"
 msgstr ""
 
@@ -5689,7 +5708,7 @@ msgstr ""
 msgid "Add Stock Items"
 msgstr ""
 
-#: stock/views.py:1001 users/models.py:180
+#: stock/views.py:1001 users/models.py:183
 msgid "Add"
 msgstr ""
 
@@ -5867,6 +5886,31 @@ msgstr ""
 msgid "No stock location set"
 msgstr ""
 
+#: templates/InvenTree/settings/appearance.html:10
+msgid "Theme Settings"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:17
+msgid "Color Themes"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:29
+#, python-format
+msgid ""
+"\n"
+"        The CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
+"        Please select another color theme :)\n"
+"    "
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:39
+msgid "Language"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:61
+msgid "Set Language"
+msgstr ""
+
 #: templates/InvenTree/settings/build.html:10
 msgid "Build Order Settings"
 msgstr ""
@@ -5950,7 +5994,7 @@ msgstr ""
 msgid "Stock Settings"
 msgstr ""
 
-#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49
+#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:50
 msgid "Stock Options"
 msgstr ""
 
@@ -5964,7 +6008,7 @@ msgid "Account"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:9
-msgid "Theme"
+msgid "Appearance"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:13
@@ -5983,22 +6027,6 @@ msgstr ""
 msgid "Categories"
 msgstr ""
 
-#: templates/InvenTree/settings/theme.html:10
-msgid "Theme Settings"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:17
-msgid "Color Themes"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:29
-#, python-format
-msgid "\n"
-"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
-"\t\tPlease select another color theme :)\n"
-"\t"
-msgstr ""
-
 #: templates/InvenTree/settings/user.html:16
 msgid "User Information"
 msgstr ""
@@ -6061,13 +6089,23 @@ msgid "View Code on GitHub"
 msgstr ""
 
 #: templates/about.html:63
-msgid "Get the App"
+msgid "Credits"
 msgstr ""
 
 #: templates/about.html:68
+msgid "Mobile App"
+msgstr ""
+
+#: templates/about.html:73
 msgid "Submit Bug Report"
 msgstr ""
 
+#: templates/about.html:82 templates/js/modals.js:550
+#: templates/js/modals.js:809 templates/modals.html:28 templates/modals.html:52
+#: templates/modals.html:93
+msgid "Close"
+msgstr ""
+
 #: templates/attachment_table.html:6
 msgid "Add Attachment"
 msgstr ""
@@ -6263,7 +6301,7 @@ msgid "Quantity Per"
 msgstr ""
 
 #: templates/js/build.js:638 templates/js/build.js:1056
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order stock"
 msgstr ""
 
@@ -6396,11 +6434,6 @@ msgstr ""
 msgid "Submit"
 msgstr ""
 
-#: templates/js/modals.js:550 templates/js/modals.js:809
-#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93
-msgid "Close"
-msgstr ""
-
 #: templates/js/modals.js:760
 msgid "Invalid response from server"
 msgstr ""
@@ -6974,6 +7007,10 @@ msgstr ""
 msgid "Form errors exist"
 msgstr ""
 
+#: templates/navbar.html:13
+msgid "Toggle navigation"
+msgstr ""
+
 #: templates/navbar.html:33
 msgid "Buy"
 msgstr ""
@@ -6986,7 +7023,7 @@ msgstr ""
 msgid "Scan Barcode"
 msgstr ""
 
-#: templates/navbar.html:77 users/models.py:36
+#: templates/navbar.html:77 users/models.py:38
 msgid "Admin"
 msgstr ""
 
@@ -7118,43 +7155,43 @@ msgstr ""
 msgid "Print test reports"
 msgstr ""
 
-#: templates/stock_table.html:54
+#: templates/stock_table.html:55
 msgid "Add to selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:55
+#: templates/stock_table.html:56
 msgid "Remove from selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:56
+#: templates/stock_table.html:57
 msgid "Stocktake selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move stock"
 msgstr ""
 
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order selected items"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change status"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change stock status"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete selected items"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete Stock"
 msgstr ""
 
@@ -7190,35 +7227,34 @@ msgstr ""
 msgid "Important dates"
 msgstr ""
 
-#: users/models.py:167
+#: users/models.py:170
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:175
+#: users/models.py:178
 msgid "Group"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "View"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:180
+#: users/models.py:183
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Change"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:184
+#: users/models.py:187
 msgid "Permission to delete items"
 msgstr ""
-
diff --git a/InvenTree/locale/it/LC_MESSAGES/django.mo b/InvenTree/locale/it/LC_MESSAGES/django.mo
index 71cbdf3e9d8d54be31066ec4ad8628bc2c1f2845..900921d249eb26795e2913500959daa683a1746e 100644
GIT binary patch
delta 91
zcmeyvbew5|3M21CRgH-;TAoG*MuxfuCb~w33I>)|#>QMeiNz(lAw`LK#W{&3`9)R=
mK#{!k(!}&s-H_D8Tq_07lEj?M#5}mLl|p7oyl2S7uk8Te^c|7_

delta 161
zcmX@k^oMDJ3Zv6RRSo_CM`v$GcUOfl*Pvief4_;oTJ@2xjzPM<{<<!X3LgGezMk4q
z{(i1pK8eL8x*<i0dBr)2CHX~G3T~l3J_>%0zOD*3uD*_*J`Rp9E<vur!FE8UdFiEz
z>8ZLQsfoE(3O<g0?x7$%Y<zqiax(Sui_#HltQ5F>J$+qu!%~ZiGxPJT6bvU`C<g#N
C{xNp|

diff --git a/InvenTree/locale/it/LC_MESSAGES/django.po b/InvenTree/locale/it/LC_MESSAGES/django.po
index 978d9186a4..69191acc73 100644
--- a/InvenTree/locale/it/LC_MESSAGES/django.po
+++ b/InvenTree/locale/it/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-21 09:17+0000\n"
+"POT-Creation-Date: 2021-05-05 17:33+1000\n"
 "PO-Revision-Date: 2021-04-21 09:33\n"
 "Last-Translator: \n"
 "Language-Team: Italian\n"
@@ -67,35 +67,36 @@ msgstr ""
 msgid "Select Category"
 msgstr ""
 
-#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344
-#: stock/views.py:1763
-msgid "Invalid quantity provided"
-msgstr ""
-
-#: InvenTree/helpers.py:378
-msgid "Empty serial number string"
-msgstr ""
-
-#: InvenTree/helpers.py:399
+#: InvenTree/helpers.py:377
 #, python-brace-format
 msgid "Duplicate serial: {n}"
 msgstr ""
 
-#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409
+#: InvenTree/helpers.py:384 order/models.py:245 order/models.py:353
+#: stock/views.py:1763
+msgid "Invalid quantity provided"
+msgstr ""
+
+#: InvenTree/helpers.py:387
+msgid "Empty serial number string"
+msgstr ""
+
+#: InvenTree/helpers.py:409 InvenTree/helpers.py:412 InvenTree/helpers.py:415
+#: InvenTree/helpers.py:440
 #, python-brace-format
 msgid "Invalid group: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:414
+#: InvenTree/helpers.py:445
 #, python-brace-format
 msgid "Duplicate serial: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:422
+#: InvenTree/helpers.py:453
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:426
+#: InvenTree/helpers.py:457
 #, python-brace-format
 msgid "Number of unique serial number ({s}) must match quantity ({q})"
 msgstr ""
@@ -140,7 +141,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_base.html:72
 #: company/templates/company/supplier_part_base.html:71
 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108
-#: order/models.py:101 order/templates/order/purchase_order_detail.html:168
+#: order/models.py:101 order/templates/order/purchase_order_detail.html:143
 #: part/models.py:710 part/templates/part/detail.html:54
 #: part/templates/part/set_category.html:14 report/models.py:192
 #: report/models.py:505 report/models.py:544
@@ -165,23 +166,23 @@ msgstr ""
 msgid "parent"
 msgstr ""
 
-#: InvenTree/settings.py:493
+#: InvenTree/settings.py:491
 msgid "English"
 msgstr ""
 
-#: InvenTree/settings.py:494
+#: InvenTree/settings.py:492
 msgid "French"
 msgstr ""
 
-#: InvenTree/settings.py:495
+#: InvenTree/settings.py:493
 msgid "German"
 msgstr ""
 
-#: InvenTree/settings.py:496
+#: InvenTree/settings.py:494
 msgid "Polish"
 msgstr ""
 
-#: InvenTree/settings.py:497
+#: InvenTree/settings.py:495
 msgid "Turkish"
 msgstr ""
 
@@ -375,16 +376,16 @@ msgstr ""
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1227
+#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1241
 #: build/templates/build/allocation_card.html:23
 #: build/templates/build/auto_allocate.html:17
 #: build/templates/build/build_base.html:123
 #: build/templates/build/detail.html:31 common/models.py:703
 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77
 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261
-#: order/forms.py:278 order/models.py:593 order/models.py:784
+#: order/forms.py:278 order/models.py:603 order/models.py:794
 #: order/templates/order/order_wizard/select_parts.html:32
-#: order/templates/order/purchase_order_detail.html:200
+#: order/templates/order/purchase_order_detail.html:175
 #: order/templates/order/sales_order_detail.html:70
 #: order/templates/order/sales_order_detail.html:77
 #: order/templates/order/sales_order_detail.html:159
@@ -458,7 +459,7 @@ msgid "Location of completed parts"
 msgstr ""
 
 #: build/forms.py:215 build/templates/build/build_base.html:128
-#: build/templates/build/detail.html:59 order/models.py:445
+#: build/templates/build/detail.html:59 order/models.py:455
 #: order/templates/order/receive_parts.html:24
 #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252
 #: templates/js/barcode.js:119 templates/js/build.js:770
@@ -508,7 +509,7 @@ msgstr ""
 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183
 #: templates/InvenTree/search.html:185
-#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
+#: templates/InvenTree/settings/tabs.html:31 users/models.py:43
 msgid "Build Orders"
 msgstr ""
 
@@ -516,8 +517,8 @@ msgstr ""
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:127 order/models.py:99 order/models.py:595
-#: order/templates/order/purchase_order_detail.html:195
+#: build/models.py:127 order/models.py:99 order/models.py:605
+#: order/templates/order/purchase_order_detail.html:170
 #: order/templates/order/sales_order_detail.html:219 part/models.py:2187
 #: report/templates/report/inventree_po_report.html:92
 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
@@ -540,10 +541,10 @@ msgstr ""
 
 #: build/models.py:152 build/templates/build/auto_allocate.html:16
 #: build/templates/build/build_base.html:118
-#: build/templates/build/detail.html:26 company/models.py:669
-#: order/models.py:637 order/models.py:669
+#: build/templates/build/detail.html:26 company/models.py:688
+#: order/models.py:647 order/models.py:679
 #: order/templates/order/order_wizard/select_parts.html:30
-#: order/templates/order/purchase_order_detail.html:156
+#: order/templates/order/purchase_order_detail.html:131
 #: order/templates/order/receive_parts.html:19
 #: order/templates/order/sales_order_detail.html:207 part/models.py:321
 #: part/models.py:1876 part/models.py:1888 part/models.py:1906
@@ -628,7 +629,7 @@ msgstr ""
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:223 order/models.py:451
+#: build/models.py:223 order/models.py:461
 msgid "Target completion date"
 msgstr ""
 
@@ -678,9 +679,9 @@ msgstr ""
 #: company/models.py:135 company/models.py:501
 #: company/templates/company/navbar.html:70
 #: company/templates/company/navbar.html:73 order/models.py:123
-#: order/models.py:597 order/templates/order/po_navbar.html:29
+#: order/models.py:607 order/templates/order/po_navbar.html:29
 #: order/templates/order/po_navbar.html:32
-#: order/templates/order/purchase_order_detail.html:234
+#: order/templates/order/purchase_order_detail.html:209
 #: order/templates/order/sales_order_detail.html:264
 #: order/templates/order/so_navbar.html:33
 #: order/templates/order/so_navbar.html:36 part/models.py:871
@@ -713,47 +714,47 @@ msgstr ""
 msgid "Completed build output"
 msgstr ""
 
-#: build/models.py:1118
+#: build/models.py:1132
 msgid "BuildItem must be unique for build, stock_item and install_into"
 msgstr ""
 
-#: build/models.py:1143
+#: build/models.py:1157
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1147
+#: build/models.py:1161
 #, python-brace-format
 msgid "Selected stock item not found in BOM for part '{p}'"
 msgstr ""
 
-#: build/models.py:1151
+#: build/models.py:1165
 #, python-brace-format
 msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
 msgstr ""
 
-#: build/models.py:1158 order/models.py:758
+#: build/models.py:1172 order/models.py:768
 msgid "StockItem is over-allocated"
 msgstr ""
 
-#: build/models.py:1162 order/models.py:761
+#: build/models.py:1176 order/models.py:771
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1166
+#: build/models.py:1180
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1206 stock/templates/stock/item_base.html:306
+#: build/models.py:1220 stock/templates/stock/item_base.html:306
 #: templates/InvenTree/search.html:183 templates/js/build.js:714
 #: templates/navbar.html:29
 msgid "Build"
 msgstr ""
 
-#: build/models.py:1207
+#: build/models.py:1221
 msgid "Build to allocate parts"
 msgstr ""
 
-#: build/models.py:1214 part/templates/part/allocation.html:18
+#: build/models.py:1228 part/templates/part/allocation.html:18
 #: part/templates/part/allocation.html:24
 #: part/templates/part/allocation.html:31
 #: part/templates/part/allocation.html:49
@@ -765,19 +766,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1215
+#: build/models.py:1229
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1228
+#: build/models.py:1242
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1236
+#: build/models.py:1250
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1237
+#: build/models.py:1251
 msgid "Destination stock item"
 msgstr ""
 
@@ -801,7 +802,7 @@ msgstr ""
 msgid "Unallocate stock"
 msgstr ""
 
-#: build/templates/build/allocate.html:26 build/views.py:308 build/views.py:794
+#: build/templates/build/allocate.html:26 build/views.py:319 build/views.py:805
 msgid "Unallocate Stock"
 msgstr ""
 
@@ -811,7 +812,7 @@ msgstr ""
 
 #: build/templates/build/allocate.html:30
 #: company/templates/company/detail_manufacturer_part.html:33
-#: company/templates/company/detail_supplier_part.html:32 order/views.py:794
+#: company/templates/company/detail_supplier_part.html:32 order/views.py:795
 #: part/templates/part/category.html:127
 msgid "Order Parts"
 msgstr ""
@@ -954,7 +955,7 @@ msgid "Progress"
 msgstr ""
 
 #: build/templates/build/build_base.html:160
-#: build/templates/build/detail.html:84 order/models.py:667
+#: build/templates/build/detail.html:84 order/models.py:677
 #: order/templates/order/sales_order_base.html:9
 #: order/templates/order/sales_order_base.html:33
 #: order/templates/order/sales_order_ship.html:25
@@ -1139,7 +1140,7 @@ msgstr ""
 msgid "Alter the quantity of stock allocated to the build output"
 msgstr ""
 
-#: build/templates/build/index.html:28 build/views.py:667
+#: build/templates/build/index.html:28 build/views.py:678
 msgid "New Build Order"
 msgstr ""
 
@@ -1226,141 +1227,145 @@ msgstr ""
 msgid "Create Build Output"
 msgstr ""
 
-#: build/views.py:173 stock/models.py:969 stock/views.py:1789
+#: build/views.py:168
+msgid "Maximum output quantity is "
+msgstr ""
+
+#: build/views.py:184 stock/models.py:969 stock/views.py:1789
 msgid "Serial numbers already exist"
 msgstr ""
 
-#: build/views.py:182
+#: build/views.py:193
 msgid "Serial numbers required for trackable build output"
 msgstr ""
 
-#: build/views.py:248
+#: build/views.py:259
 msgid "Delete Build Output"
 msgstr ""
 
-#: build/views.py:269 build/views.py:359
+#: build/views.py:280 build/views.py:370
 msgid "Confirm unallocation of build stock"
 msgstr ""
 
-#: build/views.py:270 build/views.py:360 stock/views.py:425
+#: build/views.py:281 build/views.py:371 stock/views.py:425
 msgid "Check the confirmation box"
 msgstr ""
 
-#: build/views.py:282
+#: build/views.py:293
 msgid "Build output does not match build"
 msgstr ""
 
-#: build/views.py:284 build/views.py:485
+#: build/views.py:295 build/views.py:496
 msgid "Build output must be specified"
 msgstr ""
 
-#: build/views.py:296
+#: build/views.py:307
 msgid "Build output deleted"
 msgstr ""
 
-#: build/views.py:394
+#: build/views.py:405
 msgid "Complete Build Order"
 msgstr ""
 
-#: build/views.py:400
+#: build/views.py:411
 msgid "Build order cannot be completed - incomplete outputs remain"
 msgstr ""
 
-#: build/views.py:411
+#: build/views.py:422
 msgid "Completed build order"
 msgstr ""
 
-#: build/views.py:427
+#: build/views.py:438
 msgid "Complete Build Output"
 msgstr ""
 
-#: build/views.py:469
+#: build/views.py:480
 msgid "Invalid stock status value selected"
 msgstr ""
 
-#: build/views.py:476
+#: build/views.py:487
 msgid "Quantity to complete cannot exceed build output quantity"
 msgstr ""
 
-#: build/views.py:482
+#: build/views.py:493
 msgid "Confirm completion of incomplete build"
 msgstr ""
 
-#: build/views.py:581
+#: build/views.py:592
 msgid "Build output completed"
 msgstr ""
 
-#: build/views.py:721
+#: build/views.py:732
 msgid "Created new build"
 msgstr ""
 
-#: build/views.py:742
+#: build/views.py:753
 msgid "Edit Build Order Details"
 msgstr ""
 
-#: build/views.py:775
+#: build/views.py:786
 msgid "Edited build"
 msgstr ""
 
-#: build/views.py:784
+#: build/views.py:795
 msgid "Delete Build Order"
 msgstr ""
 
-#: build/views.py:799
+#: build/views.py:810
 msgid "Removed parts from build allocation"
 msgstr ""
 
-#: build/views.py:811
+#: build/views.py:822
 msgid "Allocate stock to build output"
 msgstr ""
 
-#: build/views.py:854
+#: build/views.py:865
 msgid "Item must be currently in stock"
 msgstr ""
 
-#: build/views.py:860
+#: build/views.py:871
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/views.py:861 templates/js/bom.js:230 templates/js/build.js:575
+#: build/views.py:872 templates/js/bom.js:230 templates/js/build.js:575
 #: templates/js/build.js:838 templates/js/build.js:1021
 msgid "Available"
 msgstr ""
 
-#: build/views.py:863
+#: build/views.py:874
 msgid "Stock item must be selected"
 msgstr ""
 
-#: build/views.py:1026
+#: build/views.py:1037
 msgid "Edit Stock Allocation"
 msgstr ""
 
-#: build/views.py:1030
+#: build/views.py:1041
 msgid "Updated Build Item"
 msgstr ""
 
-#: build/views.py:1059
+#: build/views.py:1070
 msgid "Add Build Order Attachment"
 msgstr ""
 
-#: build/views.py:1072 order/views.py:110 order/views.py:162 part/views.py:172
+#: build/views.py:1083 order/views.py:110 order/views.py:162 part/views.py:172
 #: stock/views.py:277
 msgid "Added attachment"
 msgstr ""
 
-#: build/views.py:1108 order/views.py:189 order/views.py:210
+#: build/views.py:1119 order/views.py:189 order/views.py:210
 msgid "Edit Attachment"
 msgstr ""
 
-#: build/views.py:1118 order/views.py:193 order/views.py:214
+#: build/views.py:1129 order/views.py:193 order/views.py:214
 msgid "Attachment updated"
 msgstr ""
 
-#: build/views.py:1128 order/views.py:229 order/views.py:243
+#: build/views.py:1139 order/views.py:229 order/views.py:243
 msgid "Delete Attachment"
 msgstr ""
 
-#: build/views.py:1133 order/views.py:235 order/views.py:249 stock/views.py:333
+#: build/views.py:1144 order/views.py:235 order/views.py:249 stock/views.py:333
 msgid "Deleted attachment"
 msgstr ""
 
@@ -1766,7 +1771,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_detail.html:26
 #: company/templates/company/supplier_part_base.html:101
 #: company/templates/company/supplier_part_detail.html:35
-#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171
+#: order/templates/order/purchase_order_detail.html:158 part/bom.py:171
 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307
 msgid "MPN"
 msgstr ""
@@ -1865,7 +1870,7 @@ msgstr ""
 msgid "Base Part"
 msgstr ""
 
-#: company/models.py:312 company/models.py:463 order/views.py:1372
+#: company/models.py:312 company/models.py:463 order/views.py:1384
 msgid "Select part"
 msgstr ""
 
@@ -1905,7 +1910,7 @@ msgstr ""
 
 #: company/models.py:475 company/templates/company/supplier_part_base.html:88
 #: company/templates/company/supplier_part_detail.html:26
-#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176
+#: order/templates/order/purchase_order_detail.html:149 part/bom.py:176
 #: part/bom.py:287
 msgid "SKU"
 msgstr ""
@@ -2017,7 +2022,8 @@ msgstr ""
 
 #: company/templates/company/delete.html:12
 #, python-format
-msgid "There are %(count)s parts sourced from this company.<br>\n"
+msgid ""
+"There are %(count)s parts sourced from this company.<br>\n"
 "If this supplier is deleted, these supplier part entries will also be deleted."
 msgstr ""
 
@@ -2033,7 +2039,7 @@ msgstr ""
 msgid "Uses default currency"
 msgstr ""
 
-#: company/templates/company/detail.html:67 order/models.py:440
+#: company/templates/company/detail.html:67 order/models.py:450
 #: order/templates/order/sales_order_base.html:92 stock/models.py:415
 #: stock/models.py:416 stock/templates/stock/item_base.html:251
 #: templates/js/company.js:40 templates/js/order.js:267
@@ -2122,13 +2128,13 @@ msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:21
 #: order/templates/order/order_wizard/select_parts.html:42
-#: order/templates/order/purchase_order_detail.html:75
+#: order/templates/order/purchase_order_detail.html:50
 msgid "Create new supplier part"
 msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:22
 #: company/templates/company/manufacturer_part_suppliers.html:17
-#: order/templates/order/purchase_order_detail.html:74
+#: order/templates/order/purchase_order_detail.html:49
 #: part/templates/part/supplier.html:17 templates/js/stock.js:1163
 msgid "New Supplier Part"
 msgstr ""
@@ -2226,7 +2232,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_suppliers.html:22
 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44
 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22
-#: stock/views.py:1002 users/models.py:184
+#: stock/views.py:1002 users/models.py:187
 msgid "Delete"
 msgstr ""
 
@@ -2252,7 +2258,7 @@ msgstr ""
 #: stock/templates/stock/location_navbar.html:22
 #: stock/templates/stock/location_navbar.html:29
 #: templates/InvenTree/search.html:198 templates/js/stock.js:968
-#: templates/stats.html:72 templates/stats.html:81 users/models.py:40
+#: templates/stats.html:72 templates/stats.html:81 users/models.py:42
 msgid "Stock Items"
 msgstr ""
 
@@ -2266,7 +2272,7 @@ msgstr ""
 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228
 #: templates/InvenTree/search.html:345
 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
-#: users/models.py:43
+#: users/models.py:45
 msgid "Sales Orders"
 msgstr ""
 
@@ -2278,7 +2284,7 @@ msgstr ""
 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:205
 #: templates/InvenTree/search.html:325
 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
-#: users/models.py:42
+#: users/models.py:44
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2357,7 +2363,7 @@ msgid "Pricing Information"
 msgstr ""
 
 #: company/templates/company/supplier_part_pricing.html:19 company/views.py:794
-#: part/templates/part/sale_prices.html:17 part/views.py:2624
+#: part/templates/part/sale_prices.html:17 part/views.py:2636
 msgid "Add Price Break"
 msgstr ""
 
@@ -2467,15 +2473,15 @@ msgstr ""
 msgid "Delete Supplier Part"
 msgstr ""
 
-#: company/views.py:799 part/views.py:2628
+#: company/views.py:799 part/views.py:2640
 msgid "Added new price break"
 msgstr ""
 
-#: company/views.py:855 part/views.py:2672
+#: company/views.py:855 part/views.py:2684
 msgid "Edit Price Break"
 msgstr ""
 
-#: company/views.py:870 part/views.py:2686
+#: company/views.py:870 part/views.py:2698
 msgid "Delete Price Break"
 msgstr ""
 
@@ -2565,7 +2571,7 @@ msgstr ""
 msgid "Enter sales order number"
 msgstr ""
 
-#: order/forms.py:145 order/models.py:452
+#: order/forms.py:145 order/models.py:462
 msgid "Target date for order completion. Order will be overdue after this date."
 msgstr ""
 
@@ -2601,7 +2607,7 @@ msgstr ""
 msgid "Order notes"
 msgstr ""
 
-#: order/models.py:182 order/models.py:445
+#: order/models.py:182 order/models.py:455
 msgid "Purchase order status"
 msgstr ""
 
@@ -2642,8 +2648,8 @@ msgstr ""
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:243 order/models.py:342 part/views.py:1586
-#: stock/models.py:270 stock/models.py:953
+#: order/models.py:243 part/views.py:1586 stock/models.py:270
+#: stock/models.py:953
 msgid "Quantity must be greater than zero"
 msgstr ""
 
@@ -2651,120 +2657,128 @@ msgstr ""
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:337
+#: order/models.py:344
 msgid "Lines can only be received against an order marked as 'Placed'"
 msgstr ""
 
-#: order/models.py:359
+#: order/models.py:348
+msgid "Quantity must be an integer"
+msgstr ""
+
+#: order/models.py:350
+msgid "Quantity must be a positive number"
+msgstr ""
+
+#: order/models.py:369
 msgid "Received items"
 msgstr ""
 
-#: order/models.py:441
+#: order/models.py:451
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:455 templates/js/order.js:303
+#: order/models.py:465 templates/js/order.js:303
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:462
+#: order/models.py:472
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:506
+#: order/models.py:516
 msgid "SalesOrder cannot be shipped as it is not currently pending"
 msgstr ""
 
-#: order/models.py:593
+#: order/models.py:603
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:595
+#: order/models.py:605
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:597
+#: order/models.py:607
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:623 order/models.py:667
+#: order/models.py:633 order/models.py:677
 #: part/templates/part/allocation.html:17
 #: part/templates/part/allocation.html:45
 msgid "Order"
 msgstr ""
 
-#: order/models.py:624 order/templates/order/order_base.html:9
+#: order/models.py:634 order/templates/order/order_base.html:9
 #: order/templates/order/order_base.html:24
 #: report/templates/report/inventree_po_report.html:77
 #: stock/templates/stock/item_base.html:313 templates/js/order.js:148
 msgid "Purchase Order"
 msgstr ""
 
-#: order/models.py:638
+#: order/models.py:648
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:641 order/templates/order/order_base.html:131
-#: order/templates/order/purchase_order_detail.html:214
+#: order/models.py:651 order/templates/order/order_base.html:131
+#: order/templates/order/purchase_order_detail.html:189
 #: order/templates/order/receive_parts.html:22
 #: order/templates/order/sales_order_base.html:131
 msgid "Received"
 msgstr ""
 
-#: order/models.py:641
+#: order/models.py:651
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:648 stock/models.py:508
+#: order/models.py:658 stock/models.py:508
 #: stock/templates/stock/item_base.html:320
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:649
+#: order/models.py:659
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:743 order/models.py:745
+#: order/models.py:753 order/models.py:755
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:749
+#: order/models.py:759
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:751
+#: order/models.py:761
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:754
+#: order/models.py:764
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:764
+#: order/models.py:774
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:769
+#: order/models.py:779
 msgid "Line"
 msgstr ""
 
-#: order/models.py:780
+#: order/models.py:790
 msgid "Item"
 msgstr ""
 
-#: order/models.py:781
+#: order/models.py:791
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:784
+#: order/models.py:794
 msgid "Enter stock allocation quantity"
 msgstr ""
 
@@ -2812,9 +2826,22 @@ msgstr ""
 msgid "Issued"
 msgstr ""
 
-#: order/templates/order/order_cancel.html:7
-#: order/templates/order/sales_order_cancel.html:9
-msgid "Cancelling this order means that the order will no longer be editable."
+#: order/templates/order/order_base.html:180
+#: order/templates/order/purchase_order_detail.html:100
+#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: stock/templates/stock/location.html:191 templates/js/stock.js:708
+#: templates/js/stock.js:1169
+msgid "New Location"
+msgstr ""
+
+#: order/templates/order/order_base.html:181
+#: order/templates/order/purchase_order_detail.html:101
+#: stock/templates/stock/location.html:42
+msgid "Create new stock location"
+msgstr ""
+
+#: order/templates/order/order_cancel.html:8
+msgid "Cancelling this order means that the order and line items will no longer be editable."
 msgstr ""
 
 #: order/templates/order/order_complete.html:7
@@ -2826,10 +2853,10 @@ msgid "This order has line items which have not been marked as received."
 msgstr ""
 
 #: order/templates/order/order_complete.html:11
-msgid "Marking this order as complete will remove these line items."
+msgid "Completing this order means that the order and line items will no longer be editable."
 msgstr ""
 
-#: order/templates/order/order_issue.html:7
+#: order/templates/order/order_issue.html:8
 msgid "After placing this purchase order, line items will no longer be editable."
 msgstr ""
 
@@ -2881,11 +2908,13 @@ msgid "Select Purchase Order"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:45
-msgid "Create new purchase order for {{ supplier.name }}"
+#, python-format
+msgid "Create new purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:68
-msgid "Select a purchase order for"
+#, python-format
+msgid "Select a purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/po_attachments.html:12
@@ -2907,43 +2936,29 @@ msgid "Purchase Order Items"
 msgstr ""
 
 #: order/templates/order/purchase_order_detail.html:24
-#: order/templates/order/sales_order_detail.html:22 order/views.py:1108
-#: order/views.py:1191
+#: order/templates/order/sales_order_detail.html:22 order/views.py:1120
+#: order/views.py:1203
 msgid "Add Line Item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:45
-#: order/templates/order/purchase_order_detail.html:125
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
-#: stock/templates/stock/location.html:191 templates/js/stock.js:708
-#: templates/js/stock.js:1169
-msgid "New Location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:46
-#: order/templates/order/purchase_order_detail.html:126
-#: stock/templates/stock/location.html:42
-msgid "Create new stock location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:139
+#: order/templates/order/purchase_order_detail.html:114
 msgid "No line items found"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:205
+#: order/templates/order/purchase_order_detail.html:180
 msgid "Unit Price"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:246
+#: order/templates/order/purchase_order_detail.html:221
 #: order/templates/order/sales_order_detail.html:294
 msgid "Edit line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:247
+#: order/templates/order/purchase_order_detail.html:222
 msgid "Delete line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:252
+#: order/templates/order/purchase_order_detail.html:227
 msgid "Receive line item"
 msgstr ""
 
@@ -2966,7 +2981,7 @@ msgstr ""
 #: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
 #: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577
 #: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68
-#: users/models.py:38
+#: users/models.py:40
 msgid "Parts"
 msgstr ""
 
@@ -3019,6 +3034,10 @@ msgstr ""
 msgid "Warning"
 msgstr ""
 
+#: order/templates/order/sales_order_cancel.html:9
+msgid "Cancelling this order means that the order will no longer be editable."
+msgstr ""
+
 #: order/templates/order/sales_order_detail.html:13
 msgid "Sales Order Items"
 msgstr ""
@@ -3213,65 +3232,65 @@ msgstr ""
 msgid "No lines specified"
 msgstr ""
 
-#: order/views.py:1060
+#: order/views.py:1069
 #, python-brace-format
 msgid "Ordered {n} parts"
 msgstr ""
 
-#: order/views.py:1117
+#: order/views.py:1129
 msgid "Supplier part must be specified"
 msgstr ""
 
-#: order/views.py:1123
+#: order/views.py:1135
 msgid "Supplier must match for Part and Order"
 msgstr ""
 
-#: order/views.py:1242 order/views.py:1260
+#: order/views.py:1254 order/views.py:1272
 msgid "Edit Line Item"
 msgstr ""
 
-#: order/views.py:1276 order/views.py:1288
+#: order/views.py:1288 order/views.py:1300
 msgid "Delete Line Item"
 msgstr ""
 
-#: order/views.py:1281 order/views.py:1293
+#: order/views.py:1293 order/views.py:1305
 msgid "Deleted line item"
 msgstr ""
 
-#: order/views.py:1306
+#: order/views.py:1318
 msgid "Allocate Serial Numbers"
 msgstr ""
 
-#: order/views.py:1351
+#: order/views.py:1363
 #, python-brace-format
 msgid "Allocated {n} items"
 msgstr ""
 
-#: order/views.py:1367
+#: order/views.py:1379
 msgid "Select line item"
 msgstr ""
 
-#: order/views.py:1398
+#: order/views.py:1410
 msgid "No matching item for serial"
 msgstr ""
 
-#: order/views.py:1408
+#: order/views.py:1420
 msgid "is not in stock"
 msgstr ""
 
-#: order/views.py:1416
+#: order/views.py:1428
 msgid "already allocated to an order"
 msgstr ""
 
-#: order/views.py:1470
+#: order/views.py:1482
 msgid "Allocate Stock to Order"
 msgstr ""
 
-#: order/views.py:1544
+#: order/views.py:1556
 msgid "Edit Allocation Quantity"
 msgstr ""
 
-#: order/views.py:1559
+#: order/views.py:1571
 msgid "Remove allocation"
 msgstr ""
 
@@ -3457,7 +3476,7 @@ msgstr ""
 #: part/models.py:83 part/templates/part/category.html:23
 #: part/templates/part/category.html:94 part/templates/part/category.html:141
 #: templates/InvenTree/search.html:127 templates/stats.html:63
-#: users/models.py:37
+#: users/models.py:39
 msgid "Part Categories"
 msgstr ""
 
@@ -4004,7 +4023,7 @@ msgstr ""
 msgid "All parts"
 msgstr ""
 
-#: part/templates/part/category.html:29 part/views.py:2270
+#: part/templates/part/category.html:29 part/views.py:2282
 msgid "Create new part category"
 msgstr ""
 
@@ -4694,63 +4713,63 @@ msgstr ""
 msgid "Part Pricing"
 msgstr ""
 
-#: part/views.py:2069
+#: part/views.py:2081
 msgid "Create Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2079
+#: part/views.py:2091
 msgid "Edit Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2086
+#: part/views.py:2098
 msgid "Delete Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2094
+#: part/views.py:2106
 msgid "Create Part Parameter"
 msgstr ""
 
-#: part/views.py:2144
+#: part/views.py:2156
 msgid "Edit Part Parameter"
 msgstr ""
 
-#: part/views.py:2158
+#: part/views.py:2170
 msgid "Delete Part Parameter"
 msgstr ""
 
-#: part/views.py:2218
+#: part/views.py:2230
 msgid "Edit Part Category"
 msgstr ""
 
-#: part/views.py:2256
+#: part/views.py:2268
 msgid "Delete Part Category"
 msgstr ""
 
-#: part/views.py:2262
+#: part/views.py:2274
 msgid "Part category was deleted"
 msgstr ""
 
-#: part/views.py:2314
+#: part/views.py:2326
 msgid "Create Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2415
+#: part/views.py:2427
 msgid "Edit Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2471
+#: part/views.py:2483
 msgid "Delete Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2490
+#: part/views.py:2502
 msgid "Create BOM Item"
 msgstr ""
 
-#: part/views.py:2560
+#: part/views.py:2572
 msgid "Edit BOM item"
 msgstr ""
 
-#: part/views.py:2616
+#: part/views.py:2628
 msgid "Confim BOM item deletion"
 msgstr ""
 
@@ -5301,15 +5320,15 @@ msgid "Stock adjustment actions"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:164
-#: stock/templates/stock/location.html:65 templates/stock_table.html:56
+#: stock/templates/stock/location.html:65 templates/stock_table.html:57
 msgid "Count stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54
+#: stock/templates/stock/item_base.html:167 templates/stock_table.html:55
 msgid "Add stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55
+#: stock/templates/stock/item_base.html:170 templates/stock_table.html:56
 msgid "Remove stock"
 msgstr ""
 
@@ -5503,7 +5522,7 @@ msgid "Stock Details"
 msgstr ""
 
 #: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279
-#: templates/stats.html:76 users/models.py:39
+#: templates/stats.html:76 users/models.py:41
 msgid "Stock Locations"
 msgstr ""
 
@@ -5689,7 +5708,7 @@ msgstr ""
 msgid "Add Stock Items"
 msgstr ""
 
-#: stock/views.py:1001 users/models.py:180
+#: stock/views.py:1001 users/models.py:183
 msgid "Add"
 msgstr ""
 
@@ -5867,6 +5886,31 @@ msgstr ""
 msgid "No stock location set"
 msgstr ""
 
+#: templates/InvenTree/settings/appearance.html:10
+msgid "Theme Settings"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:17
+msgid "Color Themes"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:29
+#, python-format
+msgid ""
+"\n"
+"        The CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
+"        Please select another color theme :)\n"
+"    "
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:39
+msgid "Language"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:61
+msgid "Set Language"
+msgstr ""
+
 #: templates/InvenTree/settings/build.html:10
 msgid "Build Order Settings"
 msgstr ""
@@ -5950,7 +5994,7 @@ msgstr ""
 msgid "Stock Settings"
 msgstr ""
 
-#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49
+#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:50
 msgid "Stock Options"
 msgstr ""
 
@@ -5964,7 +6008,7 @@ msgid "Account"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:9
-msgid "Theme"
+msgid "Appearance"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:13
@@ -5983,22 +6027,6 @@ msgstr ""
 msgid "Categories"
 msgstr ""
 
-#: templates/InvenTree/settings/theme.html:10
-msgid "Theme Settings"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:17
-msgid "Color Themes"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:29
-#, python-format
-msgid "\n"
-"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
-"\t\tPlease select another color theme :)\n"
-"\t"
-msgstr ""
-
 #: templates/InvenTree/settings/user.html:16
 msgid "User Information"
 msgstr ""
@@ -6061,13 +6089,23 @@ msgid "View Code on GitHub"
 msgstr ""
 
 #: templates/about.html:63
-msgid "Get the App"
+msgid "Credits"
 msgstr ""
 
 #: templates/about.html:68
+msgid "Mobile App"
+msgstr ""
+
+#: templates/about.html:73
 msgid "Submit Bug Report"
 msgstr ""
 
+#: templates/about.html:82 templates/js/modals.js:550
+#: templates/js/modals.js:809 templates/modals.html:28 templates/modals.html:52
+#: templates/modals.html:93
+msgid "Close"
+msgstr ""
+
 #: templates/attachment_table.html:6
 msgid "Add Attachment"
 msgstr ""
@@ -6263,7 +6301,7 @@ msgid "Quantity Per"
 msgstr ""
 
 #: templates/js/build.js:638 templates/js/build.js:1056
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order stock"
 msgstr ""
 
@@ -6396,11 +6434,6 @@ msgstr ""
 msgid "Submit"
 msgstr ""
 
-#: templates/js/modals.js:550 templates/js/modals.js:809
-#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93
-msgid "Close"
-msgstr ""
-
 #: templates/js/modals.js:760
 msgid "Invalid response from server"
 msgstr ""
@@ -6974,6 +7007,10 @@ msgstr ""
 msgid "Form errors exist"
 msgstr ""
 
+#: templates/navbar.html:13
+msgid "Toggle navigation"
+msgstr ""
+
 #: templates/navbar.html:33
 msgid "Buy"
 msgstr ""
@@ -6986,7 +7023,7 @@ msgstr ""
 msgid "Scan Barcode"
 msgstr ""
 
-#: templates/navbar.html:77 users/models.py:36
+#: templates/navbar.html:77 users/models.py:38
 msgid "Admin"
 msgstr ""
 
@@ -7118,43 +7155,43 @@ msgstr ""
 msgid "Print test reports"
 msgstr ""
 
-#: templates/stock_table.html:54
+#: templates/stock_table.html:55
 msgid "Add to selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:55
+#: templates/stock_table.html:56
 msgid "Remove from selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:56
+#: templates/stock_table.html:57
 msgid "Stocktake selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move stock"
 msgstr ""
 
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order selected items"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change status"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change stock status"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete selected items"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete Stock"
 msgstr ""
 
@@ -7190,35 +7227,34 @@ msgstr ""
 msgid "Important dates"
 msgstr ""
 
-#: users/models.py:167
+#: users/models.py:170
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:175
+#: users/models.py:178
 msgid "Group"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "View"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:180
+#: users/models.py:183
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Change"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:184
+#: users/models.py:187
 msgid "Permission to delete items"
 msgstr ""
-
diff --git a/InvenTree/locale/ja/LC_MESSAGES/django.mo b/InvenTree/locale/ja/LC_MESSAGES/django.mo
index 314bedb17d5caa2d590b5786ba725a4f8d4dab37..c8fe740f6ac643152691b6a731fd9ff34fc513db 100644
GIT binary patch
delta 92
zcmey$bdYI+3M2bORgH-;T3$v5MuxfuCb~w33I>)|#>QMeiNz(lAw`LK#W{&3`9)R=
nK#{!k(!}&s-H_D8Tq^~y#Dc`U)Z$dQxRpXyV!T(t#IFqi_U#?X

delta 145
zcmX@e^p$CX3ZwNzRSo_CM`v$GcUOfl*Pvief4_;oTKSQ#jzPM<{<<!X3LgGezMk4q
z{(i1pK8eL8x*<i0dBr)2CHX~G3T~l3J_>%0zOD*3uD*_*J`Rp9E<vur!FE8UdFiEz
m>8ZLQsfoE(3O<g0?x7$%Y<zqiax(Sui_#HltQ005YybdA%q)EX

diff --git a/InvenTree/locale/ja/LC_MESSAGES/django.po b/InvenTree/locale/ja/LC_MESSAGES/django.po
index 14111c5c02..23cec9e6fb 100644
--- a/InvenTree/locale/ja/LC_MESSAGES/django.po
+++ b/InvenTree/locale/ja/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-21 09:17+0000\n"
+"POT-Creation-Date: 2021-05-05 17:33+1000\n"
 "PO-Revision-Date: 2021-04-21 09:33\n"
 "Last-Translator: \n"
 "Language-Team: Japanese\n"
@@ -67,35 +67,36 @@ msgstr ""
 msgid "Select Category"
 msgstr ""
 
-#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344
-#: stock/views.py:1763
-msgid "Invalid quantity provided"
-msgstr ""
-
-#: InvenTree/helpers.py:378
-msgid "Empty serial number string"
-msgstr ""
-
-#: InvenTree/helpers.py:399
+#: InvenTree/helpers.py:377
 #, python-brace-format
 msgid "Duplicate serial: {n}"
 msgstr ""
 
-#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409
+#: InvenTree/helpers.py:384 order/models.py:245 order/models.py:353
+#: stock/views.py:1763
+msgid "Invalid quantity provided"
+msgstr ""
+
+#: InvenTree/helpers.py:387
+msgid "Empty serial number string"
+msgstr ""
+
+#: InvenTree/helpers.py:409 InvenTree/helpers.py:412 InvenTree/helpers.py:415
+#: InvenTree/helpers.py:440
 #, python-brace-format
 msgid "Invalid group: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:414
+#: InvenTree/helpers.py:445
 #, python-brace-format
 msgid "Duplicate serial: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:422
+#: InvenTree/helpers.py:453
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:426
+#: InvenTree/helpers.py:457
 #, python-brace-format
 msgid "Number of unique serial number ({s}) must match quantity ({q})"
 msgstr ""
@@ -140,7 +141,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_base.html:72
 #: company/templates/company/supplier_part_base.html:71
 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108
-#: order/models.py:101 order/templates/order/purchase_order_detail.html:168
+#: order/models.py:101 order/templates/order/purchase_order_detail.html:143
 #: part/models.py:710 part/templates/part/detail.html:54
 #: part/templates/part/set_category.html:14 report/models.py:192
 #: report/models.py:505 report/models.py:544
@@ -165,23 +166,23 @@ msgstr ""
 msgid "parent"
 msgstr ""
 
-#: InvenTree/settings.py:493
+#: InvenTree/settings.py:491
 msgid "English"
 msgstr ""
 
-#: InvenTree/settings.py:494
+#: InvenTree/settings.py:492
 msgid "French"
 msgstr ""
 
-#: InvenTree/settings.py:495
+#: InvenTree/settings.py:493
 msgid "German"
 msgstr ""
 
-#: InvenTree/settings.py:496
+#: InvenTree/settings.py:494
 msgid "Polish"
 msgstr ""
 
-#: InvenTree/settings.py:497
+#: InvenTree/settings.py:495
 msgid "Turkish"
 msgstr ""
 
@@ -375,16 +376,16 @@ msgstr ""
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1227
+#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1241
 #: build/templates/build/allocation_card.html:23
 #: build/templates/build/auto_allocate.html:17
 #: build/templates/build/build_base.html:123
 #: build/templates/build/detail.html:31 common/models.py:703
 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77
 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261
-#: order/forms.py:278 order/models.py:593 order/models.py:784
+#: order/forms.py:278 order/models.py:603 order/models.py:794
 #: order/templates/order/order_wizard/select_parts.html:32
-#: order/templates/order/purchase_order_detail.html:200
+#: order/templates/order/purchase_order_detail.html:175
 #: order/templates/order/sales_order_detail.html:70
 #: order/templates/order/sales_order_detail.html:77
 #: order/templates/order/sales_order_detail.html:159
@@ -458,7 +459,7 @@ msgid "Location of completed parts"
 msgstr ""
 
 #: build/forms.py:215 build/templates/build/build_base.html:128
-#: build/templates/build/detail.html:59 order/models.py:445
+#: build/templates/build/detail.html:59 order/models.py:455
 #: order/templates/order/receive_parts.html:24
 #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252
 #: templates/js/barcode.js:119 templates/js/build.js:770
@@ -508,7 +509,7 @@ msgstr ""
 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183
 #: templates/InvenTree/search.html:185
-#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
+#: templates/InvenTree/settings/tabs.html:31 users/models.py:43
 msgid "Build Orders"
 msgstr ""
 
@@ -516,8 +517,8 @@ msgstr ""
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:127 order/models.py:99 order/models.py:595
-#: order/templates/order/purchase_order_detail.html:195
+#: build/models.py:127 order/models.py:99 order/models.py:605
+#: order/templates/order/purchase_order_detail.html:170
 #: order/templates/order/sales_order_detail.html:219 part/models.py:2187
 #: report/templates/report/inventree_po_report.html:92
 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
@@ -540,10 +541,10 @@ msgstr ""
 
 #: build/models.py:152 build/templates/build/auto_allocate.html:16
 #: build/templates/build/build_base.html:118
-#: build/templates/build/detail.html:26 company/models.py:669
-#: order/models.py:637 order/models.py:669
+#: build/templates/build/detail.html:26 company/models.py:688
+#: order/models.py:647 order/models.py:679
 #: order/templates/order/order_wizard/select_parts.html:30
-#: order/templates/order/purchase_order_detail.html:156
+#: order/templates/order/purchase_order_detail.html:131
 #: order/templates/order/receive_parts.html:19
 #: order/templates/order/sales_order_detail.html:207 part/models.py:321
 #: part/models.py:1876 part/models.py:1888 part/models.py:1906
@@ -628,7 +629,7 @@ msgstr ""
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:223 order/models.py:451
+#: build/models.py:223 order/models.py:461
 msgid "Target completion date"
 msgstr ""
 
@@ -678,9 +679,9 @@ msgstr ""
 #: company/models.py:135 company/models.py:501
 #: company/templates/company/navbar.html:70
 #: company/templates/company/navbar.html:73 order/models.py:123
-#: order/models.py:597 order/templates/order/po_navbar.html:29
+#: order/models.py:607 order/templates/order/po_navbar.html:29
 #: order/templates/order/po_navbar.html:32
-#: order/templates/order/purchase_order_detail.html:234
+#: order/templates/order/purchase_order_detail.html:209
 #: order/templates/order/sales_order_detail.html:264
 #: order/templates/order/so_navbar.html:33
 #: order/templates/order/so_navbar.html:36 part/models.py:871
@@ -713,47 +714,47 @@ msgstr ""
 msgid "Completed build output"
 msgstr ""
 
-#: build/models.py:1118
+#: build/models.py:1132
 msgid "BuildItem must be unique for build, stock_item and install_into"
 msgstr ""
 
-#: build/models.py:1143
+#: build/models.py:1157
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1147
+#: build/models.py:1161
 #, python-brace-format
 msgid "Selected stock item not found in BOM for part '{p}'"
 msgstr ""
 
-#: build/models.py:1151
+#: build/models.py:1165
 #, python-brace-format
 msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
 msgstr ""
 
-#: build/models.py:1158 order/models.py:758
+#: build/models.py:1172 order/models.py:768
 msgid "StockItem is over-allocated"
 msgstr ""
 
-#: build/models.py:1162 order/models.py:761
+#: build/models.py:1176 order/models.py:771
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1166
+#: build/models.py:1180
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1206 stock/templates/stock/item_base.html:306
+#: build/models.py:1220 stock/templates/stock/item_base.html:306
 #: templates/InvenTree/search.html:183 templates/js/build.js:714
 #: templates/navbar.html:29
 msgid "Build"
 msgstr ""
 
-#: build/models.py:1207
+#: build/models.py:1221
 msgid "Build to allocate parts"
 msgstr ""
 
-#: build/models.py:1214 part/templates/part/allocation.html:18
+#: build/models.py:1228 part/templates/part/allocation.html:18
 #: part/templates/part/allocation.html:24
 #: part/templates/part/allocation.html:31
 #: part/templates/part/allocation.html:49
@@ -765,19 +766,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1215
+#: build/models.py:1229
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1228
+#: build/models.py:1242
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1236
+#: build/models.py:1250
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1237
+#: build/models.py:1251
 msgid "Destination stock item"
 msgstr ""
 
@@ -801,7 +802,7 @@ msgstr ""
 msgid "Unallocate stock"
 msgstr ""
 
-#: build/templates/build/allocate.html:26 build/views.py:308 build/views.py:794
+#: build/templates/build/allocate.html:26 build/views.py:319 build/views.py:805
 msgid "Unallocate Stock"
 msgstr ""
 
@@ -811,7 +812,7 @@ msgstr ""
 
 #: build/templates/build/allocate.html:30
 #: company/templates/company/detail_manufacturer_part.html:33
-#: company/templates/company/detail_supplier_part.html:32 order/views.py:794
+#: company/templates/company/detail_supplier_part.html:32 order/views.py:795
 #: part/templates/part/category.html:127
 msgid "Order Parts"
 msgstr ""
@@ -954,7 +955,7 @@ msgid "Progress"
 msgstr ""
 
 #: build/templates/build/build_base.html:160
-#: build/templates/build/detail.html:84 order/models.py:667
+#: build/templates/build/detail.html:84 order/models.py:677
 #: order/templates/order/sales_order_base.html:9
 #: order/templates/order/sales_order_base.html:33
 #: order/templates/order/sales_order_ship.html:25
@@ -1139,7 +1140,7 @@ msgstr ""
 msgid "Alter the quantity of stock allocated to the build output"
 msgstr ""
 
-#: build/templates/build/index.html:28 build/views.py:667
+#: build/templates/build/index.html:28 build/views.py:678
 msgid "New Build Order"
 msgstr ""
 
@@ -1226,141 +1227,145 @@ msgstr ""
 msgid "Create Build Output"
 msgstr ""
 
-#: build/views.py:173 stock/models.py:969 stock/views.py:1789
+#: build/views.py:168
+msgid "Maximum output quantity is "
+msgstr ""
+
+#: build/views.py:184 stock/models.py:969 stock/views.py:1789
 msgid "Serial numbers already exist"
 msgstr ""
 
-#: build/views.py:182
+#: build/views.py:193
 msgid "Serial numbers required for trackable build output"
 msgstr ""
 
-#: build/views.py:248
+#: build/views.py:259
 msgid "Delete Build Output"
 msgstr ""
 
-#: build/views.py:269 build/views.py:359
+#: build/views.py:280 build/views.py:370
 msgid "Confirm unallocation of build stock"
 msgstr ""
 
-#: build/views.py:270 build/views.py:360 stock/views.py:425
+#: build/views.py:281 build/views.py:371 stock/views.py:425
 msgid "Check the confirmation box"
 msgstr ""
 
-#: build/views.py:282
+#: build/views.py:293
 msgid "Build output does not match build"
 msgstr ""
 
-#: build/views.py:284 build/views.py:485
+#: build/views.py:295 build/views.py:496
 msgid "Build output must be specified"
 msgstr ""
 
-#: build/views.py:296
+#: build/views.py:307
 msgid "Build output deleted"
 msgstr ""
 
-#: build/views.py:394
+#: build/views.py:405
 msgid "Complete Build Order"
 msgstr ""
 
-#: build/views.py:400
+#: build/views.py:411
 msgid "Build order cannot be completed - incomplete outputs remain"
 msgstr ""
 
-#: build/views.py:411
+#: build/views.py:422
 msgid "Completed build order"
 msgstr ""
 
-#: build/views.py:427
+#: build/views.py:438
 msgid "Complete Build Output"
 msgstr ""
 
-#: build/views.py:469
+#: build/views.py:480
 msgid "Invalid stock status value selected"
 msgstr ""
 
-#: build/views.py:476
+#: build/views.py:487
 msgid "Quantity to complete cannot exceed build output quantity"
 msgstr ""
 
-#: build/views.py:482
+#: build/views.py:493
 msgid "Confirm completion of incomplete build"
 msgstr ""
 
-#: build/views.py:581
+#: build/views.py:592
 msgid "Build output completed"
 msgstr ""
 
-#: build/views.py:721
+#: build/views.py:732
 msgid "Created new build"
 msgstr ""
 
-#: build/views.py:742
+#: build/views.py:753
 msgid "Edit Build Order Details"
 msgstr ""
 
-#: build/views.py:775
+#: build/views.py:786
 msgid "Edited build"
 msgstr ""
 
-#: build/views.py:784
+#: build/views.py:795
 msgid "Delete Build Order"
 msgstr ""
 
-#: build/views.py:799
+#: build/views.py:810
 msgid "Removed parts from build allocation"
 msgstr ""
 
-#: build/views.py:811
+#: build/views.py:822
 msgid "Allocate stock to build output"
 msgstr ""
 
-#: build/views.py:854
+#: build/views.py:865
 msgid "Item must be currently in stock"
 msgstr ""
 
-#: build/views.py:860
+#: build/views.py:871
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/views.py:861 templates/js/bom.js:230 templates/js/build.js:575
+#: build/views.py:872 templates/js/bom.js:230 templates/js/build.js:575
 #: templates/js/build.js:838 templates/js/build.js:1021
 msgid "Available"
 msgstr ""
 
-#: build/views.py:863
+#: build/views.py:874
 msgid "Stock item must be selected"
 msgstr ""
 
-#: build/views.py:1026
+#: build/views.py:1037
 msgid "Edit Stock Allocation"
 msgstr ""
 
-#: build/views.py:1030
+#: build/views.py:1041
 msgid "Updated Build Item"
 msgstr ""
 
-#: build/views.py:1059
+#: build/views.py:1070
 msgid "Add Build Order Attachment"
 msgstr ""
 
-#: build/views.py:1072 order/views.py:110 order/views.py:162 part/views.py:172
+#: build/views.py:1083 order/views.py:110 order/views.py:162 part/views.py:172
 #: stock/views.py:277
 msgid "Added attachment"
 msgstr ""
 
-#: build/views.py:1108 order/views.py:189 order/views.py:210
+#: build/views.py:1119 order/views.py:189 order/views.py:210
 msgid "Edit Attachment"
 msgstr ""
 
-#: build/views.py:1118 order/views.py:193 order/views.py:214
+#: build/views.py:1129 order/views.py:193 order/views.py:214
 msgid "Attachment updated"
 msgstr ""
 
-#: build/views.py:1128 order/views.py:229 order/views.py:243
+#: build/views.py:1139 order/views.py:229 order/views.py:243
 msgid "Delete Attachment"
 msgstr ""
 
-#: build/views.py:1133 order/views.py:235 order/views.py:249 stock/views.py:333
+#: build/views.py:1144 order/views.py:235 order/views.py:249 stock/views.py:333
 msgid "Deleted attachment"
 msgstr ""
 
@@ -1766,7 +1771,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_detail.html:26
 #: company/templates/company/supplier_part_base.html:101
 #: company/templates/company/supplier_part_detail.html:35
-#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171
+#: order/templates/order/purchase_order_detail.html:158 part/bom.py:171
 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307
 msgid "MPN"
 msgstr ""
@@ -1865,7 +1870,7 @@ msgstr ""
 msgid "Base Part"
 msgstr ""
 
-#: company/models.py:312 company/models.py:463 order/views.py:1372
+#: company/models.py:312 company/models.py:463 order/views.py:1384
 msgid "Select part"
 msgstr ""
 
@@ -1905,7 +1910,7 @@ msgstr ""
 
 #: company/models.py:475 company/templates/company/supplier_part_base.html:88
 #: company/templates/company/supplier_part_detail.html:26
-#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176
+#: order/templates/order/purchase_order_detail.html:149 part/bom.py:176
 #: part/bom.py:287
 msgid "SKU"
 msgstr ""
@@ -2017,7 +2022,8 @@ msgstr ""
 
 #: company/templates/company/delete.html:12
 #, python-format
-msgid "There are %(count)s parts sourced from this company.<br>\n"
+msgid ""
+"There are %(count)s parts sourced from this company.<br>\n"
 "If this supplier is deleted, these supplier part entries will also be deleted."
 msgstr ""
 
@@ -2033,7 +2039,7 @@ msgstr ""
 msgid "Uses default currency"
 msgstr ""
 
-#: company/templates/company/detail.html:67 order/models.py:440
+#: company/templates/company/detail.html:67 order/models.py:450
 #: order/templates/order/sales_order_base.html:92 stock/models.py:415
 #: stock/models.py:416 stock/templates/stock/item_base.html:251
 #: templates/js/company.js:40 templates/js/order.js:267
@@ -2122,13 +2128,13 @@ msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:21
 #: order/templates/order/order_wizard/select_parts.html:42
-#: order/templates/order/purchase_order_detail.html:75
+#: order/templates/order/purchase_order_detail.html:50
 msgid "Create new supplier part"
 msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:22
 #: company/templates/company/manufacturer_part_suppliers.html:17
-#: order/templates/order/purchase_order_detail.html:74
+#: order/templates/order/purchase_order_detail.html:49
 #: part/templates/part/supplier.html:17 templates/js/stock.js:1163
 msgid "New Supplier Part"
 msgstr ""
@@ -2226,7 +2232,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_suppliers.html:22
 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44
 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22
-#: stock/views.py:1002 users/models.py:184
+#: stock/views.py:1002 users/models.py:187
 msgid "Delete"
 msgstr ""
 
@@ -2252,7 +2258,7 @@ msgstr ""
 #: stock/templates/stock/location_navbar.html:22
 #: stock/templates/stock/location_navbar.html:29
 #: templates/InvenTree/search.html:198 templates/js/stock.js:968
-#: templates/stats.html:72 templates/stats.html:81 users/models.py:40
+#: templates/stats.html:72 templates/stats.html:81 users/models.py:42
 msgid "Stock Items"
 msgstr ""
 
@@ -2266,7 +2272,7 @@ msgstr ""
 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228
 #: templates/InvenTree/search.html:345
 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
-#: users/models.py:43
+#: users/models.py:45
 msgid "Sales Orders"
 msgstr ""
 
@@ -2278,7 +2284,7 @@ msgstr ""
 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:205
 #: templates/InvenTree/search.html:325
 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
-#: users/models.py:42
+#: users/models.py:44
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2357,7 +2363,7 @@ msgid "Pricing Information"
 msgstr ""
 
 #: company/templates/company/supplier_part_pricing.html:19 company/views.py:794
-#: part/templates/part/sale_prices.html:17 part/views.py:2624
+#: part/templates/part/sale_prices.html:17 part/views.py:2636
 msgid "Add Price Break"
 msgstr ""
 
@@ -2467,15 +2473,15 @@ msgstr ""
 msgid "Delete Supplier Part"
 msgstr ""
 
-#: company/views.py:799 part/views.py:2628
+#: company/views.py:799 part/views.py:2640
 msgid "Added new price break"
 msgstr ""
 
-#: company/views.py:855 part/views.py:2672
+#: company/views.py:855 part/views.py:2684
 msgid "Edit Price Break"
 msgstr ""
 
-#: company/views.py:870 part/views.py:2686
+#: company/views.py:870 part/views.py:2698
 msgid "Delete Price Break"
 msgstr ""
 
@@ -2565,7 +2571,7 @@ msgstr ""
 msgid "Enter sales order number"
 msgstr ""
 
-#: order/forms.py:145 order/models.py:452
+#: order/forms.py:145 order/models.py:462
 msgid "Target date for order completion. Order will be overdue after this date."
 msgstr ""
 
@@ -2601,7 +2607,7 @@ msgstr ""
 msgid "Order notes"
 msgstr ""
 
-#: order/models.py:182 order/models.py:445
+#: order/models.py:182 order/models.py:455
 msgid "Purchase order status"
 msgstr ""
 
@@ -2642,8 +2648,8 @@ msgstr ""
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:243 order/models.py:342 part/views.py:1586
-#: stock/models.py:270 stock/models.py:953
+#: order/models.py:243 part/views.py:1586 stock/models.py:270
+#: stock/models.py:953
 msgid "Quantity must be greater than zero"
 msgstr ""
 
@@ -2651,120 +2657,128 @@ msgstr ""
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:337
+#: order/models.py:344
 msgid "Lines can only be received against an order marked as 'Placed'"
 msgstr ""
 
-#: order/models.py:359
+#: order/models.py:348
+msgid "Quantity must be an integer"
+msgstr ""
+
+#: order/models.py:350
+msgid "Quantity must be a positive number"
+msgstr ""
+
+#: order/models.py:369
 msgid "Received items"
 msgstr ""
 
-#: order/models.py:441
+#: order/models.py:451
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:455 templates/js/order.js:303
+#: order/models.py:465 templates/js/order.js:303
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:462
+#: order/models.py:472
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:506
+#: order/models.py:516
 msgid "SalesOrder cannot be shipped as it is not currently pending"
 msgstr ""
 
-#: order/models.py:593
+#: order/models.py:603
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:595
+#: order/models.py:605
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:597
+#: order/models.py:607
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:623 order/models.py:667
+#: order/models.py:633 order/models.py:677
 #: part/templates/part/allocation.html:17
 #: part/templates/part/allocation.html:45
 msgid "Order"
 msgstr ""
 
-#: order/models.py:624 order/templates/order/order_base.html:9
+#: order/models.py:634 order/templates/order/order_base.html:9
 #: order/templates/order/order_base.html:24
 #: report/templates/report/inventree_po_report.html:77
 #: stock/templates/stock/item_base.html:313 templates/js/order.js:148
 msgid "Purchase Order"
 msgstr ""
 
-#: order/models.py:638
+#: order/models.py:648
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:641 order/templates/order/order_base.html:131
-#: order/templates/order/purchase_order_detail.html:214
+#: order/models.py:651 order/templates/order/order_base.html:131
+#: order/templates/order/purchase_order_detail.html:189
 #: order/templates/order/receive_parts.html:22
 #: order/templates/order/sales_order_base.html:131
 msgid "Received"
 msgstr ""
 
-#: order/models.py:641
+#: order/models.py:651
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:648 stock/models.py:508
+#: order/models.py:658 stock/models.py:508
 #: stock/templates/stock/item_base.html:320
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:649
+#: order/models.py:659
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:743 order/models.py:745
+#: order/models.py:753 order/models.py:755
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:749
+#: order/models.py:759
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:751
+#: order/models.py:761
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:754
+#: order/models.py:764
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:764
+#: order/models.py:774
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:769
+#: order/models.py:779
 msgid "Line"
 msgstr ""
 
-#: order/models.py:780
+#: order/models.py:790
 msgid "Item"
 msgstr ""
 
-#: order/models.py:781
+#: order/models.py:791
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:784
+#: order/models.py:794
 msgid "Enter stock allocation quantity"
 msgstr ""
 
@@ -2812,9 +2826,22 @@ msgstr ""
 msgid "Issued"
 msgstr ""
 
-#: order/templates/order/order_cancel.html:7
-#: order/templates/order/sales_order_cancel.html:9
-msgid "Cancelling this order means that the order will no longer be editable."
+#: order/templates/order/order_base.html:180
+#: order/templates/order/purchase_order_detail.html:100
+#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: stock/templates/stock/location.html:191 templates/js/stock.js:708
+#: templates/js/stock.js:1169
+msgid "New Location"
+msgstr ""
+
+#: order/templates/order/order_base.html:181
+#: order/templates/order/purchase_order_detail.html:101
+#: stock/templates/stock/location.html:42
+msgid "Create new stock location"
+msgstr ""
+
+#: order/templates/order/order_cancel.html:8
+msgid "Cancelling this order means that the order and line items will no longer be editable."
 msgstr ""
 
 #: order/templates/order/order_complete.html:7
@@ -2826,10 +2853,10 @@ msgid "This order has line items which have not been marked as received."
 msgstr ""
 
 #: order/templates/order/order_complete.html:11
-msgid "Marking this order as complete will remove these line items."
+msgid "Completing this order means that the order and line items will no longer be editable."
 msgstr ""
 
-#: order/templates/order/order_issue.html:7
+#: order/templates/order/order_issue.html:8
 msgid "After placing this purchase order, line items will no longer be editable."
 msgstr ""
 
@@ -2881,11 +2908,13 @@ msgid "Select Purchase Order"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:45
-msgid "Create new purchase order for {{ supplier.name }}"
+#, python-format
+msgid "Create new purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:68
-msgid "Select a purchase order for"
+#, python-format
+msgid "Select a purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/po_attachments.html:12
@@ -2907,43 +2936,29 @@ msgid "Purchase Order Items"
 msgstr ""
 
 #: order/templates/order/purchase_order_detail.html:24
-#: order/templates/order/sales_order_detail.html:22 order/views.py:1108
-#: order/views.py:1191
+#: order/templates/order/sales_order_detail.html:22 order/views.py:1120
+#: order/views.py:1203
 msgid "Add Line Item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:45
-#: order/templates/order/purchase_order_detail.html:125
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
-#: stock/templates/stock/location.html:191 templates/js/stock.js:708
-#: templates/js/stock.js:1169
-msgid "New Location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:46
-#: order/templates/order/purchase_order_detail.html:126
-#: stock/templates/stock/location.html:42
-msgid "Create new stock location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:139
+#: order/templates/order/purchase_order_detail.html:114
 msgid "No line items found"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:205
+#: order/templates/order/purchase_order_detail.html:180
 msgid "Unit Price"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:246
+#: order/templates/order/purchase_order_detail.html:221
 #: order/templates/order/sales_order_detail.html:294
 msgid "Edit line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:247
+#: order/templates/order/purchase_order_detail.html:222
 msgid "Delete line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:252
+#: order/templates/order/purchase_order_detail.html:227
 msgid "Receive line item"
 msgstr ""
 
@@ -2966,7 +2981,7 @@ msgstr ""
 #: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
 #: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577
 #: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68
-#: users/models.py:38
+#: users/models.py:40
 msgid "Parts"
 msgstr ""
 
@@ -3019,6 +3034,10 @@ msgstr ""
 msgid "Warning"
 msgstr ""
 
+#: order/templates/order/sales_order_cancel.html:9
+msgid "Cancelling this order means that the order will no longer be editable."
+msgstr ""
+
 #: order/templates/order/sales_order_detail.html:13
 msgid "Sales Order Items"
 msgstr ""
@@ -3213,65 +3232,65 @@ msgstr ""
 msgid "No lines specified"
 msgstr ""
 
-#: order/views.py:1060
+#: order/views.py:1069
 #, python-brace-format
 msgid "Ordered {n} parts"
 msgstr ""
 
-#: order/views.py:1117
+#: order/views.py:1129
 msgid "Supplier part must be specified"
 msgstr ""
 
-#: order/views.py:1123
+#: order/views.py:1135
 msgid "Supplier must match for Part and Order"
 msgstr ""
 
-#: order/views.py:1242 order/views.py:1260
+#: order/views.py:1254 order/views.py:1272
 msgid "Edit Line Item"
 msgstr ""
 
-#: order/views.py:1276 order/views.py:1288
+#: order/views.py:1288 order/views.py:1300
 msgid "Delete Line Item"
 msgstr ""
 
-#: order/views.py:1281 order/views.py:1293
+#: order/views.py:1293 order/views.py:1305
 msgid "Deleted line item"
 msgstr ""
 
-#: order/views.py:1306
+#: order/views.py:1318
 msgid "Allocate Serial Numbers"
 msgstr ""
 
-#: order/views.py:1351
+#: order/views.py:1363
 #, python-brace-format
 msgid "Allocated {n} items"
 msgstr ""
 
-#: order/views.py:1367
+#: order/views.py:1379
 msgid "Select line item"
 msgstr ""
 
-#: order/views.py:1398
+#: order/views.py:1410
 msgid "No matching item for serial"
 msgstr ""
 
-#: order/views.py:1408
+#: order/views.py:1420
 msgid "is not in stock"
 msgstr ""
 
-#: order/views.py:1416
+#: order/views.py:1428
 msgid "already allocated to an order"
 msgstr ""
 
-#: order/views.py:1470
+#: order/views.py:1482
 msgid "Allocate Stock to Order"
 msgstr ""
 
-#: order/views.py:1544
+#: order/views.py:1556
 msgid "Edit Allocation Quantity"
 msgstr ""
 
-#: order/views.py:1559
+#: order/views.py:1571
 msgid "Remove allocation"
 msgstr ""
 
@@ -3457,7 +3476,7 @@ msgstr ""
 #: part/models.py:83 part/templates/part/category.html:23
 #: part/templates/part/category.html:94 part/templates/part/category.html:141
 #: templates/InvenTree/search.html:127 templates/stats.html:63
-#: users/models.py:37
+#: users/models.py:39
 msgid "Part Categories"
 msgstr ""
 
@@ -4004,7 +4023,7 @@ msgstr ""
 msgid "All parts"
 msgstr ""
 
-#: part/templates/part/category.html:29 part/views.py:2270
+#: part/templates/part/category.html:29 part/views.py:2282
 msgid "Create new part category"
 msgstr ""
 
@@ -4694,63 +4713,63 @@ msgstr ""
 msgid "Part Pricing"
 msgstr ""
 
-#: part/views.py:2069
+#: part/views.py:2081
 msgid "Create Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2079
+#: part/views.py:2091
 msgid "Edit Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2086
+#: part/views.py:2098
 msgid "Delete Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2094
+#: part/views.py:2106
 msgid "Create Part Parameter"
 msgstr ""
 
-#: part/views.py:2144
+#: part/views.py:2156
 msgid "Edit Part Parameter"
 msgstr ""
 
-#: part/views.py:2158
+#: part/views.py:2170
 msgid "Delete Part Parameter"
 msgstr ""
 
-#: part/views.py:2218
+#: part/views.py:2230
 msgid "Edit Part Category"
 msgstr ""
 
-#: part/views.py:2256
+#: part/views.py:2268
 msgid "Delete Part Category"
 msgstr ""
 
-#: part/views.py:2262
+#: part/views.py:2274
 msgid "Part category was deleted"
 msgstr ""
 
-#: part/views.py:2314
+#: part/views.py:2326
 msgid "Create Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2415
+#: part/views.py:2427
 msgid "Edit Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2471
+#: part/views.py:2483
 msgid "Delete Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2490
+#: part/views.py:2502
 msgid "Create BOM Item"
 msgstr ""
 
-#: part/views.py:2560
+#: part/views.py:2572
 msgid "Edit BOM item"
 msgstr ""
 
-#: part/views.py:2616
+#: part/views.py:2628
 msgid "Confim BOM item deletion"
 msgstr ""
 
@@ -5301,15 +5320,15 @@ msgid "Stock adjustment actions"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:164
-#: stock/templates/stock/location.html:65 templates/stock_table.html:56
+#: stock/templates/stock/location.html:65 templates/stock_table.html:57
 msgid "Count stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54
+#: stock/templates/stock/item_base.html:167 templates/stock_table.html:55
 msgid "Add stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55
+#: stock/templates/stock/item_base.html:170 templates/stock_table.html:56
 msgid "Remove stock"
 msgstr ""
 
@@ -5503,7 +5522,7 @@ msgid "Stock Details"
 msgstr ""
 
 #: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279
-#: templates/stats.html:76 users/models.py:39
+#: templates/stats.html:76 users/models.py:41
 msgid "Stock Locations"
 msgstr ""
 
@@ -5689,7 +5708,7 @@ msgstr ""
 msgid "Add Stock Items"
 msgstr ""
 
-#: stock/views.py:1001 users/models.py:180
+#: stock/views.py:1001 users/models.py:183
 msgid "Add"
 msgstr ""
 
@@ -5867,6 +5886,31 @@ msgstr ""
 msgid "No stock location set"
 msgstr ""
 
+#: templates/InvenTree/settings/appearance.html:10
+msgid "Theme Settings"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:17
+msgid "Color Themes"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:29
+#, python-format
+msgid ""
+"\n"
+"        The CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
+"        Please select another color theme :)\n"
+"    "
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:39
+msgid "Language"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:61
+msgid "Set Language"
+msgstr ""
+
 #: templates/InvenTree/settings/build.html:10
 msgid "Build Order Settings"
 msgstr ""
@@ -5950,7 +5994,7 @@ msgstr ""
 msgid "Stock Settings"
 msgstr ""
 
-#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49
+#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:50
 msgid "Stock Options"
 msgstr ""
 
@@ -5964,7 +6008,7 @@ msgid "Account"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:9
-msgid "Theme"
+msgid "Appearance"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:13
@@ -5983,22 +6027,6 @@ msgstr ""
 msgid "Categories"
 msgstr ""
 
-#: templates/InvenTree/settings/theme.html:10
-msgid "Theme Settings"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:17
-msgid "Color Themes"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:29
-#, python-format
-msgid "\n"
-"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
-"\t\tPlease select another color theme :)\n"
-"\t"
-msgstr ""
-
 #: templates/InvenTree/settings/user.html:16
 msgid "User Information"
 msgstr ""
@@ -6061,13 +6089,23 @@ msgid "View Code on GitHub"
 msgstr ""
 
 #: templates/about.html:63
-msgid "Get the App"
+msgid "Credits"
 msgstr ""
 
 #: templates/about.html:68
+msgid "Mobile App"
+msgstr ""
+
+#: templates/about.html:73
 msgid "Submit Bug Report"
 msgstr ""
 
+#: templates/about.html:82 templates/js/modals.js:550
+#: templates/js/modals.js:809 templates/modals.html:28 templates/modals.html:52
+#: templates/modals.html:93
+msgid "Close"
+msgstr ""
+
 #: templates/attachment_table.html:6
 msgid "Add Attachment"
 msgstr ""
@@ -6263,7 +6301,7 @@ msgid "Quantity Per"
 msgstr ""
 
 #: templates/js/build.js:638 templates/js/build.js:1056
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order stock"
 msgstr ""
 
@@ -6396,11 +6434,6 @@ msgstr ""
 msgid "Submit"
 msgstr ""
 
-#: templates/js/modals.js:550 templates/js/modals.js:809
-#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93
-msgid "Close"
-msgstr ""
-
 #: templates/js/modals.js:760
 msgid "Invalid response from server"
 msgstr ""
@@ -6974,6 +7007,10 @@ msgstr ""
 msgid "Form errors exist"
 msgstr ""
 
+#: templates/navbar.html:13
+msgid "Toggle navigation"
+msgstr ""
+
 #: templates/navbar.html:33
 msgid "Buy"
 msgstr ""
@@ -6986,7 +7023,7 @@ msgstr ""
 msgid "Scan Barcode"
 msgstr ""
 
-#: templates/navbar.html:77 users/models.py:36
+#: templates/navbar.html:77 users/models.py:38
 msgid "Admin"
 msgstr ""
 
@@ -7118,43 +7155,43 @@ msgstr ""
 msgid "Print test reports"
 msgstr ""
 
-#: templates/stock_table.html:54
+#: templates/stock_table.html:55
 msgid "Add to selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:55
+#: templates/stock_table.html:56
 msgid "Remove from selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:56
+#: templates/stock_table.html:57
 msgid "Stocktake selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move stock"
 msgstr ""
 
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order selected items"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change status"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change stock status"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete selected items"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete Stock"
 msgstr ""
 
@@ -7190,34 +7227,34 @@ msgstr ""
 msgid "Important dates"
 msgstr ""
 
-#: users/models.py:167
+#: users/models.py:170
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:175
+#: users/models.py:178
 msgid "Group"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "View"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:180
+#: users/models.py:183
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Change"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:184
+#: users/models.py:187
 msgid "Permission to delete items"
 msgstr ""
diff --git a/InvenTree/locale/pl/LC_MESSAGES/django.mo b/InvenTree/locale/pl/LC_MESSAGES/django.mo
index 16fcd00009b4b2229c050ee6bcb41074b1b3e6a5..89d5c273e3d431e7842a317bfebddcdbe6cfb0ff 100644
GIT binary patch
delta 91
zcmeBUxxqX^g>l|QRgH-;S{_CQMuxfuCb~w33I>)|#>QMeiNz(lAw`LK#W{&3`9)R=
mK#{!k(!}&s-H_D8Tq}iu{G80<47jM3LP1V^fX~LSl8gZF{T(I%

delta 162
zcmcb?+{ZFOh4IQnRSo_CM`v$GcUOfl*Pvief4_;oTJ@2xjzPM<{<<!X3LgGezMk4q
z{(i1pK8eL8x*<i0dBr)2CHX~G3T~l3J_>%0zOD*3uD*_*J`Rp9E<vur!FE8UdFiEz
z>8ZLQsfoE(3O<g0?x7$%Y<zqiax(Sui_#HltQ5F>J$+qu!%~ZiGxPJT6bv_>=VSx`
Dk6tlh

diff --git a/InvenTree/locale/pl/LC_MESSAGES/django.po b/InvenTree/locale/pl/LC_MESSAGES/django.po
index 8f82a13ba3..edc3b32d2b 100644
--- a/InvenTree/locale/pl/LC_MESSAGES/django.po
+++ b/InvenTree/locale/pl/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-21 09:17+0000\n"
+"POT-Creation-Date: 2021-05-05 17:33+1000\n"
 "PO-Revision-Date: 2021-04-21 09:33\n"
 "Last-Translator: \n"
 "Language-Team: Polish\n"
@@ -67,35 +67,36 @@ msgstr ""
 msgid "Select Category"
 msgstr ""
 
-#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344
-#: stock/views.py:1763
-msgid "Invalid quantity provided"
-msgstr ""
-
-#: InvenTree/helpers.py:378
-msgid "Empty serial number string"
-msgstr ""
-
-#: InvenTree/helpers.py:399
+#: InvenTree/helpers.py:377
 #, python-brace-format
 msgid "Duplicate serial: {n}"
 msgstr ""
 
-#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409
+#: InvenTree/helpers.py:384 order/models.py:245 order/models.py:353
+#: stock/views.py:1763
+msgid "Invalid quantity provided"
+msgstr ""
+
+#: InvenTree/helpers.py:387
+msgid "Empty serial number string"
+msgstr ""
+
+#: InvenTree/helpers.py:409 InvenTree/helpers.py:412 InvenTree/helpers.py:415
+#: InvenTree/helpers.py:440
 #, python-brace-format
 msgid "Invalid group: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:414
+#: InvenTree/helpers.py:445
 #, python-brace-format
 msgid "Duplicate serial: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:422
+#: InvenTree/helpers.py:453
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:426
+#: InvenTree/helpers.py:457
 #, python-brace-format
 msgid "Number of unique serial number ({s}) must match quantity ({q})"
 msgstr ""
@@ -140,7 +141,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_base.html:72
 #: company/templates/company/supplier_part_base.html:71
 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108
-#: order/models.py:101 order/templates/order/purchase_order_detail.html:168
+#: order/models.py:101 order/templates/order/purchase_order_detail.html:143
 #: part/models.py:710 part/templates/part/detail.html:54
 #: part/templates/part/set_category.html:14 report/models.py:192
 #: report/models.py:505 report/models.py:544
@@ -165,23 +166,23 @@ msgstr ""
 msgid "parent"
 msgstr ""
 
-#: InvenTree/settings.py:493
+#: InvenTree/settings.py:491
 msgid "English"
 msgstr ""
 
-#: InvenTree/settings.py:494
+#: InvenTree/settings.py:492
 msgid "French"
 msgstr ""
 
-#: InvenTree/settings.py:495
+#: InvenTree/settings.py:493
 msgid "German"
 msgstr ""
 
-#: InvenTree/settings.py:496
+#: InvenTree/settings.py:494
 msgid "Polish"
 msgstr ""
 
-#: InvenTree/settings.py:497
+#: InvenTree/settings.py:495
 msgid "Turkish"
 msgstr ""
 
@@ -375,16 +376,16 @@ msgstr ""
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1227
+#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1241
 #: build/templates/build/allocation_card.html:23
 #: build/templates/build/auto_allocate.html:17
 #: build/templates/build/build_base.html:123
 #: build/templates/build/detail.html:31 common/models.py:703
 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77
 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261
-#: order/forms.py:278 order/models.py:593 order/models.py:784
+#: order/forms.py:278 order/models.py:603 order/models.py:794
 #: order/templates/order/order_wizard/select_parts.html:32
-#: order/templates/order/purchase_order_detail.html:200
+#: order/templates/order/purchase_order_detail.html:175
 #: order/templates/order/sales_order_detail.html:70
 #: order/templates/order/sales_order_detail.html:77
 #: order/templates/order/sales_order_detail.html:159
@@ -458,7 +459,7 @@ msgid "Location of completed parts"
 msgstr ""
 
 #: build/forms.py:215 build/templates/build/build_base.html:128
-#: build/templates/build/detail.html:59 order/models.py:445
+#: build/templates/build/detail.html:59 order/models.py:455
 #: order/templates/order/receive_parts.html:24
 #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252
 #: templates/js/barcode.js:119 templates/js/build.js:770
@@ -508,7 +509,7 @@ msgstr ""
 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183
 #: templates/InvenTree/search.html:185
-#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
+#: templates/InvenTree/settings/tabs.html:31 users/models.py:43
 msgid "Build Orders"
 msgstr ""
 
@@ -516,8 +517,8 @@ msgstr ""
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:127 order/models.py:99 order/models.py:595
-#: order/templates/order/purchase_order_detail.html:195
+#: build/models.py:127 order/models.py:99 order/models.py:605
+#: order/templates/order/purchase_order_detail.html:170
 #: order/templates/order/sales_order_detail.html:219 part/models.py:2187
 #: report/templates/report/inventree_po_report.html:92
 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
@@ -540,10 +541,10 @@ msgstr ""
 
 #: build/models.py:152 build/templates/build/auto_allocate.html:16
 #: build/templates/build/build_base.html:118
-#: build/templates/build/detail.html:26 company/models.py:669
-#: order/models.py:637 order/models.py:669
+#: build/templates/build/detail.html:26 company/models.py:688
+#: order/models.py:647 order/models.py:679
 #: order/templates/order/order_wizard/select_parts.html:30
-#: order/templates/order/purchase_order_detail.html:156
+#: order/templates/order/purchase_order_detail.html:131
 #: order/templates/order/receive_parts.html:19
 #: order/templates/order/sales_order_detail.html:207 part/models.py:321
 #: part/models.py:1876 part/models.py:1888 part/models.py:1906
@@ -628,7 +629,7 @@ msgstr ""
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:223 order/models.py:451
+#: build/models.py:223 order/models.py:461
 msgid "Target completion date"
 msgstr ""
 
@@ -678,9 +679,9 @@ msgstr ""
 #: company/models.py:135 company/models.py:501
 #: company/templates/company/navbar.html:70
 #: company/templates/company/navbar.html:73 order/models.py:123
-#: order/models.py:597 order/templates/order/po_navbar.html:29
+#: order/models.py:607 order/templates/order/po_navbar.html:29
 #: order/templates/order/po_navbar.html:32
-#: order/templates/order/purchase_order_detail.html:234
+#: order/templates/order/purchase_order_detail.html:209
 #: order/templates/order/sales_order_detail.html:264
 #: order/templates/order/so_navbar.html:33
 #: order/templates/order/so_navbar.html:36 part/models.py:871
@@ -713,47 +714,47 @@ msgstr ""
 msgid "Completed build output"
 msgstr ""
 
-#: build/models.py:1118
+#: build/models.py:1132
 msgid "BuildItem must be unique for build, stock_item and install_into"
 msgstr ""
 
-#: build/models.py:1143
+#: build/models.py:1157
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1147
+#: build/models.py:1161
 #, python-brace-format
 msgid "Selected stock item not found in BOM for part '{p}'"
 msgstr ""
 
-#: build/models.py:1151
+#: build/models.py:1165
 #, python-brace-format
 msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
 msgstr ""
 
-#: build/models.py:1158 order/models.py:758
+#: build/models.py:1172 order/models.py:768
 msgid "StockItem is over-allocated"
 msgstr ""
 
-#: build/models.py:1162 order/models.py:761
+#: build/models.py:1176 order/models.py:771
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1166
+#: build/models.py:1180
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1206 stock/templates/stock/item_base.html:306
+#: build/models.py:1220 stock/templates/stock/item_base.html:306
 #: templates/InvenTree/search.html:183 templates/js/build.js:714
 #: templates/navbar.html:29
 msgid "Build"
 msgstr ""
 
-#: build/models.py:1207
+#: build/models.py:1221
 msgid "Build to allocate parts"
 msgstr ""
 
-#: build/models.py:1214 part/templates/part/allocation.html:18
+#: build/models.py:1228 part/templates/part/allocation.html:18
 #: part/templates/part/allocation.html:24
 #: part/templates/part/allocation.html:31
 #: part/templates/part/allocation.html:49
@@ -765,19 +766,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1215
+#: build/models.py:1229
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1228
+#: build/models.py:1242
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1236
+#: build/models.py:1250
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1237
+#: build/models.py:1251
 msgid "Destination stock item"
 msgstr ""
 
@@ -801,7 +802,7 @@ msgstr ""
 msgid "Unallocate stock"
 msgstr ""
 
-#: build/templates/build/allocate.html:26 build/views.py:308 build/views.py:794
+#: build/templates/build/allocate.html:26 build/views.py:319 build/views.py:805
 msgid "Unallocate Stock"
 msgstr ""
 
@@ -811,7 +812,7 @@ msgstr ""
 
 #: build/templates/build/allocate.html:30
 #: company/templates/company/detail_manufacturer_part.html:33
-#: company/templates/company/detail_supplier_part.html:32 order/views.py:794
+#: company/templates/company/detail_supplier_part.html:32 order/views.py:795
 #: part/templates/part/category.html:127
 msgid "Order Parts"
 msgstr ""
@@ -954,7 +955,7 @@ msgid "Progress"
 msgstr ""
 
 #: build/templates/build/build_base.html:160
-#: build/templates/build/detail.html:84 order/models.py:667
+#: build/templates/build/detail.html:84 order/models.py:677
 #: order/templates/order/sales_order_base.html:9
 #: order/templates/order/sales_order_base.html:33
 #: order/templates/order/sales_order_ship.html:25
@@ -1139,7 +1140,7 @@ msgstr ""
 msgid "Alter the quantity of stock allocated to the build output"
 msgstr ""
 
-#: build/templates/build/index.html:28 build/views.py:667
+#: build/templates/build/index.html:28 build/views.py:678
 msgid "New Build Order"
 msgstr ""
 
@@ -1226,141 +1227,145 @@ msgstr ""
 msgid "Create Build Output"
 msgstr ""
 
-#: build/views.py:173 stock/models.py:969 stock/views.py:1789
+#: build/views.py:168
+msgid "Maximum output quantity is "
+msgstr ""
+
+#: build/views.py:184 stock/models.py:969 stock/views.py:1789
 msgid "Serial numbers already exist"
 msgstr ""
 
-#: build/views.py:182
+#: build/views.py:193
 msgid "Serial numbers required for trackable build output"
 msgstr ""
 
-#: build/views.py:248
+#: build/views.py:259
 msgid "Delete Build Output"
 msgstr ""
 
-#: build/views.py:269 build/views.py:359
+#: build/views.py:280 build/views.py:370
 msgid "Confirm unallocation of build stock"
 msgstr ""
 
-#: build/views.py:270 build/views.py:360 stock/views.py:425
+#: build/views.py:281 build/views.py:371 stock/views.py:425
 msgid "Check the confirmation box"
 msgstr ""
 
-#: build/views.py:282
+#: build/views.py:293
 msgid "Build output does not match build"
 msgstr ""
 
-#: build/views.py:284 build/views.py:485
+#: build/views.py:295 build/views.py:496
 msgid "Build output must be specified"
 msgstr ""
 
-#: build/views.py:296
+#: build/views.py:307
 msgid "Build output deleted"
 msgstr ""
 
-#: build/views.py:394
+#: build/views.py:405
 msgid "Complete Build Order"
 msgstr ""
 
-#: build/views.py:400
+#: build/views.py:411
 msgid "Build order cannot be completed - incomplete outputs remain"
 msgstr ""
 
-#: build/views.py:411
+#: build/views.py:422
 msgid "Completed build order"
 msgstr ""
 
-#: build/views.py:427
+#: build/views.py:438
 msgid "Complete Build Output"
 msgstr ""
 
-#: build/views.py:469
+#: build/views.py:480
 msgid "Invalid stock status value selected"
 msgstr ""
 
-#: build/views.py:476
+#: build/views.py:487
 msgid "Quantity to complete cannot exceed build output quantity"
 msgstr ""
 
-#: build/views.py:482
+#: build/views.py:493
 msgid "Confirm completion of incomplete build"
 msgstr ""
 
-#: build/views.py:581
+#: build/views.py:592
 msgid "Build output completed"
 msgstr ""
 
-#: build/views.py:721
+#: build/views.py:732
 msgid "Created new build"
 msgstr ""
 
-#: build/views.py:742
+#: build/views.py:753
 msgid "Edit Build Order Details"
 msgstr ""
 
-#: build/views.py:775
+#: build/views.py:786
 msgid "Edited build"
 msgstr ""
 
-#: build/views.py:784
+#: build/views.py:795
 msgid "Delete Build Order"
 msgstr ""
 
-#: build/views.py:799
+#: build/views.py:810
 msgid "Removed parts from build allocation"
 msgstr ""
 
-#: build/views.py:811
+#: build/views.py:822
 msgid "Allocate stock to build output"
 msgstr ""
 
-#: build/views.py:854
+#: build/views.py:865
 msgid "Item must be currently in stock"
 msgstr ""
 
-#: build/views.py:860
+#: build/views.py:871
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/views.py:861 templates/js/bom.js:230 templates/js/build.js:575
+#: build/views.py:872 templates/js/bom.js:230 templates/js/build.js:575
 #: templates/js/build.js:838 templates/js/build.js:1021
 msgid "Available"
 msgstr ""
 
-#: build/views.py:863
+#: build/views.py:874
 msgid "Stock item must be selected"
 msgstr ""
 
-#: build/views.py:1026
+#: build/views.py:1037
 msgid "Edit Stock Allocation"
 msgstr ""
 
-#: build/views.py:1030
+#: build/views.py:1041
 msgid "Updated Build Item"
 msgstr ""
 
-#: build/views.py:1059
+#: build/views.py:1070
 msgid "Add Build Order Attachment"
 msgstr ""
 
-#: build/views.py:1072 order/views.py:110 order/views.py:162 part/views.py:172
+#: build/views.py:1083 order/views.py:110 order/views.py:162 part/views.py:172
 #: stock/views.py:277
 msgid "Added attachment"
 msgstr ""
 
-#: build/views.py:1108 order/views.py:189 order/views.py:210
+#: build/views.py:1119 order/views.py:189 order/views.py:210
 msgid "Edit Attachment"
 msgstr ""
 
-#: build/views.py:1118 order/views.py:193 order/views.py:214
+#: build/views.py:1129 order/views.py:193 order/views.py:214
 msgid "Attachment updated"
 msgstr ""
 
-#: build/views.py:1128 order/views.py:229 order/views.py:243
+#: build/views.py:1139 order/views.py:229 order/views.py:243
 msgid "Delete Attachment"
 msgstr ""
 
-#: build/views.py:1133 order/views.py:235 order/views.py:249 stock/views.py:333
+#: build/views.py:1144 order/views.py:235 order/views.py:249 stock/views.py:333
 msgid "Deleted attachment"
 msgstr ""
 
@@ -1766,7 +1771,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_detail.html:26
 #: company/templates/company/supplier_part_base.html:101
 #: company/templates/company/supplier_part_detail.html:35
-#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171
+#: order/templates/order/purchase_order_detail.html:158 part/bom.py:171
 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307
 msgid "MPN"
 msgstr ""
@@ -1865,7 +1870,7 @@ msgstr ""
 msgid "Base Part"
 msgstr ""
 
-#: company/models.py:312 company/models.py:463 order/views.py:1372
+#: company/models.py:312 company/models.py:463 order/views.py:1384
 msgid "Select part"
 msgstr ""
 
@@ -1905,7 +1910,7 @@ msgstr ""
 
 #: company/models.py:475 company/templates/company/supplier_part_base.html:88
 #: company/templates/company/supplier_part_detail.html:26
-#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176
+#: order/templates/order/purchase_order_detail.html:149 part/bom.py:176
 #: part/bom.py:287
 msgid "SKU"
 msgstr ""
@@ -2017,7 +2022,8 @@ msgstr ""
 
 #: company/templates/company/delete.html:12
 #, python-format
-msgid "There are %(count)s parts sourced from this company.<br>\n"
+msgid ""
+"There are %(count)s parts sourced from this company.<br>\n"
 "If this supplier is deleted, these supplier part entries will also be deleted."
 msgstr ""
 
@@ -2033,7 +2039,7 @@ msgstr ""
 msgid "Uses default currency"
 msgstr ""
 
-#: company/templates/company/detail.html:67 order/models.py:440
+#: company/templates/company/detail.html:67 order/models.py:450
 #: order/templates/order/sales_order_base.html:92 stock/models.py:415
 #: stock/models.py:416 stock/templates/stock/item_base.html:251
 #: templates/js/company.js:40 templates/js/order.js:267
@@ -2122,13 +2128,13 @@ msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:21
 #: order/templates/order/order_wizard/select_parts.html:42
-#: order/templates/order/purchase_order_detail.html:75
+#: order/templates/order/purchase_order_detail.html:50
 msgid "Create new supplier part"
 msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:22
 #: company/templates/company/manufacturer_part_suppliers.html:17
-#: order/templates/order/purchase_order_detail.html:74
+#: order/templates/order/purchase_order_detail.html:49
 #: part/templates/part/supplier.html:17 templates/js/stock.js:1163
 msgid "New Supplier Part"
 msgstr ""
@@ -2226,7 +2232,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_suppliers.html:22
 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44
 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22
-#: stock/views.py:1002 users/models.py:184
+#: stock/views.py:1002 users/models.py:187
 msgid "Delete"
 msgstr ""
 
@@ -2252,7 +2258,7 @@ msgstr ""
 #: stock/templates/stock/location_navbar.html:22
 #: stock/templates/stock/location_navbar.html:29
 #: templates/InvenTree/search.html:198 templates/js/stock.js:968
-#: templates/stats.html:72 templates/stats.html:81 users/models.py:40
+#: templates/stats.html:72 templates/stats.html:81 users/models.py:42
 msgid "Stock Items"
 msgstr ""
 
@@ -2266,7 +2272,7 @@ msgstr ""
 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228
 #: templates/InvenTree/search.html:345
 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
-#: users/models.py:43
+#: users/models.py:45
 msgid "Sales Orders"
 msgstr ""
 
@@ -2278,7 +2284,7 @@ msgstr ""
 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:205
 #: templates/InvenTree/search.html:325
 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
-#: users/models.py:42
+#: users/models.py:44
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2357,7 +2363,7 @@ msgid "Pricing Information"
 msgstr ""
 
 #: company/templates/company/supplier_part_pricing.html:19 company/views.py:794
-#: part/templates/part/sale_prices.html:17 part/views.py:2624
+#: part/templates/part/sale_prices.html:17 part/views.py:2636
 msgid "Add Price Break"
 msgstr ""
 
@@ -2467,15 +2473,15 @@ msgstr ""
 msgid "Delete Supplier Part"
 msgstr ""
 
-#: company/views.py:799 part/views.py:2628
+#: company/views.py:799 part/views.py:2640
 msgid "Added new price break"
 msgstr ""
 
-#: company/views.py:855 part/views.py:2672
+#: company/views.py:855 part/views.py:2684
 msgid "Edit Price Break"
 msgstr ""
 
-#: company/views.py:870 part/views.py:2686
+#: company/views.py:870 part/views.py:2698
 msgid "Delete Price Break"
 msgstr ""
 
@@ -2565,7 +2571,7 @@ msgstr ""
 msgid "Enter sales order number"
 msgstr ""
 
-#: order/forms.py:145 order/models.py:452
+#: order/forms.py:145 order/models.py:462
 msgid "Target date for order completion. Order will be overdue after this date."
 msgstr ""
 
@@ -2601,7 +2607,7 @@ msgstr ""
 msgid "Order notes"
 msgstr ""
 
-#: order/models.py:182 order/models.py:445
+#: order/models.py:182 order/models.py:455
 msgid "Purchase order status"
 msgstr ""
 
@@ -2642,8 +2648,8 @@ msgstr ""
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:243 order/models.py:342 part/views.py:1586
-#: stock/models.py:270 stock/models.py:953
+#: order/models.py:243 part/views.py:1586 stock/models.py:270
+#: stock/models.py:953
 msgid "Quantity must be greater than zero"
 msgstr ""
 
@@ -2651,120 +2657,128 @@ msgstr ""
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:337
+#: order/models.py:344
 msgid "Lines can only be received against an order marked as 'Placed'"
 msgstr ""
 
-#: order/models.py:359
+#: order/models.py:348
+msgid "Quantity must be an integer"
+msgstr ""
+
+#: order/models.py:350
+msgid "Quantity must be a positive number"
+msgstr ""
+
+#: order/models.py:369
 msgid "Received items"
 msgstr ""
 
-#: order/models.py:441
+#: order/models.py:451
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:455 templates/js/order.js:303
+#: order/models.py:465 templates/js/order.js:303
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:462
+#: order/models.py:472
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:506
+#: order/models.py:516
 msgid "SalesOrder cannot be shipped as it is not currently pending"
 msgstr ""
 
-#: order/models.py:593
+#: order/models.py:603
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:595
+#: order/models.py:605
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:597
+#: order/models.py:607
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:623 order/models.py:667
+#: order/models.py:633 order/models.py:677
 #: part/templates/part/allocation.html:17
 #: part/templates/part/allocation.html:45
 msgid "Order"
 msgstr ""
 
-#: order/models.py:624 order/templates/order/order_base.html:9
+#: order/models.py:634 order/templates/order/order_base.html:9
 #: order/templates/order/order_base.html:24
 #: report/templates/report/inventree_po_report.html:77
 #: stock/templates/stock/item_base.html:313 templates/js/order.js:148
 msgid "Purchase Order"
 msgstr ""
 
-#: order/models.py:638
+#: order/models.py:648
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:641 order/templates/order/order_base.html:131
-#: order/templates/order/purchase_order_detail.html:214
+#: order/models.py:651 order/templates/order/order_base.html:131
+#: order/templates/order/purchase_order_detail.html:189
 #: order/templates/order/receive_parts.html:22
 #: order/templates/order/sales_order_base.html:131
 msgid "Received"
 msgstr ""
 
-#: order/models.py:641
+#: order/models.py:651
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:648 stock/models.py:508
+#: order/models.py:658 stock/models.py:508
 #: stock/templates/stock/item_base.html:320
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:649
+#: order/models.py:659
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:743 order/models.py:745
+#: order/models.py:753 order/models.py:755
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:749
+#: order/models.py:759
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:751
+#: order/models.py:761
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:754
+#: order/models.py:764
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:764
+#: order/models.py:774
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:769
+#: order/models.py:779
 msgid "Line"
 msgstr ""
 
-#: order/models.py:780
+#: order/models.py:790
 msgid "Item"
 msgstr ""
 
-#: order/models.py:781
+#: order/models.py:791
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:784
+#: order/models.py:794
 msgid "Enter stock allocation quantity"
 msgstr ""
 
@@ -2812,9 +2826,22 @@ msgstr ""
 msgid "Issued"
 msgstr ""
 
-#: order/templates/order/order_cancel.html:7
-#: order/templates/order/sales_order_cancel.html:9
-msgid "Cancelling this order means that the order will no longer be editable."
+#: order/templates/order/order_base.html:180
+#: order/templates/order/purchase_order_detail.html:100
+#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: stock/templates/stock/location.html:191 templates/js/stock.js:708
+#: templates/js/stock.js:1169
+msgid "New Location"
+msgstr ""
+
+#: order/templates/order/order_base.html:181
+#: order/templates/order/purchase_order_detail.html:101
+#: stock/templates/stock/location.html:42
+msgid "Create new stock location"
+msgstr ""
+
+#: order/templates/order/order_cancel.html:8
+msgid "Cancelling this order means that the order and line items will no longer be editable."
 msgstr ""
 
 #: order/templates/order/order_complete.html:7
@@ -2826,10 +2853,10 @@ msgid "This order has line items which have not been marked as received."
 msgstr ""
 
 #: order/templates/order/order_complete.html:11
-msgid "Marking this order as complete will remove these line items."
+msgid "Completing this order means that the order and line items will no longer be editable."
 msgstr ""
 
-#: order/templates/order/order_issue.html:7
+#: order/templates/order/order_issue.html:8
 msgid "After placing this purchase order, line items will no longer be editable."
 msgstr ""
 
@@ -2881,11 +2908,13 @@ msgid "Select Purchase Order"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:45
-msgid "Create new purchase order for {{ supplier.name }}"
+#, python-format
+msgid "Create new purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:68
-msgid "Select a purchase order for"
+#, python-format
+msgid "Select a purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/po_attachments.html:12
@@ -2907,43 +2936,29 @@ msgid "Purchase Order Items"
 msgstr ""
 
 #: order/templates/order/purchase_order_detail.html:24
-#: order/templates/order/sales_order_detail.html:22 order/views.py:1108
-#: order/views.py:1191
+#: order/templates/order/sales_order_detail.html:22 order/views.py:1120
+#: order/views.py:1203
 msgid "Add Line Item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:45
-#: order/templates/order/purchase_order_detail.html:125
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
-#: stock/templates/stock/location.html:191 templates/js/stock.js:708
-#: templates/js/stock.js:1169
-msgid "New Location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:46
-#: order/templates/order/purchase_order_detail.html:126
-#: stock/templates/stock/location.html:42
-msgid "Create new stock location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:139
+#: order/templates/order/purchase_order_detail.html:114
 msgid "No line items found"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:205
+#: order/templates/order/purchase_order_detail.html:180
 msgid "Unit Price"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:246
+#: order/templates/order/purchase_order_detail.html:221
 #: order/templates/order/sales_order_detail.html:294
 msgid "Edit line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:247
+#: order/templates/order/purchase_order_detail.html:222
 msgid "Delete line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:252
+#: order/templates/order/purchase_order_detail.html:227
 msgid "Receive line item"
 msgstr ""
 
@@ -2966,7 +2981,7 @@ msgstr ""
 #: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
 #: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577
 #: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68
-#: users/models.py:38
+#: users/models.py:40
 msgid "Parts"
 msgstr ""
 
@@ -3019,6 +3034,10 @@ msgstr ""
 msgid "Warning"
 msgstr ""
 
+#: order/templates/order/sales_order_cancel.html:9
+msgid "Cancelling this order means that the order will no longer be editable."
+msgstr ""
+
 #: order/templates/order/sales_order_detail.html:13
 msgid "Sales Order Items"
 msgstr ""
@@ -3213,65 +3232,65 @@ msgstr ""
 msgid "No lines specified"
 msgstr ""
 
-#: order/views.py:1060
+#: order/views.py:1069
 #, python-brace-format
 msgid "Ordered {n} parts"
 msgstr ""
 
-#: order/views.py:1117
+#: order/views.py:1129
 msgid "Supplier part must be specified"
 msgstr ""
 
-#: order/views.py:1123
+#: order/views.py:1135
 msgid "Supplier must match for Part and Order"
 msgstr ""
 
-#: order/views.py:1242 order/views.py:1260
+#: order/views.py:1254 order/views.py:1272
 msgid "Edit Line Item"
 msgstr ""
 
-#: order/views.py:1276 order/views.py:1288
+#: order/views.py:1288 order/views.py:1300
 msgid "Delete Line Item"
 msgstr ""
 
-#: order/views.py:1281 order/views.py:1293
+#: order/views.py:1293 order/views.py:1305
 msgid "Deleted line item"
 msgstr ""
 
-#: order/views.py:1306
+#: order/views.py:1318
 msgid "Allocate Serial Numbers"
 msgstr ""
 
-#: order/views.py:1351
+#: order/views.py:1363
 #, python-brace-format
 msgid "Allocated {n} items"
 msgstr ""
 
-#: order/views.py:1367
+#: order/views.py:1379
 msgid "Select line item"
 msgstr ""
 
-#: order/views.py:1398
+#: order/views.py:1410
 msgid "No matching item for serial"
 msgstr ""
 
-#: order/views.py:1408
+#: order/views.py:1420
 msgid "is not in stock"
 msgstr ""
 
-#: order/views.py:1416
+#: order/views.py:1428
 msgid "already allocated to an order"
 msgstr ""
 
-#: order/views.py:1470
+#: order/views.py:1482
 msgid "Allocate Stock to Order"
 msgstr ""
 
-#: order/views.py:1544
+#: order/views.py:1556
 msgid "Edit Allocation Quantity"
 msgstr ""
 
-#: order/views.py:1559
+#: order/views.py:1571
 msgid "Remove allocation"
 msgstr ""
 
@@ -3457,7 +3476,7 @@ msgstr ""
 #: part/models.py:83 part/templates/part/category.html:23
 #: part/templates/part/category.html:94 part/templates/part/category.html:141
 #: templates/InvenTree/search.html:127 templates/stats.html:63
-#: users/models.py:37
+#: users/models.py:39
 msgid "Part Categories"
 msgstr ""
 
@@ -4004,7 +4023,7 @@ msgstr ""
 msgid "All parts"
 msgstr ""
 
-#: part/templates/part/category.html:29 part/views.py:2270
+#: part/templates/part/category.html:29 part/views.py:2282
 msgid "Create new part category"
 msgstr ""
 
@@ -4694,63 +4713,63 @@ msgstr ""
 msgid "Part Pricing"
 msgstr ""
 
-#: part/views.py:2069
+#: part/views.py:2081
 msgid "Create Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2079
+#: part/views.py:2091
 msgid "Edit Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2086
+#: part/views.py:2098
 msgid "Delete Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2094
+#: part/views.py:2106
 msgid "Create Part Parameter"
 msgstr ""
 
-#: part/views.py:2144
+#: part/views.py:2156
 msgid "Edit Part Parameter"
 msgstr ""
 
-#: part/views.py:2158
+#: part/views.py:2170
 msgid "Delete Part Parameter"
 msgstr ""
 
-#: part/views.py:2218
+#: part/views.py:2230
 msgid "Edit Part Category"
 msgstr ""
 
-#: part/views.py:2256
+#: part/views.py:2268
 msgid "Delete Part Category"
 msgstr ""
 
-#: part/views.py:2262
+#: part/views.py:2274
 msgid "Part category was deleted"
 msgstr ""
 
-#: part/views.py:2314
+#: part/views.py:2326
 msgid "Create Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2415
+#: part/views.py:2427
 msgid "Edit Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2471
+#: part/views.py:2483
 msgid "Delete Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2490
+#: part/views.py:2502
 msgid "Create BOM Item"
 msgstr ""
 
-#: part/views.py:2560
+#: part/views.py:2572
 msgid "Edit BOM item"
 msgstr ""
 
-#: part/views.py:2616
+#: part/views.py:2628
 msgid "Confim BOM item deletion"
 msgstr ""
 
@@ -5301,15 +5320,15 @@ msgid "Stock adjustment actions"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:164
-#: stock/templates/stock/location.html:65 templates/stock_table.html:56
+#: stock/templates/stock/location.html:65 templates/stock_table.html:57
 msgid "Count stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54
+#: stock/templates/stock/item_base.html:167 templates/stock_table.html:55
 msgid "Add stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55
+#: stock/templates/stock/item_base.html:170 templates/stock_table.html:56
 msgid "Remove stock"
 msgstr ""
 
@@ -5503,7 +5522,7 @@ msgid "Stock Details"
 msgstr ""
 
 #: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279
-#: templates/stats.html:76 users/models.py:39
+#: templates/stats.html:76 users/models.py:41
 msgid "Stock Locations"
 msgstr ""
 
@@ -5689,7 +5708,7 @@ msgstr ""
 msgid "Add Stock Items"
 msgstr ""
 
-#: stock/views.py:1001 users/models.py:180
+#: stock/views.py:1001 users/models.py:183
 msgid "Add"
 msgstr ""
 
@@ -5867,6 +5886,31 @@ msgstr ""
 msgid "No stock location set"
 msgstr ""
 
+#: templates/InvenTree/settings/appearance.html:10
+msgid "Theme Settings"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:17
+msgid "Color Themes"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:29
+#, python-format
+msgid ""
+"\n"
+"        The CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
+"        Please select another color theme :)\n"
+"    "
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:39
+msgid "Language"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:61
+msgid "Set Language"
+msgstr ""
+
 #: templates/InvenTree/settings/build.html:10
 msgid "Build Order Settings"
 msgstr ""
@@ -5950,7 +5994,7 @@ msgstr ""
 msgid "Stock Settings"
 msgstr ""
 
-#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49
+#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:50
 msgid "Stock Options"
 msgstr ""
 
@@ -5964,7 +6008,7 @@ msgid "Account"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:9
-msgid "Theme"
+msgid "Appearance"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:13
@@ -5983,22 +6027,6 @@ msgstr ""
 msgid "Categories"
 msgstr ""
 
-#: templates/InvenTree/settings/theme.html:10
-msgid "Theme Settings"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:17
-msgid "Color Themes"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:29
-#, python-format
-msgid "\n"
-"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
-"\t\tPlease select another color theme :)\n"
-"\t"
-msgstr ""
-
 #: templates/InvenTree/settings/user.html:16
 msgid "User Information"
 msgstr ""
@@ -6061,13 +6089,23 @@ msgid "View Code on GitHub"
 msgstr ""
 
 #: templates/about.html:63
-msgid "Get the App"
+msgid "Credits"
 msgstr ""
 
 #: templates/about.html:68
+msgid "Mobile App"
+msgstr ""
+
+#: templates/about.html:73
 msgid "Submit Bug Report"
 msgstr ""
 
+#: templates/about.html:82 templates/js/modals.js:550
+#: templates/js/modals.js:809 templates/modals.html:28 templates/modals.html:52
+#: templates/modals.html:93
+msgid "Close"
+msgstr ""
+
 #: templates/attachment_table.html:6
 msgid "Add Attachment"
 msgstr ""
@@ -6263,7 +6301,7 @@ msgid "Quantity Per"
 msgstr ""
 
 #: templates/js/build.js:638 templates/js/build.js:1056
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order stock"
 msgstr ""
 
@@ -6396,11 +6434,6 @@ msgstr ""
 msgid "Submit"
 msgstr ""
 
-#: templates/js/modals.js:550 templates/js/modals.js:809
-#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93
-msgid "Close"
-msgstr ""
-
 #: templates/js/modals.js:760
 msgid "Invalid response from server"
 msgstr ""
@@ -6974,6 +7007,10 @@ msgstr ""
 msgid "Form errors exist"
 msgstr ""
 
+#: templates/navbar.html:13
+msgid "Toggle navigation"
+msgstr ""
+
 #: templates/navbar.html:33
 msgid "Buy"
 msgstr ""
@@ -6986,7 +7023,7 @@ msgstr ""
 msgid "Scan Barcode"
 msgstr ""
 
-#: templates/navbar.html:77 users/models.py:36
+#: templates/navbar.html:77 users/models.py:38
 msgid "Admin"
 msgstr ""
 
@@ -7118,43 +7155,43 @@ msgstr ""
 msgid "Print test reports"
 msgstr ""
 
-#: templates/stock_table.html:54
+#: templates/stock_table.html:55
 msgid "Add to selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:55
+#: templates/stock_table.html:56
 msgid "Remove from selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:56
+#: templates/stock_table.html:57
 msgid "Stocktake selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move stock"
 msgstr ""
 
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order selected items"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change status"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change stock status"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete selected items"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete Stock"
 msgstr ""
 
@@ -7190,34 +7227,34 @@ msgstr ""
 msgid "Important dates"
 msgstr ""
 
-#: users/models.py:167
+#: users/models.py:170
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:175
+#: users/models.py:178
 msgid "Group"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "View"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:180
+#: users/models.py:183
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Change"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:184
+#: users/models.py:187
 msgid "Permission to delete items"
 msgstr ""
diff --git a/InvenTree/locale/ru/LC_MESSAGES/django.mo b/InvenTree/locale/ru/LC_MESSAGES/django.mo
index 7007a3d4e50ddf1c5e7d2870e6247ecea1df5a7b..45a221f8727b8cb60022d5cd21b59c05fc4a8351 100644
GIT binary patch
delta 251
zcmZo;dBZ$Gg>lnFRgH-;TAoG*MuxfuCb~w33I>)|#>QMeiNz(lAw`LK#W{&3`9)R=
zK#{!k(!}&s-H_D8Tq}j3(&FOG#5}mLl|oTzd{F4bueFm48Aa<g73>uZ6s#09H1bpp
z4HWEb6^s<r)D*xR8(R|)8!Tg>V54AYq)<}>mI5kNFf`EwX*NV?wzUNs1ylhy$`r{c
fOQ33)9M~R1L!hiQ)HoYkn0ZD(^Nck$t+^Ng6{<bh

delta 311
zcmYL?F;BxV6of%AWnp4}NVIA|Ms_FzCU$EPQzGmHC2b|xJVa5YHj$FDRqDn}{ucv3
zgdahi0^RPtyZi3@=>7QP{P45s4NjiL{gaqTn9C#$<EYUW+ZQPkq+=8ac#NqIFJI$G
zI?B{*G_6cgFU`8FC_K!Rf=FlyzSJUAV-W<2OjF)Qi~P;x8JcEhML~&ZGP4`LQsd>~
zs;u&ThJvF*Ezvxy>P1;lAkEimTl5HKj6lB+R^l^82#f#&?QYJzKg(xBD+gW7Cmw7z
ry9y^mx2=%h3S-z>U5>Mxef`$`|6^`vTH5K3##+P(yq0k7-Z=+9*YHry

diff --git a/InvenTree/locale/ru/LC_MESSAGES/django.po b/InvenTree/locale/ru/LC_MESSAGES/django.po
index e77638edc6..d14c214d50 100644
--- a/InvenTree/locale/ru/LC_MESSAGES/django.po
+++ b/InvenTree/locale/ru/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-21 09:17+0000\n"
+"POT-Creation-Date: 2021-05-05 17:33+1000\n"
 "PO-Revision-Date: 2021-04-21 09:33\n"
 "Last-Translator: \n"
 "Language-Team: Russian\n"
@@ -67,35 +67,36 @@ msgstr ""
 msgid "Select Category"
 msgstr ""
 
-#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344
-#: stock/views.py:1763
-msgid "Invalid quantity provided"
-msgstr ""
-
-#: InvenTree/helpers.py:378
-msgid "Empty serial number string"
-msgstr ""
-
-#: InvenTree/helpers.py:399
+#: InvenTree/helpers.py:377
 #, python-brace-format
 msgid "Duplicate serial: {n}"
 msgstr ""
 
-#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409
+#: InvenTree/helpers.py:384 order/models.py:245 order/models.py:353
+#: stock/views.py:1763
+msgid "Invalid quantity provided"
+msgstr ""
+
+#: InvenTree/helpers.py:387
+msgid "Empty serial number string"
+msgstr ""
+
+#: InvenTree/helpers.py:409 InvenTree/helpers.py:412 InvenTree/helpers.py:415
+#: InvenTree/helpers.py:440
 #, python-brace-format
 msgid "Invalid group: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:414
+#: InvenTree/helpers.py:445
 #, python-brace-format
 msgid "Duplicate serial: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:422
+#: InvenTree/helpers.py:453
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:426
+#: InvenTree/helpers.py:457
 #, python-brace-format
 msgid "Number of unique serial number ({s}) must match quantity ({q})"
 msgstr ""
@@ -140,7 +141,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_base.html:72
 #: company/templates/company/supplier_part_base.html:71
 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108
-#: order/models.py:101 order/templates/order/purchase_order_detail.html:168
+#: order/models.py:101 order/templates/order/purchase_order_detail.html:143
 #: part/models.py:710 part/templates/part/detail.html:54
 #: part/templates/part/set_category.html:14 report/models.py:192
 #: report/models.py:505 report/models.py:544
@@ -165,23 +166,23 @@ msgstr ""
 msgid "parent"
 msgstr ""
 
-#: InvenTree/settings.py:493
+#: InvenTree/settings.py:491
 msgid "English"
 msgstr ""
 
-#: InvenTree/settings.py:494
+#: InvenTree/settings.py:492
 msgid "French"
 msgstr ""
 
-#: InvenTree/settings.py:495
+#: InvenTree/settings.py:493
 msgid "German"
 msgstr ""
 
-#: InvenTree/settings.py:496
+#: InvenTree/settings.py:494
 msgid "Polish"
 msgstr ""
 
-#: InvenTree/settings.py:497
+#: InvenTree/settings.py:495
 msgid "Turkish"
 msgstr ""
 
@@ -375,16 +376,16 @@ msgstr ""
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1227
+#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1241
 #: build/templates/build/allocation_card.html:23
 #: build/templates/build/auto_allocate.html:17
 #: build/templates/build/build_base.html:123
 #: build/templates/build/detail.html:31 common/models.py:703
 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77
 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261
-#: order/forms.py:278 order/models.py:593 order/models.py:784
+#: order/forms.py:278 order/models.py:603 order/models.py:794
 #: order/templates/order/order_wizard/select_parts.html:32
-#: order/templates/order/purchase_order_detail.html:200
+#: order/templates/order/purchase_order_detail.html:175
 #: order/templates/order/sales_order_detail.html:70
 #: order/templates/order/sales_order_detail.html:77
 #: order/templates/order/sales_order_detail.html:159
@@ -458,7 +459,7 @@ msgid "Location of completed parts"
 msgstr ""
 
 #: build/forms.py:215 build/templates/build/build_base.html:128
-#: build/templates/build/detail.html:59 order/models.py:445
+#: build/templates/build/detail.html:59 order/models.py:455
 #: order/templates/order/receive_parts.html:24
 #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252
 #: templates/js/barcode.js:119 templates/js/build.js:770
@@ -508,7 +509,7 @@ msgstr ""
 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183
 #: templates/InvenTree/search.html:185
-#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
+#: templates/InvenTree/settings/tabs.html:31 users/models.py:43
 msgid "Build Orders"
 msgstr ""
 
@@ -516,8 +517,8 @@ msgstr ""
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:127 order/models.py:99 order/models.py:595
-#: order/templates/order/purchase_order_detail.html:195
+#: build/models.py:127 order/models.py:99 order/models.py:605
+#: order/templates/order/purchase_order_detail.html:170
 #: order/templates/order/sales_order_detail.html:219 part/models.py:2187
 #: report/templates/report/inventree_po_report.html:92
 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
@@ -540,10 +541,10 @@ msgstr ""
 
 #: build/models.py:152 build/templates/build/auto_allocate.html:16
 #: build/templates/build/build_base.html:118
-#: build/templates/build/detail.html:26 company/models.py:669
-#: order/models.py:637 order/models.py:669
+#: build/templates/build/detail.html:26 company/models.py:688
+#: order/models.py:647 order/models.py:679
 #: order/templates/order/order_wizard/select_parts.html:30
-#: order/templates/order/purchase_order_detail.html:156
+#: order/templates/order/purchase_order_detail.html:131
 #: order/templates/order/receive_parts.html:19
 #: order/templates/order/sales_order_detail.html:207 part/models.py:321
 #: part/models.py:1876 part/models.py:1888 part/models.py:1906
@@ -628,7 +629,7 @@ msgstr ""
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:223 order/models.py:451
+#: build/models.py:223 order/models.py:461
 msgid "Target completion date"
 msgstr ""
 
@@ -678,9 +679,9 @@ msgstr ""
 #: company/models.py:135 company/models.py:501
 #: company/templates/company/navbar.html:70
 #: company/templates/company/navbar.html:73 order/models.py:123
-#: order/models.py:597 order/templates/order/po_navbar.html:29
+#: order/models.py:607 order/templates/order/po_navbar.html:29
 #: order/templates/order/po_navbar.html:32
-#: order/templates/order/purchase_order_detail.html:234
+#: order/templates/order/purchase_order_detail.html:209
 #: order/templates/order/sales_order_detail.html:264
 #: order/templates/order/so_navbar.html:33
 #: order/templates/order/so_navbar.html:36 part/models.py:871
@@ -713,47 +714,47 @@ msgstr ""
 msgid "Completed build output"
 msgstr ""
 
-#: build/models.py:1118
+#: build/models.py:1132
 msgid "BuildItem must be unique for build, stock_item and install_into"
 msgstr ""
 
-#: build/models.py:1143
+#: build/models.py:1157
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1147
+#: build/models.py:1161
 #, python-brace-format
 msgid "Selected stock item not found in BOM for part '{p}'"
 msgstr ""
 
-#: build/models.py:1151
+#: build/models.py:1165
 #, python-brace-format
 msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
 msgstr ""
 
-#: build/models.py:1158 order/models.py:758
+#: build/models.py:1172 order/models.py:768
 msgid "StockItem is over-allocated"
 msgstr ""
 
-#: build/models.py:1162 order/models.py:761
+#: build/models.py:1176 order/models.py:771
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1166
+#: build/models.py:1180
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1206 stock/templates/stock/item_base.html:306
+#: build/models.py:1220 stock/templates/stock/item_base.html:306
 #: templates/InvenTree/search.html:183 templates/js/build.js:714
 #: templates/navbar.html:29
 msgid "Build"
 msgstr ""
 
-#: build/models.py:1207
+#: build/models.py:1221
 msgid "Build to allocate parts"
 msgstr ""
 
-#: build/models.py:1214 part/templates/part/allocation.html:18
+#: build/models.py:1228 part/templates/part/allocation.html:18
 #: part/templates/part/allocation.html:24
 #: part/templates/part/allocation.html:31
 #: part/templates/part/allocation.html:49
@@ -765,19 +766,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1215
+#: build/models.py:1229
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1228
+#: build/models.py:1242
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1236
+#: build/models.py:1250
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1237
+#: build/models.py:1251
 msgid "Destination stock item"
 msgstr ""
 
@@ -801,7 +802,7 @@ msgstr ""
 msgid "Unallocate stock"
 msgstr ""
 
-#: build/templates/build/allocate.html:26 build/views.py:308 build/views.py:794
+#: build/templates/build/allocate.html:26 build/views.py:319 build/views.py:805
 msgid "Unallocate Stock"
 msgstr ""
 
@@ -811,7 +812,7 @@ msgstr ""
 
 #: build/templates/build/allocate.html:30
 #: company/templates/company/detail_manufacturer_part.html:33
-#: company/templates/company/detail_supplier_part.html:32 order/views.py:794
+#: company/templates/company/detail_supplier_part.html:32 order/views.py:795
 #: part/templates/part/category.html:127
 msgid "Order Parts"
 msgstr ""
@@ -954,7 +955,7 @@ msgid "Progress"
 msgstr ""
 
 #: build/templates/build/build_base.html:160
-#: build/templates/build/detail.html:84 order/models.py:667
+#: build/templates/build/detail.html:84 order/models.py:677
 #: order/templates/order/sales_order_base.html:9
 #: order/templates/order/sales_order_base.html:33
 #: order/templates/order/sales_order_ship.html:25
@@ -1139,7 +1140,7 @@ msgstr ""
 msgid "Alter the quantity of stock allocated to the build output"
 msgstr ""
 
-#: build/templates/build/index.html:28 build/views.py:667
+#: build/templates/build/index.html:28 build/views.py:678
 msgid "New Build Order"
 msgstr ""
 
@@ -1226,141 +1227,145 @@ msgstr ""
 msgid "Create Build Output"
 msgstr ""
 
-#: build/views.py:173 stock/models.py:969 stock/views.py:1789
+#: build/views.py:168
+msgid "Maximum output quantity is "
+msgstr ""
+
+#: build/views.py:184 stock/models.py:969 stock/views.py:1789
 msgid "Serial numbers already exist"
 msgstr ""
 
-#: build/views.py:182
+#: build/views.py:193
 msgid "Serial numbers required for trackable build output"
 msgstr ""
 
-#: build/views.py:248
+#: build/views.py:259
 msgid "Delete Build Output"
 msgstr ""
 
-#: build/views.py:269 build/views.py:359
+#: build/views.py:280 build/views.py:370
 msgid "Confirm unallocation of build stock"
 msgstr ""
 
-#: build/views.py:270 build/views.py:360 stock/views.py:425
+#: build/views.py:281 build/views.py:371 stock/views.py:425
 msgid "Check the confirmation box"
 msgstr ""
 
-#: build/views.py:282
+#: build/views.py:293
 msgid "Build output does not match build"
 msgstr ""
 
-#: build/views.py:284 build/views.py:485
+#: build/views.py:295 build/views.py:496
 msgid "Build output must be specified"
 msgstr ""
 
-#: build/views.py:296
+#: build/views.py:307
 msgid "Build output deleted"
 msgstr ""
 
-#: build/views.py:394
+#: build/views.py:405
 msgid "Complete Build Order"
 msgstr ""
 
-#: build/views.py:400
+#: build/views.py:411
 msgid "Build order cannot be completed - incomplete outputs remain"
 msgstr ""
 
-#: build/views.py:411
+#: build/views.py:422
 msgid "Completed build order"
 msgstr ""
 
-#: build/views.py:427
+#: build/views.py:438
 msgid "Complete Build Output"
 msgstr ""
 
-#: build/views.py:469
+#: build/views.py:480
 msgid "Invalid stock status value selected"
 msgstr ""
 
-#: build/views.py:476
+#: build/views.py:487
 msgid "Quantity to complete cannot exceed build output quantity"
 msgstr ""
 
-#: build/views.py:482
+#: build/views.py:493
 msgid "Confirm completion of incomplete build"
 msgstr ""
 
-#: build/views.py:581
+#: build/views.py:592
 msgid "Build output completed"
 msgstr ""
 
-#: build/views.py:721
+#: build/views.py:732
 msgid "Created new build"
 msgstr ""
 
-#: build/views.py:742
+#: build/views.py:753
 msgid "Edit Build Order Details"
 msgstr ""
 
-#: build/views.py:775
+#: build/views.py:786
 msgid "Edited build"
 msgstr ""
 
-#: build/views.py:784
+#: build/views.py:795
 msgid "Delete Build Order"
 msgstr ""
 
-#: build/views.py:799
+#: build/views.py:810
 msgid "Removed parts from build allocation"
 msgstr ""
 
-#: build/views.py:811
+#: build/views.py:822
 msgid "Allocate stock to build output"
 msgstr ""
 
-#: build/views.py:854
+#: build/views.py:865
 msgid "Item must be currently in stock"
 msgstr ""
 
-#: build/views.py:860
+#: build/views.py:871
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/views.py:861 templates/js/bom.js:230 templates/js/build.js:575
+#: build/views.py:872 templates/js/bom.js:230 templates/js/build.js:575
 #: templates/js/build.js:838 templates/js/build.js:1021
 msgid "Available"
 msgstr ""
 
-#: build/views.py:863
+#: build/views.py:874
 msgid "Stock item must be selected"
 msgstr ""
 
-#: build/views.py:1026
+#: build/views.py:1037
 msgid "Edit Stock Allocation"
 msgstr ""
 
-#: build/views.py:1030
+#: build/views.py:1041
 msgid "Updated Build Item"
 msgstr ""
 
-#: build/views.py:1059
+#: build/views.py:1070
 msgid "Add Build Order Attachment"
 msgstr ""
 
-#: build/views.py:1072 order/views.py:110 order/views.py:162 part/views.py:172
+#: build/views.py:1083 order/views.py:110 order/views.py:162 part/views.py:172
 #: stock/views.py:277
 msgid "Added attachment"
 msgstr ""
 
-#: build/views.py:1108 order/views.py:189 order/views.py:210
+#: build/views.py:1119 order/views.py:189 order/views.py:210
 msgid "Edit Attachment"
 msgstr ""
 
-#: build/views.py:1118 order/views.py:193 order/views.py:214
+#: build/views.py:1129 order/views.py:193 order/views.py:214
 msgid "Attachment updated"
 msgstr ""
 
-#: build/views.py:1128 order/views.py:229 order/views.py:243
+#: build/views.py:1139 order/views.py:229 order/views.py:243
 msgid "Delete Attachment"
 msgstr ""
 
-#: build/views.py:1133 order/views.py:235 order/views.py:249 stock/views.py:333
+#: build/views.py:1144 order/views.py:235 order/views.py:249 stock/views.py:333
 msgid "Deleted attachment"
 msgstr ""
 
@@ -1766,7 +1771,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_detail.html:26
 #: company/templates/company/supplier_part_base.html:101
 #: company/templates/company/supplier_part_detail.html:35
-#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171
+#: order/templates/order/purchase_order_detail.html:158 part/bom.py:171
 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307
 msgid "MPN"
 msgstr ""
@@ -1865,7 +1870,7 @@ msgstr ""
 msgid "Base Part"
 msgstr ""
 
-#: company/models.py:312 company/models.py:463 order/views.py:1372
+#: company/models.py:312 company/models.py:463 order/views.py:1384
 msgid "Select part"
 msgstr ""
 
@@ -1905,7 +1910,7 @@ msgstr ""
 
 #: company/models.py:475 company/templates/company/supplier_part_base.html:88
 #: company/templates/company/supplier_part_detail.html:26
-#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176
+#: order/templates/order/purchase_order_detail.html:149 part/bom.py:176
 #: part/bom.py:287
 msgid "SKU"
 msgstr ""
@@ -2017,7 +2022,8 @@ msgstr ""
 
 #: company/templates/company/delete.html:12
 #, python-format
-msgid "There are %(count)s parts sourced from this company.<br>\n"
+msgid ""
+"There are %(count)s parts sourced from this company.<br>\n"
 "If this supplier is deleted, these supplier part entries will also be deleted."
 msgstr ""
 
@@ -2033,7 +2039,7 @@ msgstr ""
 msgid "Uses default currency"
 msgstr ""
 
-#: company/templates/company/detail.html:67 order/models.py:440
+#: company/templates/company/detail.html:67 order/models.py:450
 #: order/templates/order/sales_order_base.html:92 stock/models.py:415
 #: stock/models.py:416 stock/templates/stock/item_base.html:251
 #: templates/js/company.js:40 templates/js/order.js:267
@@ -2122,13 +2128,13 @@ msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:21
 #: order/templates/order/order_wizard/select_parts.html:42
-#: order/templates/order/purchase_order_detail.html:75
+#: order/templates/order/purchase_order_detail.html:50
 msgid "Create new supplier part"
 msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:22
 #: company/templates/company/manufacturer_part_suppliers.html:17
-#: order/templates/order/purchase_order_detail.html:74
+#: order/templates/order/purchase_order_detail.html:49
 #: part/templates/part/supplier.html:17 templates/js/stock.js:1163
 msgid "New Supplier Part"
 msgstr ""
@@ -2226,7 +2232,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_suppliers.html:22
 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44
 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22
-#: stock/views.py:1002 users/models.py:184
+#: stock/views.py:1002 users/models.py:187
 msgid "Delete"
 msgstr ""
 
@@ -2252,7 +2258,7 @@ msgstr ""
 #: stock/templates/stock/location_navbar.html:22
 #: stock/templates/stock/location_navbar.html:29
 #: templates/InvenTree/search.html:198 templates/js/stock.js:968
-#: templates/stats.html:72 templates/stats.html:81 users/models.py:40
+#: templates/stats.html:72 templates/stats.html:81 users/models.py:42
 msgid "Stock Items"
 msgstr ""
 
@@ -2266,7 +2272,7 @@ msgstr ""
 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228
 #: templates/InvenTree/search.html:345
 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
-#: users/models.py:43
+#: users/models.py:45
 msgid "Sales Orders"
 msgstr ""
 
@@ -2278,7 +2284,7 @@ msgstr ""
 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:205
 #: templates/InvenTree/search.html:325
 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
-#: users/models.py:42
+#: users/models.py:44
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2357,7 +2363,7 @@ msgid "Pricing Information"
 msgstr ""
 
 #: company/templates/company/supplier_part_pricing.html:19 company/views.py:794
-#: part/templates/part/sale_prices.html:17 part/views.py:2624
+#: part/templates/part/sale_prices.html:17 part/views.py:2636
 msgid "Add Price Break"
 msgstr ""
 
@@ -2467,15 +2473,15 @@ msgstr ""
 msgid "Delete Supplier Part"
 msgstr ""
 
-#: company/views.py:799 part/views.py:2628
+#: company/views.py:799 part/views.py:2640
 msgid "Added new price break"
 msgstr ""
 
-#: company/views.py:855 part/views.py:2672
+#: company/views.py:855 part/views.py:2684
 msgid "Edit Price Break"
 msgstr ""
 
-#: company/views.py:870 part/views.py:2686
+#: company/views.py:870 part/views.py:2698
 msgid "Delete Price Break"
 msgstr ""
 
@@ -2565,7 +2571,7 @@ msgstr ""
 msgid "Enter sales order number"
 msgstr ""
 
-#: order/forms.py:145 order/models.py:452
+#: order/forms.py:145 order/models.py:462
 msgid "Target date for order completion. Order will be overdue after this date."
 msgstr ""
 
@@ -2601,7 +2607,7 @@ msgstr ""
 msgid "Order notes"
 msgstr ""
 
-#: order/models.py:182 order/models.py:445
+#: order/models.py:182 order/models.py:455
 msgid "Purchase order status"
 msgstr ""
 
@@ -2642,8 +2648,8 @@ msgstr ""
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:243 order/models.py:342 part/views.py:1586
-#: stock/models.py:270 stock/models.py:953
+#: order/models.py:243 part/views.py:1586 stock/models.py:270
+#: stock/models.py:953
 msgid "Quantity must be greater than zero"
 msgstr ""
 
@@ -2651,120 +2657,128 @@ msgstr ""
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:337
+#: order/models.py:344
 msgid "Lines can only be received against an order marked as 'Placed'"
 msgstr ""
 
-#: order/models.py:359
+#: order/models.py:348
+msgid "Quantity must be an integer"
+msgstr ""
+
+#: order/models.py:350
+msgid "Quantity must be a positive number"
+msgstr ""
+
+#: order/models.py:369
 msgid "Received items"
 msgstr ""
 
-#: order/models.py:441
+#: order/models.py:451
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:455 templates/js/order.js:303
+#: order/models.py:465 templates/js/order.js:303
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:462
+#: order/models.py:472
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:506
+#: order/models.py:516
 msgid "SalesOrder cannot be shipped as it is not currently pending"
 msgstr ""
 
-#: order/models.py:593
+#: order/models.py:603
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:595
+#: order/models.py:605
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:597
+#: order/models.py:607
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:623 order/models.py:667
+#: order/models.py:633 order/models.py:677
 #: part/templates/part/allocation.html:17
 #: part/templates/part/allocation.html:45
 msgid "Order"
 msgstr ""
 
-#: order/models.py:624 order/templates/order/order_base.html:9
+#: order/models.py:634 order/templates/order/order_base.html:9
 #: order/templates/order/order_base.html:24
 #: report/templates/report/inventree_po_report.html:77
 #: stock/templates/stock/item_base.html:313 templates/js/order.js:148
 msgid "Purchase Order"
 msgstr ""
 
-#: order/models.py:638
+#: order/models.py:648
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:641 order/templates/order/order_base.html:131
-#: order/templates/order/purchase_order_detail.html:214
+#: order/models.py:651 order/templates/order/order_base.html:131
+#: order/templates/order/purchase_order_detail.html:189
 #: order/templates/order/receive_parts.html:22
 #: order/templates/order/sales_order_base.html:131
 msgid "Received"
 msgstr ""
 
-#: order/models.py:641
+#: order/models.py:651
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:648 stock/models.py:508
+#: order/models.py:658 stock/models.py:508
 #: stock/templates/stock/item_base.html:320
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:649
+#: order/models.py:659
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:743 order/models.py:745
+#: order/models.py:753 order/models.py:755
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:749
+#: order/models.py:759
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:751
+#: order/models.py:761
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:754
+#: order/models.py:764
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:764
+#: order/models.py:774
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:769
+#: order/models.py:779
 msgid "Line"
 msgstr ""
 
-#: order/models.py:780
+#: order/models.py:790
 msgid "Item"
 msgstr ""
 
-#: order/models.py:781
+#: order/models.py:791
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:784
+#: order/models.py:794
 msgid "Enter stock allocation quantity"
 msgstr ""
 
@@ -2812,9 +2826,22 @@ msgstr ""
 msgid "Issued"
 msgstr ""
 
-#: order/templates/order/order_cancel.html:7
-#: order/templates/order/sales_order_cancel.html:9
-msgid "Cancelling this order means that the order will no longer be editable."
+#: order/templates/order/order_base.html:180
+#: order/templates/order/purchase_order_detail.html:100
+#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: stock/templates/stock/location.html:191 templates/js/stock.js:708
+#: templates/js/stock.js:1169
+msgid "New Location"
+msgstr ""
+
+#: order/templates/order/order_base.html:181
+#: order/templates/order/purchase_order_detail.html:101
+#: stock/templates/stock/location.html:42
+msgid "Create new stock location"
+msgstr ""
+
+#: order/templates/order/order_cancel.html:8
+msgid "Cancelling this order means that the order and line items will no longer be editable."
 msgstr ""
 
 #: order/templates/order/order_complete.html:7
@@ -2826,10 +2853,10 @@ msgid "This order has line items which have not been marked as received."
 msgstr ""
 
 #: order/templates/order/order_complete.html:11
-msgid "Marking this order as complete will remove these line items."
+msgid "Completing this order means that the order and line items will no longer be editable."
 msgstr ""
 
-#: order/templates/order/order_issue.html:7
+#: order/templates/order/order_issue.html:8
 msgid "After placing this purchase order, line items will no longer be editable."
 msgstr ""
 
@@ -2881,11 +2908,13 @@ msgid "Select Purchase Order"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:45
-msgid "Create new purchase order for {{ supplier.name }}"
+#, python-format
+msgid "Create new purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:68
-msgid "Select a purchase order for"
+#, python-format
+msgid "Select a purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/po_attachments.html:12
@@ -2907,43 +2936,29 @@ msgid "Purchase Order Items"
 msgstr ""
 
 #: order/templates/order/purchase_order_detail.html:24
-#: order/templates/order/sales_order_detail.html:22 order/views.py:1108
-#: order/views.py:1191
+#: order/templates/order/sales_order_detail.html:22 order/views.py:1120
+#: order/views.py:1203
 msgid "Add Line Item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:45
-#: order/templates/order/purchase_order_detail.html:125
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
-#: stock/templates/stock/location.html:191 templates/js/stock.js:708
-#: templates/js/stock.js:1169
-msgid "New Location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:46
-#: order/templates/order/purchase_order_detail.html:126
-#: stock/templates/stock/location.html:42
-msgid "Create new stock location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:139
+#: order/templates/order/purchase_order_detail.html:114
 msgid "No line items found"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:205
+#: order/templates/order/purchase_order_detail.html:180
 msgid "Unit Price"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:246
+#: order/templates/order/purchase_order_detail.html:221
 #: order/templates/order/sales_order_detail.html:294
 msgid "Edit line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:247
+#: order/templates/order/purchase_order_detail.html:222
 msgid "Delete line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:252
+#: order/templates/order/purchase_order_detail.html:227
 msgid "Receive line item"
 msgstr ""
 
@@ -2966,7 +2981,7 @@ msgstr ""
 #: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
 #: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577
 #: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68
-#: users/models.py:38
+#: users/models.py:40
 msgid "Parts"
 msgstr ""
 
@@ -3019,6 +3034,10 @@ msgstr ""
 msgid "Warning"
 msgstr ""
 
+#: order/templates/order/sales_order_cancel.html:9
+msgid "Cancelling this order means that the order will no longer be editable."
+msgstr ""
+
 #: order/templates/order/sales_order_detail.html:13
 msgid "Sales Order Items"
 msgstr ""
@@ -3213,65 +3232,65 @@ msgstr ""
 msgid "No lines specified"
 msgstr ""
 
-#: order/views.py:1060
+#: order/views.py:1069
 #, python-brace-format
 msgid "Ordered {n} parts"
 msgstr ""
 
-#: order/views.py:1117
+#: order/views.py:1129
 msgid "Supplier part must be specified"
 msgstr ""
 
-#: order/views.py:1123
+#: order/views.py:1135
 msgid "Supplier must match for Part and Order"
 msgstr ""
 
-#: order/views.py:1242 order/views.py:1260
+#: order/views.py:1254 order/views.py:1272
 msgid "Edit Line Item"
 msgstr ""
 
-#: order/views.py:1276 order/views.py:1288
+#: order/views.py:1288 order/views.py:1300
 msgid "Delete Line Item"
 msgstr ""
 
-#: order/views.py:1281 order/views.py:1293
+#: order/views.py:1293 order/views.py:1305
 msgid "Deleted line item"
 msgstr ""
 
-#: order/views.py:1306
+#: order/views.py:1318
 msgid "Allocate Serial Numbers"
 msgstr ""
 
-#: order/views.py:1351
+#: order/views.py:1363
 #, python-brace-format
 msgid "Allocated {n} items"
 msgstr ""
 
-#: order/views.py:1367
+#: order/views.py:1379
 msgid "Select line item"
 msgstr ""
 
-#: order/views.py:1398
+#: order/views.py:1410
 msgid "No matching item for serial"
 msgstr ""
 
-#: order/views.py:1408
+#: order/views.py:1420
 msgid "is not in stock"
 msgstr ""
 
-#: order/views.py:1416
+#: order/views.py:1428
 msgid "already allocated to an order"
 msgstr ""
 
-#: order/views.py:1470
+#: order/views.py:1482
 msgid "Allocate Stock to Order"
 msgstr ""
 
-#: order/views.py:1544
+#: order/views.py:1556
 msgid "Edit Allocation Quantity"
 msgstr ""
 
-#: order/views.py:1559
+#: order/views.py:1571
 msgid "Remove allocation"
 msgstr ""
 
@@ -3457,7 +3476,7 @@ msgstr ""
 #: part/models.py:83 part/templates/part/category.html:23
 #: part/templates/part/category.html:94 part/templates/part/category.html:141
 #: templates/InvenTree/search.html:127 templates/stats.html:63
-#: users/models.py:37
+#: users/models.py:39
 msgid "Part Categories"
 msgstr ""
 
@@ -4004,7 +4023,7 @@ msgstr ""
 msgid "All parts"
 msgstr ""
 
-#: part/templates/part/category.html:29 part/views.py:2270
+#: part/templates/part/category.html:29 part/views.py:2282
 msgid "Create new part category"
 msgstr ""
 
@@ -4694,63 +4713,63 @@ msgstr ""
 msgid "Part Pricing"
 msgstr ""
 
-#: part/views.py:2069
+#: part/views.py:2081
 msgid "Create Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2079
+#: part/views.py:2091
 msgid "Edit Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2086
+#: part/views.py:2098
 msgid "Delete Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2094
+#: part/views.py:2106
 msgid "Create Part Parameter"
 msgstr ""
 
-#: part/views.py:2144
+#: part/views.py:2156
 msgid "Edit Part Parameter"
 msgstr ""
 
-#: part/views.py:2158
+#: part/views.py:2170
 msgid "Delete Part Parameter"
 msgstr ""
 
-#: part/views.py:2218
+#: part/views.py:2230
 msgid "Edit Part Category"
 msgstr ""
 
-#: part/views.py:2256
+#: part/views.py:2268
 msgid "Delete Part Category"
 msgstr ""
 
-#: part/views.py:2262
+#: part/views.py:2274
 msgid "Part category was deleted"
 msgstr ""
 
-#: part/views.py:2314
+#: part/views.py:2326
 msgid "Create Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2415
+#: part/views.py:2427
 msgid "Edit Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2471
+#: part/views.py:2483
 msgid "Delete Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2490
+#: part/views.py:2502
 msgid "Create BOM Item"
 msgstr ""
 
-#: part/views.py:2560
+#: part/views.py:2572
 msgid "Edit BOM item"
 msgstr ""
 
-#: part/views.py:2616
+#: part/views.py:2628
 msgid "Confim BOM item deletion"
 msgstr ""
 
@@ -5301,15 +5320,15 @@ msgid "Stock adjustment actions"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:164
-#: stock/templates/stock/location.html:65 templates/stock_table.html:56
+#: stock/templates/stock/location.html:65 templates/stock_table.html:57
 msgid "Count stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54
+#: stock/templates/stock/item_base.html:167 templates/stock_table.html:55
 msgid "Add stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55
+#: stock/templates/stock/item_base.html:170 templates/stock_table.html:56
 msgid "Remove stock"
 msgstr ""
 
@@ -5503,7 +5522,7 @@ msgid "Stock Details"
 msgstr ""
 
 #: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279
-#: templates/stats.html:76 users/models.py:39
+#: templates/stats.html:76 users/models.py:41
 msgid "Stock Locations"
 msgstr ""
 
@@ -5689,7 +5708,7 @@ msgstr ""
 msgid "Add Stock Items"
 msgstr ""
 
-#: stock/views.py:1001 users/models.py:180
+#: stock/views.py:1001 users/models.py:183
 msgid "Add"
 msgstr ""
 
@@ -5867,6 +5886,31 @@ msgstr ""
 msgid "No stock location set"
 msgstr ""
 
+#: templates/InvenTree/settings/appearance.html:10
+msgid "Theme Settings"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:17
+msgid "Color Themes"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:29
+#, python-format
+msgid ""
+"\n"
+"        The CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
+"        Please select another color theme :)\n"
+"    "
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:39
+msgid "Language"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:61
+msgid "Set Language"
+msgstr ""
+
 #: templates/InvenTree/settings/build.html:10
 msgid "Build Order Settings"
 msgstr ""
@@ -5950,7 +5994,7 @@ msgstr ""
 msgid "Stock Settings"
 msgstr ""
 
-#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49
+#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:50
 msgid "Stock Options"
 msgstr ""
 
@@ -5964,7 +6008,7 @@ msgid "Account"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:9
-msgid "Theme"
+msgid "Appearance"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:13
@@ -5983,22 +6027,6 @@ msgstr ""
 msgid "Categories"
 msgstr ""
 
-#: templates/InvenTree/settings/theme.html:10
-msgid "Theme Settings"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:17
-msgid "Color Themes"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:29
-#, python-format
-msgid "\n"
-"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
-"\t\tPlease select another color theme :)\n"
-"\t"
-msgstr ""
-
 #: templates/InvenTree/settings/user.html:16
 msgid "User Information"
 msgstr ""
@@ -6061,13 +6089,23 @@ msgid "View Code on GitHub"
 msgstr ""
 
 #: templates/about.html:63
-msgid "Get the App"
+msgid "Credits"
 msgstr ""
 
 #: templates/about.html:68
+msgid "Mobile App"
+msgstr ""
+
+#: templates/about.html:73
 msgid "Submit Bug Report"
 msgstr ""
 
+#: templates/about.html:82 templates/js/modals.js:550
+#: templates/js/modals.js:809 templates/modals.html:28 templates/modals.html:52
+#: templates/modals.html:93
+msgid "Close"
+msgstr ""
+
 #: templates/attachment_table.html:6
 msgid "Add Attachment"
 msgstr ""
@@ -6263,7 +6301,7 @@ msgid "Quantity Per"
 msgstr ""
 
 #: templates/js/build.js:638 templates/js/build.js:1056
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order stock"
 msgstr ""
 
@@ -6396,11 +6434,6 @@ msgstr ""
 msgid "Submit"
 msgstr ""
 
-#: templates/js/modals.js:550 templates/js/modals.js:809
-#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93
-msgid "Close"
-msgstr ""
-
 #: templates/js/modals.js:760
 msgid "Invalid response from server"
 msgstr ""
@@ -6974,6 +7007,10 @@ msgstr ""
 msgid "Form errors exist"
 msgstr ""
 
+#: templates/navbar.html:13
+msgid "Toggle navigation"
+msgstr ""
+
 #: templates/navbar.html:33
 msgid "Buy"
 msgstr ""
@@ -6986,7 +7023,7 @@ msgstr ""
 msgid "Scan Barcode"
 msgstr ""
 
-#: templates/navbar.html:77 users/models.py:36
+#: templates/navbar.html:77 users/models.py:38
 msgid "Admin"
 msgstr ""
 
@@ -7118,43 +7155,43 @@ msgstr ""
 msgid "Print test reports"
 msgstr ""
 
-#: templates/stock_table.html:54
+#: templates/stock_table.html:55
 msgid "Add to selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:55
+#: templates/stock_table.html:56
 msgid "Remove from selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:56
+#: templates/stock_table.html:57
 msgid "Stocktake selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move stock"
 msgstr ""
 
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order selected items"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change status"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change stock status"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete selected items"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete Stock"
 msgstr ""
 
@@ -7190,34 +7227,34 @@ msgstr ""
 msgid "Important dates"
 msgstr ""
 
-#: users/models.py:167
+#: users/models.py:170
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:175
+#: users/models.py:178
 msgid "Group"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "View"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:180
+#: users/models.py:183
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Change"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:184
+#: users/models.py:187
 msgid "Permission to delete items"
 msgstr ""
diff --git a/InvenTree/locale/tr/LC_MESSAGES/django.po b/InvenTree/locale/tr/LC_MESSAGES/django.po
index b8105d1fde..db257af1fe 100644
--- a/InvenTree/locale/tr/LC_MESSAGES/django.po
+++ b/InvenTree/locale/tr/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-21 22:29+1000\n"
+"POT-Creation-Date: 2021-05-05 17:33+1000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -73,35 +73,36 @@ msgstr ""
 msgid "Select Category"
 msgstr ""
 
-#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344
-#: stock/views.py:1763
-msgid "Invalid quantity provided"
-msgstr ""
-
-#: InvenTree/helpers.py:378
-msgid "Empty serial number string"
-msgstr ""
-
-#: InvenTree/helpers.py:399
+#: InvenTree/helpers.py:377
 #, python-brace-format
 msgid "Duplicate serial: {n}"
 msgstr ""
 
-#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409
+#: InvenTree/helpers.py:384 order/models.py:245 order/models.py:353
+#: stock/views.py:1763
+msgid "Invalid quantity provided"
+msgstr ""
+
+#: InvenTree/helpers.py:387
+msgid "Empty serial number string"
+msgstr ""
+
+#: InvenTree/helpers.py:409 InvenTree/helpers.py:412 InvenTree/helpers.py:415
+#: InvenTree/helpers.py:440
 #, python-brace-format
 msgid "Invalid group: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:414
+#: InvenTree/helpers.py:445
 #, python-brace-format
 msgid "Duplicate serial: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:422
+#: InvenTree/helpers.py:453
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:426
+#: InvenTree/helpers.py:457
 #, python-brace-format
 msgid "Number of unique serial number ({s}) must match quantity ({q})"
 msgstr ""
@@ -146,7 +147,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_base.html:72
 #: company/templates/company/supplier_part_base.html:71
 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108
-#: order/models.py:101 order/templates/order/purchase_order_detail.html:168
+#: order/models.py:101 order/templates/order/purchase_order_detail.html:143
 #: part/models.py:710 part/templates/part/detail.html:54
 #: part/templates/part/set_category.html:14 report/models.py:192
 #: report/models.py:505 report/models.py:544
@@ -171,23 +172,23 @@ msgstr ""
 msgid "parent"
 msgstr ""
 
-#: InvenTree/settings.py:493
+#: InvenTree/settings.py:491
 msgid "English"
 msgstr ""
 
-#: InvenTree/settings.py:494
+#: InvenTree/settings.py:492
 msgid "French"
 msgstr ""
 
-#: InvenTree/settings.py:495
+#: InvenTree/settings.py:493
 msgid "German"
 msgstr ""
 
-#: InvenTree/settings.py:496
+#: InvenTree/settings.py:494
 msgid "Polish"
 msgstr ""
 
-#: InvenTree/settings.py:497
+#: InvenTree/settings.py:495
 msgid "Turkish"
 msgstr ""
 
@@ -378,20 +379,19 @@ msgid "Target Date"
 msgstr ""
 
 #: build/forms.py:43 build/models.py:224
-msgid ""
-"Target date for build completion. Build will be overdue after this date."
+msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1227
+#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1241
 #: build/templates/build/allocation_card.html:23
 #: build/templates/build/auto_allocate.html:17
 #: build/templates/build/build_base.html:123
 #: build/templates/build/detail.html:31 common/models.py:703
 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77
 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261
-#: order/forms.py:278 order/models.py:593 order/models.py:784
+#: order/forms.py:278 order/models.py:603 order/models.py:794
 #: order/templates/order/order_wizard/select_parts.html:32
-#: order/templates/order/purchase_order_detail.html:200
+#: order/templates/order/purchase_order_detail.html:175
 #: order/templates/order/sales_order_detail.html:70
 #: order/templates/order/sales_order_detail.html:77
 #: order/templates/order/sales_order_detail.html:159
@@ -465,7 +465,7 @@ msgid "Location of completed parts"
 msgstr ""
 
 #: build/forms.py:215 build/templates/build/build_base.html:128
-#: build/templates/build/detail.html:59 order/models.py:445
+#: build/templates/build/detail.html:59 order/models.py:455
 #: order/templates/order/receive_parts.html:24
 #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252
 #: templates/js/barcode.js:119 templates/js/build.js:770
@@ -515,7 +515,7 @@ msgstr ""
 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183
 #: templates/InvenTree/search.html:185
-#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
+#: templates/InvenTree/settings/tabs.html:31 users/models.py:43
 msgid "Build Orders"
 msgstr ""
 
@@ -523,8 +523,8 @@ msgstr ""
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:127 order/models.py:99 order/models.py:595
-#: order/templates/order/purchase_order_detail.html:195
+#: build/models.py:127 order/models.py:99 order/models.py:605
+#: order/templates/order/purchase_order_detail.html:170
 #: order/templates/order/sales_order_detail.html:219 part/models.py:2187
 #: report/templates/report/inventree_po_report.html:92
 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
@@ -547,10 +547,10 @@ msgstr ""
 
 #: build/models.py:152 build/templates/build/auto_allocate.html:16
 #: build/templates/build/build_base.html:118
-#: build/templates/build/detail.html:26 company/models.py:669
-#: order/models.py:637 order/models.py:669
+#: build/templates/build/detail.html:26 company/models.py:688
+#: order/models.py:647 order/models.py:679
 #: order/templates/order/order_wizard/select_parts.html:30
-#: order/templates/order/purchase_order_detail.html:156
+#: order/templates/order/purchase_order_detail.html:131
 #: order/templates/order/receive_parts.html:19
 #: order/templates/order/sales_order_detail.html:207 part/models.py:321
 #: part/models.py:1876 part/models.py:1888 part/models.py:1906
@@ -587,9 +587,7 @@ msgid "Source Location"
 msgstr ""
 
 #: build/models.py:178
-msgid ""
-"Select location to take stock from for this build (leave blank to take from "
-"any stock location)"
+msgid "Select location to take stock from for this build (leave blank to take from any stock location)"
 msgstr ""
 
 #: build/models.py:183
@@ -637,7 +635,7 @@ msgstr ""
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:223 order/models.py:451
+#: build/models.py:223 order/models.py:461
 msgid "Target completion date"
 msgstr ""
 
@@ -687,9 +685,9 @@ msgstr ""
 #: company/models.py:135 company/models.py:501
 #: company/templates/company/navbar.html:70
 #: company/templates/company/navbar.html:73 order/models.py:123
-#: order/models.py:597 order/templates/order/po_navbar.html:29
+#: order/models.py:607 order/templates/order/po_navbar.html:29
 #: order/templates/order/po_navbar.html:32
-#: order/templates/order/purchase_order_detail.html:234
+#: order/templates/order/purchase_order_detail.html:209
 #: order/templates/order/sales_order_detail.html:264
 #: order/templates/order/so_navbar.html:33
 #: order/templates/order/so_navbar.html:36 part/models.py:871
@@ -722,48 +720,47 @@ msgstr ""
 msgid "Completed build output"
 msgstr ""
 
-#: build/models.py:1118
+#: build/models.py:1132
 msgid "BuildItem must be unique for build, stock_item and install_into"
 msgstr ""
 
-#: build/models.py:1143
-msgid ""
-"Build item must specify a build output, as master part is marked as trackable"
+#: build/models.py:1157
+msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1147
+#: build/models.py:1161
 #, python-brace-format
 msgid "Selected stock item not found in BOM for part '{p}'"
 msgstr ""
 
-#: build/models.py:1151
+#: build/models.py:1165
 #, python-brace-format
 msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
 msgstr ""
 
-#: build/models.py:1158 order/models.py:758
+#: build/models.py:1172 order/models.py:768
 msgid "StockItem is over-allocated"
 msgstr ""
 
-#: build/models.py:1162 order/models.py:761
+#: build/models.py:1176 order/models.py:771
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1166
+#: build/models.py:1180
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1206 stock/templates/stock/item_base.html:306
+#: build/models.py:1220 stock/templates/stock/item_base.html:306
 #: templates/InvenTree/search.html:183 templates/js/build.js:714
 #: templates/navbar.html:29
 msgid "Build"
 msgstr ""
 
-#: build/models.py:1207
+#: build/models.py:1221
 msgid "Build to allocate parts"
 msgstr ""
 
-#: build/models.py:1214 part/templates/part/allocation.html:18
+#: build/models.py:1228 part/templates/part/allocation.html:18
 #: part/templates/part/allocation.html:24
 #: part/templates/part/allocation.html:31
 #: part/templates/part/allocation.html:49
@@ -775,19 +772,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1215
+#: build/models.py:1229
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1228
+#: build/models.py:1242
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1236
+#: build/models.py:1250
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1237
+#: build/models.py:1251
 msgid "Destination stock item"
 msgstr ""
 
@@ -811,7 +808,7 @@ msgstr ""
 msgid "Unallocate stock"
 msgstr ""
 
-#: build/templates/build/allocate.html:26 build/views.py:308 build/views.py:794
+#: build/templates/build/allocate.html:26 build/views.py:319 build/views.py:805
 msgid "Unallocate Stock"
 msgstr ""
 
@@ -821,7 +818,7 @@ msgstr ""
 
 #: build/templates/build/allocate.html:30
 #: company/templates/company/detail_manufacturer_part.html:33
-#: company/templates/company/detail_supplier_part.html:32 order/views.py:794
+#: company/templates/company/detail_supplier_part.html:32 order/views.py:795
 #: part/templates/part/category.html:127
 msgid "Order Parts"
 msgstr ""
@@ -862,8 +859,7 @@ msgid "Automatically Allocate Stock"
 msgstr ""
 
 #: build/templates/build/auto_allocate.html:10
-msgid ""
-"The following stock items will be allocated to the specified build output"
+msgid "The following stock items will be allocated to the specified build output"
 msgstr ""
 
 #: build/templates/build/auto_allocate.html:37
@@ -965,7 +961,7 @@ msgid "Progress"
 msgstr ""
 
 #: build/templates/build/build_base.html:160
-#: build/templates/build/detail.html:84 order/models.py:667
+#: build/templates/build/detail.html:84 order/models.py:677
 #: order/templates/order/sales_order_base.html:9
 #: order/templates/order/sales_order_base.html:33
 #: order/templates/order/sales_order_ship.html:25
@@ -1089,9 +1085,7 @@ msgstr ""
 
 #: build/templates/build/create_build_item.html:11
 #, python-format
-msgid ""
-"The allocated stock will be installed into the following build output:<br><i>"
-"%(output)s</i>"
+msgid "The allocated stock will be installed into the following build output:<br><i>%(output)s</i>"
 msgstr ""
 
 #: build/templates/build/create_build_item.html:17
@@ -1152,7 +1146,7 @@ msgstr ""
 msgid "Alter the quantity of stock allocated to the build output"
 msgstr ""
 
-#: build/templates/build/index.html:28 build/views.py:667
+#: build/templates/build/index.html:28 build/views.py:678
 msgid "New Build Order"
 msgstr ""
 
@@ -1239,141 +1233,145 @@ msgstr ""
 msgid "Create Build Output"
 msgstr ""
 
-#: build/views.py:173 stock/models.py:969 stock/views.py:1789
+#: build/views.py:168
+msgid "Maximum output quantity is "
+msgstr ""
+
+#: build/views.py:184 stock/models.py:969 stock/views.py:1789
 msgid "Serial numbers already exist"
 msgstr ""
 
-#: build/views.py:182
+#: build/views.py:193
 msgid "Serial numbers required for trackable build output"
 msgstr ""
 
-#: build/views.py:248
+#: build/views.py:259
 msgid "Delete Build Output"
 msgstr ""
 
-#: build/views.py:269 build/views.py:359
+#: build/views.py:280 build/views.py:370
 msgid "Confirm unallocation of build stock"
 msgstr ""
 
-#: build/views.py:270 build/views.py:360 stock/views.py:425
+#: build/views.py:281 build/views.py:371 stock/views.py:425
 msgid "Check the confirmation box"
 msgstr ""
 
-#: build/views.py:282
+#: build/views.py:293
 msgid "Build output does not match build"
 msgstr ""
 
-#: build/views.py:284 build/views.py:485
+#: build/views.py:295 build/views.py:496
 msgid "Build output must be specified"
 msgstr ""
 
-#: build/views.py:296
+#: build/views.py:307
 msgid "Build output deleted"
 msgstr ""
 
-#: build/views.py:394
+#: build/views.py:405
 msgid "Complete Build Order"
 msgstr ""
 
-#: build/views.py:400
+#: build/views.py:411
 msgid "Build order cannot be completed - incomplete outputs remain"
 msgstr ""
 
-#: build/views.py:411
+#: build/views.py:422
 msgid "Completed build order"
 msgstr ""
 
-#: build/views.py:427
+#: build/views.py:438
 msgid "Complete Build Output"
 msgstr ""
 
-#: build/views.py:469
+#: build/views.py:480
 msgid "Invalid stock status value selected"
 msgstr ""
 
-#: build/views.py:476
+#: build/views.py:487
 msgid "Quantity to complete cannot exceed build output quantity"
 msgstr ""
 
-#: build/views.py:482
+#: build/views.py:493
 msgid "Confirm completion of incomplete build"
 msgstr ""
 
-#: build/views.py:581
+#: build/views.py:592
 msgid "Build output completed"
 msgstr ""
 
-#: build/views.py:721
+#: build/views.py:732
 msgid "Created new build"
 msgstr ""
 
-#: build/views.py:742
+#: build/views.py:753
 msgid "Edit Build Order Details"
 msgstr ""
 
-#: build/views.py:775
+#: build/views.py:786
 msgid "Edited build"
 msgstr ""
 
-#: build/views.py:784
+#: build/views.py:795
 msgid "Delete Build Order"
 msgstr ""
 
-#: build/views.py:799
+#: build/views.py:810
 msgid "Removed parts from build allocation"
 msgstr ""
 
-#: build/views.py:811
+#: build/views.py:822
 msgid "Allocate stock to build output"
 msgstr ""
 
-#: build/views.py:854
+#: build/views.py:865
 msgid "Item must be currently in stock"
 msgstr ""
 
-#: build/views.py:860
+#: build/views.py:871
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/views.py:861 templates/js/bom.js:230 templates/js/build.js:575
+#: build/views.py:872 templates/js/bom.js:230 templates/js/build.js:575
 #: templates/js/build.js:838 templates/js/build.js:1021
 msgid "Available"
 msgstr ""
 
-#: build/views.py:863
+#: build/views.py:874
 msgid "Stock item must be selected"
 msgstr ""
 
-#: build/views.py:1026
+#: build/views.py:1037
 msgid "Edit Stock Allocation"
 msgstr ""
 
-#: build/views.py:1030
+#: build/views.py:1041
 msgid "Updated Build Item"
 msgstr ""
 
-#: build/views.py:1059
+#: build/views.py:1070
 msgid "Add Build Order Attachment"
 msgstr ""
 
-#: build/views.py:1072 order/views.py:110 order/views.py:162 part/views.py:172
+#: build/views.py:1083 order/views.py:110 order/views.py:162 part/views.py:172
 #: stock/views.py:277
 msgid "Added attachment"
 msgstr ""
 
-#: build/views.py:1108 order/views.py:189 order/views.py:210
+#: build/views.py:1119 order/views.py:189 order/views.py:210
 msgid "Edit Attachment"
 msgstr ""
 
-#: build/views.py:1118 order/views.py:193 order/views.py:214
+#: build/views.py:1129 order/views.py:193 order/views.py:214
 msgid "Attachment updated"
 msgstr ""
 
-#: build/views.py:1128 order/views.py:229 order/views.py:243
+#: build/views.py:1139 order/views.py:229 order/views.py:243
 msgid "Delete Attachment"
 msgstr ""
 
-#: build/views.py:1133 order/views.py:235 order/views.py:249 stock/views.py:333
+#: build/views.py:1144 order/views.py:235 order/views.py:249 stock/views.py:333
 msgid "Deleted attachment"
 msgstr ""
 
@@ -1779,7 +1777,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_detail.html:26
 #: company/templates/company/supplier_part_base.html:101
 #: company/templates/company/supplier_part_detail.html:35
-#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171
+#: order/templates/order/purchase_order_detail.html:158 part/bom.py:171
 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307
 msgid "MPN"
 msgstr ""
@@ -1878,7 +1876,7 @@ msgstr ""
 msgid "Base Part"
 msgstr ""
 
-#: company/models.py:312 company/models.py:463 order/views.py:1372
+#: company/models.py:312 company/models.py:463 order/views.py:1384
 msgid "Select part"
 msgstr ""
 
@@ -1918,7 +1916,7 @@ msgstr ""
 
 #: company/models.py:475 company/templates/company/supplier_part_base.html:88
 #: company/templates/company/supplier_part_detail.html:26
-#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176
+#: order/templates/order/purchase_order_detail.html:149 part/bom.py:176
 #: part/bom.py:287
 msgid "SKU"
 msgstr ""
@@ -2032,8 +2030,7 @@ msgstr ""
 #, python-format
 msgid ""
 "There are %(count)s parts sourced from this company.<br>\n"
-"If this supplier is deleted, these supplier part entries will also be "
-"deleted."
+"If this supplier is deleted, these supplier part entries will also be deleted."
 msgstr ""
 
 #: company/templates/company/detail.html:21
@@ -2048,7 +2045,7 @@ msgstr ""
 msgid "Uses default currency"
 msgstr ""
 
-#: company/templates/company/detail.html:67 order/models.py:440
+#: company/templates/company/detail.html:67 order/models.py:450
 #: order/templates/order/sales_order_base.html:92 stock/models.py:415
 #: stock/models.py:416 stock/templates/stock/item_base.html:251
 #: templates/js/company.js:40 templates/js/order.js:267
@@ -2137,13 +2134,13 @@ msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:21
 #: order/templates/order/order_wizard/select_parts.html:42
-#: order/templates/order/purchase_order_detail.html:75
+#: order/templates/order/purchase_order_detail.html:50
 msgid "Create new supplier part"
 msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:22
 #: company/templates/company/manufacturer_part_suppliers.html:17
-#: order/templates/order/purchase_order_detail.html:74
+#: order/templates/order/purchase_order_detail.html:49
 #: part/templates/part/supplier.html:17 templates/js/stock.js:1163
 msgid "New Supplier Part"
 msgstr ""
@@ -2197,9 +2194,7 @@ msgstr ""
 
 #: company/templates/company/manufacturer_part_delete.html:36
 #, python-format
-msgid ""
-"There are %(count)s suppliers defined for this manufacturer part. If you "
-"delete it, the following supplier parts will also be deleted:"
+msgid "There are %(count)s suppliers defined for this manufacturer part. If you delete it, the following supplier parts will also be deleted:"
 msgstr ""
 
 #: company/templates/company/manufacturer_part_navbar.html:14
@@ -2243,7 +2238,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_suppliers.html:22
 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44
 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22
-#: stock/views.py:1002 users/models.py:184
+#: stock/views.py:1002 users/models.py:187
 msgid "Delete"
 msgstr ""
 
@@ -2269,7 +2264,7 @@ msgstr ""
 #: stock/templates/stock/location_navbar.html:22
 #: stock/templates/stock/location_navbar.html:29
 #: templates/InvenTree/search.html:198 templates/js/stock.js:968
-#: templates/stats.html:72 templates/stats.html:81 users/models.py:40
+#: templates/stats.html:72 templates/stats.html:81 users/models.py:42
 msgid "Stock Items"
 msgstr ""
 
@@ -2283,7 +2278,7 @@ msgstr ""
 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228
 #: templates/InvenTree/search.html:345
 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
-#: users/models.py:43
+#: users/models.py:45
 msgid "Sales Orders"
 msgstr ""
 
@@ -2295,7 +2290,7 @@ msgstr ""
 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:205
 #: templates/InvenTree/search.html:325
 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
-#: users/models.py:42
+#: users/models.py:44
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2374,7 +2369,7 @@ msgid "Pricing Information"
 msgstr ""
 
 #: company/templates/company/supplier_part_pricing.html:19 company/views.py:794
-#: part/templates/part/sale_prices.html:17 part/views.py:2624
+#: part/templates/part/sale_prices.html:17 part/views.py:2636
 msgid "Add Price Break"
 msgstr ""
 
@@ -2484,15 +2479,15 @@ msgstr ""
 msgid "Delete Supplier Part"
 msgstr ""
 
-#: company/views.py:799 part/views.py:2628
+#: company/views.py:799 part/views.py:2640
 msgid "Added new price break"
 msgstr ""
 
-#: company/views.py:855 part/views.py:2672
+#: company/views.py:855 part/views.py:2684
 msgid "Edit Price Break"
 msgstr ""
 
-#: company/views.py:870 part/views.py:2686
+#: company/views.py:870 part/views.py:2698
 msgid "Delete Price Break"
 msgstr ""
 
@@ -2582,9 +2577,8 @@ msgstr ""
 msgid "Enter sales order number"
 msgstr ""
 
-#: order/forms.py:145 order/models.py:452
-msgid ""
-"Target date for order completion. Order will be overdue after this date."
+#: order/forms.py:145 order/models.py:462
+msgid "Target date for order completion. Order will be overdue after this date."
 msgstr ""
 
 #: order/forms.py:235
@@ -2619,7 +2613,7 @@ msgstr ""
 msgid "Order notes"
 msgstr ""
 
-#: order/models.py:182 order/models.py:445
+#: order/models.py:182 order/models.py:455
 msgid "Purchase order status"
 msgstr ""
 
@@ -2653,16 +2647,15 @@ msgid "Target Delivery Date"
 msgstr ""
 
 #: order/models.py:213
-msgid ""
-"Expected date for order delivery. Order will be overdue after this date."
+msgid "Expected date for order delivery. Order will be overdue after this date."
 msgstr ""
 
 #: order/models.py:219
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:243 order/models.py:342 part/views.py:1586
-#: stock/models.py:270 stock/models.py:953
+#: order/models.py:243 part/views.py:1586 stock/models.py:270
+#: stock/models.py:953
 msgid "Quantity must be greater than zero"
 msgstr ""
 
@@ -2670,120 +2663,128 @@ msgstr ""
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:337
+#: order/models.py:344
 msgid "Lines can only be received against an order marked as 'Placed'"
 msgstr ""
 
-#: order/models.py:359
+#: order/models.py:348
+msgid "Quantity must be an integer"
+msgstr ""
+
+#: order/models.py:350
+msgid "Quantity must be a positive number"
+msgstr ""
+
+#: order/models.py:369
 msgid "Received items"
 msgstr ""
 
-#: order/models.py:441
+#: order/models.py:451
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:455 templates/js/order.js:303
+#: order/models.py:465 templates/js/order.js:303
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:462
+#: order/models.py:472
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:506
+#: order/models.py:516
 msgid "SalesOrder cannot be shipped as it is not currently pending"
 msgstr ""
 
-#: order/models.py:593
+#: order/models.py:603
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:595
+#: order/models.py:605
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:597
+#: order/models.py:607
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:623 order/models.py:667
+#: order/models.py:633 order/models.py:677
 #: part/templates/part/allocation.html:17
 #: part/templates/part/allocation.html:45
 msgid "Order"
 msgstr ""
 
-#: order/models.py:624 order/templates/order/order_base.html:9
+#: order/models.py:634 order/templates/order/order_base.html:9
 #: order/templates/order/order_base.html:24
 #: report/templates/report/inventree_po_report.html:77
 #: stock/templates/stock/item_base.html:313 templates/js/order.js:148
 msgid "Purchase Order"
 msgstr ""
 
-#: order/models.py:638
+#: order/models.py:648
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:641 order/templates/order/order_base.html:131
-#: order/templates/order/purchase_order_detail.html:214
+#: order/models.py:651 order/templates/order/order_base.html:131
+#: order/templates/order/purchase_order_detail.html:189
 #: order/templates/order/receive_parts.html:22
 #: order/templates/order/sales_order_base.html:131
 msgid "Received"
 msgstr ""
 
-#: order/models.py:641
+#: order/models.py:651
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:648 stock/models.py:508
+#: order/models.py:658 stock/models.py:508
 #: stock/templates/stock/item_base.html:320
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:649
+#: order/models.py:659
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:743 order/models.py:745
+#: order/models.py:753 order/models.py:755
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:749
+#: order/models.py:759
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:751
+#: order/models.py:761
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:754
+#: order/models.py:764
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:764
+#: order/models.py:774
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:769
+#: order/models.py:779
 msgid "Line"
 msgstr ""
 
-#: order/models.py:780
+#: order/models.py:790
 msgid "Item"
 msgstr ""
 
-#: order/models.py:781
+#: order/models.py:791
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:784
+#: order/models.py:794
 msgid "Enter stock allocation quantity"
 msgstr ""
 
@@ -2831,9 +2832,22 @@ msgstr ""
 msgid "Issued"
 msgstr ""
 
-#: order/templates/order/order_cancel.html:7
-#: order/templates/order/sales_order_cancel.html:9
-msgid "Cancelling this order means that the order will no longer be editable."
+#: order/templates/order/order_base.html:180
+#: order/templates/order/purchase_order_detail.html:100
+#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: stock/templates/stock/location.html:191 templates/js/stock.js:708
+#: templates/js/stock.js:1169
+msgid "New Location"
+msgstr ""
+
+#: order/templates/order/order_base.html:181
+#: order/templates/order/purchase_order_detail.html:101
+#: stock/templates/stock/location.html:42
+msgid "Create new stock location"
+msgstr ""
+
+#: order/templates/order/order_cancel.html:8
+msgid "Cancelling this order means that the order and line items will no longer be editable."
 msgstr ""
 
 #: order/templates/order/order_complete.html:7
@@ -2845,12 +2859,11 @@ msgid "This order has line items which have not been marked as received."
 msgstr ""
 
 #: order/templates/order/order_complete.html:11
-msgid "Marking this order as complete will remove these line items."
+msgid "Completing this order means that the order and line items will no longer be editable."
 msgstr ""
 
-#: order/templates/order/order_issue.html:7
-msgid ""
-"After placing this purchase order, line items will no longer be editable."
+#: order/templates/order/order_issue.html:8
+msgid "After placing this purchase order, line items will no longer be editable."
 msgstr ""
 
 #: order/templates/order/order_notes.html:13
@@ -2929,43 +2942,29 @@ msgid "Purchase Order Items"
 msgstr ""
 
 #: order/templates/order/purchase_order_detail.html:24
-#: order/templates/order/sales_order_detail.html:22 order/views.py:1108
-#: order/views.py:1191
+#: order/templates/order/sales_order_detail.html:22 order/views.py:1120
+#: order/views.py:1203
 msgid "Add Line Item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:45
-#: order/templates/order/purchase_order_detail.html:125
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
-#: stock/templates/stock/location.html:191 templates/js/stock.js:708
-#: templates/js/stock.js:1169
-msgid "New Location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:46
-#: order/templates/order/purchase_order_detail.html:126
-#: stock/templates/stock/location.html:42
-msgid "Create new stock location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:139
+#: order/templates/order/purchase_order_detail.html:114
 msgid "No line items found"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:205
+#: order/templates/order/purchase_order_detail.html:180
 msgid "Unit Price"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:246
+#: order/templates/order/purchase_order_detail.html:221
 #: order/templates/order/sales_order_detail.html:294
 msgid "Edit line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:247
+#: order/templates/order/purchase_order_detail.html:222
 msgid "Delete line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:252
+#: order/templates/order/purchase_order_detail.html:227
 msgid "Receive line item"
 msgstr ""
 
@@ -2988,7 +2987,7 @@ msgstr ""
 #: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
 #: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577
 #: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68
-#: users/models.py:38
+#: users/models.py:40
 msgid "Parts"
 msgstr ""
 
@@ -3041,6 +3040,10 @@ msgstr ""
 msgid "Warning"
 msgstr ""
 
+#: order/templates/order/sales_order_cancel.html:9
+msgid "Cancelling this order means that the order will no longer be editable."
+msgstr ""
+
 #: order/templates/order/sales_order_detail.html:13
 msgid "Sales Order Items"
 msgstr ""
@@ -3103,9 +3106,7 @@ msgid "Sales Order Notes"
 msgstr ""
 
 #: order/templates/order/sales_order_ship.html:10
-msgid ""
-"This order has not been fully allocated. If the order is marked as shipped, "
-"it can no longer be adjusted."
+msgid "This order has not been fully allocated. If the order is marked as shipped, it can no longer be adjusted."
 msgstr ""
 
 #: order/templates/order/sales_order_ship.html:12
@@ -3237,65 +3238,65 @@ msgstr ""
 msgid "No lines specified"
 msgstr ""
 
-#: order/views.py:1060
+#: order/views.py:1069
 #, python-brace-format
 msgid "Ordered {n} parts"
 msgstr ""
 
-#: order/views.py:1117
+#: order/views.py:1129
 msgid "Supplier part must be specified"
 msgstr ""
 
-#: order/views.py:1123
+#: order/views.py:1135
 msgid "Supplier must match for Part and Order"
 msgstr ""
 
-#: order/views.py:1242 order/views.py:1260
+#: order/views.py:1254 order/views.py:1272
 msgid "Edit Line Item"
 msgstr ""
 
-#: order/views.py:1276 order/views.py:1288
+#: order/views.py:1288 order/views.py:1300
 msgid "Delete Line Item"
 msgstr ""
 
-#: order/views.py:1281 order/views.py:1293
+#: order/views.py:1293 order/views.py:1305
 msgid "Deleted line item"
 msgstr ""
 
-#: order/views.py:1306
+#: order/views.py:1318
 msgid "Allocate Serial Numbers"
 msgstr ""
 
-#: order/views.py:1351
+#: order/views.py:1363
 #, python-brace-format
 msgid "Allocated {n} items"
 msgstr ""
 
-#: order/views.py:1367
+#: order/views.py:1379
 msgid "Select line item"
 msgstr ""
 
-#: order/views.py:1398
+#: order/views.py:1410
 msgid "No matching item for serial"
 msgstr ""
 
-#: order/views.py:1408
+#: order/views.py:1420
 msgid "is not in stock"
 msgstr ""
 
-#: order/views.py:1416
+#: order/views.py:1428
 msgid "already allocated to an order"
 msgstr ""
 
-#: order/views.py:1470
+#: order/views.py:1482
 msgid "Allocate Stock to Order"
 msgstr ""
 
-#: order/views.py:1544
+#: order/views.py:1556
 msgid "Edit Allocation Quantity"
 msgstr ""
 
-#: order/views.py:1559
+#: order/views.py:1571
 msgid "Remove allocation"
 msgstr ""
 
@@ -3481,7 +3482,7 @@ msgstr ""
 #: part/models.py:83 part/templates/part/category.html:23
 #: part/templates/part/category.html:94 part/templates/part/category.html:141
 #: templates/InvenTree/search.html:127 templates/stats.html:63
-#: users/models.py:37
+#: users/models.py:39
 msgid "Part Categories"
 msgstr ""
 
@@ -3826,9 +3827,7 @@ msgid "Select Related Part"
 msgstr ""
 
 #: part/models.py:2440
-msgid ""
-"Error creating relationship: check that the part is not related to itself "
-"and that the relationship is unique"
+msgid "Error creating relationship: check that the part is not related to itself and that the relationship is unique"
 msgstr ""
 
 #: part/templates/part/allocation.html:11
@@ -3859,8 +3858,7 @@ msgstr ""
 
 #: part/templates/part/bom.html:21
 #, python-format
-msgid ""
-"The BOM for <i>%(part)s</i> was last checked by %(checker)s on %(check_date)s"
+msgid "The BOM for <i>%(part)s</i> was last checked by %(checker)s on %(check_date)s"
 msgstr ""
 
 #: part/templates/part/bom.html:25
@@ -3995,8 +3993,7 @@ msgid "Requirements for BOM upload"
 msgstr ""
 
 #: part/templates/part/bom_upload/upload_file.html:21
-msgid ""
-"The BOM file must contain the required named columns as provided in the "
+msgid "The BOM file must contain the required named columns as provided in the "
 msgstr ""
 
 #: part/templates/part/bom_upload/upload_file.html:21
@@ -4013,8 +4010,7 @@ msgstr ""
 
 #: part/templates/part/bom_validate.html:6
 #, python-format
-msgid ""
-"Confirm that the Bill of Materials (BOM) is valid for:<br><i>%(part)s</i>"
+msgid "Confirm that the Bill of Materials (BOM) is valid for:<br><i>%(part)s</i>"
 msgstr ""
 
 #: part/templates/part/bom_validate.html:9
@@ -4033,7 +4029,7 @@ msgstr ""
 msgid "All parts"
 msgstr ""
 
-#: part/templates/part/category.html:29 part/views.py:2270
+#: part/templates/part/category.html:29 part/views.py:2282
 msgid "Create new part category"
 msgstr ""
 
@@ -4115,8 +4111,7 @@ msgid "This category contains %(count)s child categories"
 msgstr ""
 
 #: part/templates/part/category_delete.html:9
-msgid ""
-"If this category is deleted, these child categories will be moved to the"
+msgid "If this category is deleted, these child categories will be moved to the"
 msgstr ""
 
 #: part/templates/part/category_delete.html:11
@@ -4134,15 +4129,11 @@ msgstr ""
 
 #: part/templates/part/category_delete.html:27
 #, python-format
-msgid ""
-"If this category is deleted, these parts will be moved to the parent "
-"category %(path)s"
+msgid "If this category is deleted, these parts will be moved to the parent category %(path)s"
 msgstr ""
 
 #: part/templates/part/category_delete.html:29
-msgid ""
-"If this category is deleted, these parts will be moved to the top-level "
-"category Teile"
+msgid "If this category is deleted, these parts will be moved to the top-level category Teile"
 msgstr ""
 
 #: part/templates/part/category_navbar.html:34
@@ -4489,37 +4480,27 @@ msgstr ""
 
 #: part/templates/part/partial_delete.html:12
 #, python-format
-msgid ""
-"This part is used in BOMs for %(count)s other parts. If you delete this "
-"part, the BOMs for the following parts will be updated"
+msgid "This part is used in BOMs for %(count)s other parts. If you delete this part, the BOMs for the following parts will be updated"
 msgstr ""
 
 #: part/templates/part/partial_delete.html:22
 #, python-format
-msgid ""
-"There are %(count)s stock entries defined for this part. If you delete this "
-"part, the following stock entries will also be deleted:"
+msgid "There are %(count)s stock entries defined for this part. If you delete this part, the following stock entries will also be deleted:"
 msgstr ""
 
 #: part/templates/part/partial_delete.html:33
 #, python-format
-msgid ""
-"There are %(count)s manufacturers defined for this part. If you delete this "
-"part, the following manufacturer parts will also be deleted:"
+msgid "There are %(count)s manufacturers defined for this part. If you delete this part, the following manufacturer parts will also be deleted:"
 msgstr ""
 
 #: part/templates/part/partial_delete.html:44
 #, python-format
-msgid ""
-"There are %(count)s suppliers defined for this part. If you delete this "
-"part, the following supplier parts will also be deleted:"
+msgid "There are %(count)s suppliers defined for this part. If you delete this part, the following supplier parts will also be deleted:"
 msgstr ""
 
 #: part/templates/part/partial_delete.html:55
 #, python-format
-msgid ""
-"There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this "
-"part will permanently remove this tracking information."
+msgid "There are %(count)s unique parts tracked for '%(full_name)s'. Deleting this part will permanently remove this tracking information."
 msgstr ""
 
 #: part/templates/part/related.html:18
@@ -4738,63 +4719,63 @@ msgstr ""
 msgid "Part Pricing"
 msgstr ""
 
-#: part/views.py:2069
+#: part/views.py:2081
 msgid "Create Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2079
+#: part/views.py:2091
 msgid "Edit Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2086
+#: part/views.py:2098
 msgid "Delete Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2094
+#: part/views.py:2106
 msgid "Create Part Parameter"
 msgstr ""
 
-#: part/views.py:2144
+#: part/views.py:2156
 msgid "Edit Part Parameter"
 msgstr ""
 
-#: part/views.py:2158
+#: part/views.py:2170
 msgid "Delete Part Parameter"
 msgstr ""
 
-#: part/views.py:2218
+#: part/views.py:2230
 msgid "Edit Part Category"
 msgstr ""
 
-#: part/views.py:2256
+#: part/views.py:2268
 msgid "Delete Part Category"
 msgstr ""
 
-#: part/views.py:2262
+#: part/views.py:2274
 msgid "Part category was deleted"
 msgstr ""
 
-#: part/views.py:2314
+#: part/views.py:2326
 msgid "Create Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2415
+#: part/views.py:2427
 msgid "Edit Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2471
+#: part/views.py:2483
 msgid "Delete Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2490
+#: part/views.py:2502
 msgid "Create BOM Item"
 msgstr ""
 
-#: part/views.py:2560
+#: part/views.py:2572
 msgid "Edit BOM item"
 msgstr ""
 
-#: part/views.py:2616
+#: part/views.py:2628
 msgid "Confim BOM item deletion"
 msgstr ""
 
@@ -4942,9 +4923,7 @@ msgid "Enter unique serial numbers (or leave blank)"
 msgstr ""
 
 #: stock/forms.py:169
-msgid ""
-"Destination for serialized stock (by default, will remain in current "
-"location)"
+msgid "Destination for serialized stock (by default, will remain in current location)"
 msgstr ""
 
 #: stock/forms.py:171
@@ -5126,8 +5105,7 @@ msgid "Destination Sales Order"
 msgstr ""
 
 #: stock/models.py:476
-msgid ""
-"Expiry date for stock item. Stock will be considered expired after this date"
+msgid "Expiry date for stock item. Stock will be considered expired after this date"
 msgstr ""
 
 #: stock/models.py:489
@@ -5274,9 +5252,7 @@ msgid "Stock Item Attachments"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:24
-msgid ""
-"You are not in the list of owners of this item. This stock item cannot be "
-"edited."
+msgid "You are not in the list of owners of this item. This stock item cannot be edited."
 msgstr ""
 
 #: stock/templates/stock/item_base.html:31
@@ -5293,8 +5269,7 @@ msgstr ""
 
 #: stock/templates/stock/item_base.html:53
 #, python-format
-msgid ""
-"This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)"
+msgid "This stock item is allocated to Sales Order %(link)s (Quantity: %(qty)s)"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:61
@@ -5303,9 +5278,7 @@ msgid "This stock item is allocated to Build %(link)s (Quantity: %(qty)s)"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:67
-msgid ""
-"This stock item is serialized - it has a unique serial number and the "
-"quantity cannot be adjusted."
+msgid "This stock item is serialized - it has a unique serial number and the quantity cannot be adjusted."
 msgstr ""
 
 #: stock/templates/stock/item_base.html:71
@@ -5313,8 +5286,7 @@ msgid "This stock item cannot be deleted as it has child items"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:75
-msgid ""
-"This stock item will be automatically deleted when all stock is depleted."
+msgid "This stock item will be automatically deleted when all stock is depleted."
 msgstr ""
 
 #: stock/templates/stock/item_base.html:95
@@ -5354,15 +5326,15 @@ msgid "Stock adjustment actions"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:164
-#: stock/templates/stock/location.html:65 templates/stock_table.html:56
+#: stock/templates/stock/location.html:65 templates/stock_table.html:57
 msgid "Count stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54
+#: stock/templates/stock/item_base.html:167 templates/stock_table.html:55
 msgid "Add stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55
+#: stock/templates/stock/item_base.html:170 templates/stock_table.html:56
 msgid "Remove stock"
 msgstr ""
 
@@ -5463,8 +5435,7 @@ msgstr ""
 
 #: stock/templates/stock/item_delete.html:12
 #, python-format
-msgid ""
-"This will remove <b>%(qty)s</b> units of <b>%(full_name)s</b> from stock."
+msgid "This will remove <b>%(qty)s</b> units of <b>%(full_name)s</b> from stock."
 msgstr ""
 
 #: stock/templates/stock/item_install.html:7
@@ -5510,9 +5481,7 @@ msgid "Add Test Data"
 msgstr ""
 
 #: stock/templates/stock/location.html:20
-msgid ""
-"You are not in the list of owners of this location. This stock location "
-"cannot be edited."
+msgid "You are not in the list of owners of this location. This stock location cannot be edited."
 msgstr ""
 
 #: stock/templates/stock/location.html:37
@@ -5559,7 +5528,7 @@ msgid "Stock Details"
 msgstr ""
 
 #: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279
-#: templates/stats.html:76 users/models.py:39
+#: templates/stats.html:76 users/models.py:41
 msgid "Stock Locations"
 msgstr ""
 
@@ -5745,7 +5714,7 @@ msgstr ""
 msgid "Add Stock Items"
 msgstr ""
 
-#: stock/views.py:1001 users/models.py:180
+#: stock/views.py:1001 users/models.py:183
 msgid "Add"
 msgstr ""
 
@@ -5923,6 +5892,31 @@ msgstr ""
 msgid "No stock location set"
 msgstr ""
 
+#: templates/InvenTree/settings/appearance.html:10
+msgid "Theme Settings"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:17
+msgid "Color Themes"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:29
+#, python-format
+msgid ""
+"\n"
+"        The CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
+"        Please select another color theme :)\n"
+"    "
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:39
+msgid "Language"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:61
+msgid "Set Language"
+msgstr ""
+
 #: templates/InvenTree/settings/build.html:10
 msgid "Build Order Settings"
 msgstr ""
@@ -6006,7 +6000,7 @@ msgstr ""
 msgid "Stock Settings"
 msgstr ""
 
-#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49
+#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:50
 msgid "Stock Options"
 msgstr ""
 
@@ -6020,7 +6014,7 @@ msgid "Account"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:9
-msgid "Theme"
+msgid "Appearance"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:13
@@ -6039,24 +6033,6 @@ msgstr ""
 msgid "Categories"
 msgstr ""
 
-#: templates/InvenTree/settings/theme.html:10
-msgid "Theme Settings"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:17
-msgid "Color Themes"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:29
-#, python-format
-msgid ""
-"\n"
-"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected "
-"color theme was not found.<br>\n"
-"\t\tPlease select another color theme :)\n"
-"\t"
-msgstr ""
-
 #: templates/InvenTree/settings/user.html:16
 msgid "User Information"
 msgstr ""
@@ -6119,13 +6095,23 @@ msgid "View Code on GitHub"
 msgstr ""
 
 #: templates/about.html:63
-msgid "Get the App"
+msgid "Credits"
 msgstr ""
 
 #: templates/about.html:68
+msgid "Mobile App"
+msgstr ""
+
+#: templates/about.html:73
 msgid "Submit Bug Report"
 msgstr ""
 
+#: templates/about.html:82 templates/js/modals.js:550
+#: templates/js/modals.js:809 templates/modals.html:28 templates/modals.html:52
+#: templates/modals.html:93
+msgid "Close"
+msgstr ""
+
 #: templates/attachment_table.html:6
 msgid "Add Attachment"
 msgstr ""
@@ -6203,8 +6189,7 @@ msgid "Link Barcode to Stock Item"
 msgstr ""
 
 #: templates/js/barcode.js:311
-msgid ""
-"This will remove the association between this stock item and the barcode"
+msgid "This will remove the association between this stock item and the barcode"
 msgstr ""
 
 #: templates/js/barcode.js:317
@@ -6322,7 +6307,7 @@ msgid "Quantity Per"
 msgstr ""
 
 #: templates/js/build.js:638 templates/js/build.js:1056
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order stock"
 msgstr ""
 
@@ -6455,11 +6440,6 @@ msgstr ""
 msgid "Submit"
 msgstr ""
 
-#: templates/js/modals.js:550 templates/js/modals.js:809
-#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93
-msgid "Close"
-msgstr ""
-
 #: templates/js/modals.js:760
 msgid "Invalid response from server"
 msgstr ""
@@ -7033,6 +7013,10 @@ msgstr ""
 msgid "Form errors exist"
 msgstr ""
 
+#: templates/navbar.html:13
+msgid "Toggle navigation"
+msgstr ""
+
 #: templates/navbar.html:33
 msgid "Buy"
 msgstr ""
@@ -7045,7 +7029,7 @@ msgstr ""
 msgid "Scan Barcode"
 msgstr ""
 
-#: templates/navbar.html:77 users/models.py:36
+#: templates/navbar.html:77 users/models.py:38
 msgid "Admin"
 msgstr ""
 
@@ -7106,21 +7090,15 @@ msgid "Change password"
 msgstr ""
 
 #: templates/registration/password_reset_confirm.html:61
-msgid ""
-"The password reset link was invalid, possibly because it has already been "
-"used. Please request a new password reset."
+msgid "The password reset link was invalid, possibly because it has already been used. Please request a new password reset."
 msgstr ""
 
 #: templates/registration/password_reset_done.html:52
-msgid ""
-"We've emailed you instructions for setting your password, if an account "
-"exists with the email you entered. You should receive them shortly."
+msgid "We've emailed you instructions for setting your password, if an account exists with the email you entered. You should receive them shortly."
 msgstr ""
 
 #: templates/registration/password_reset_done.html:55
-msgid ""
-"If you don't receive an email, please make sure you've entered the address "
-"you registered with, and check your spam folder."
+msgid "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder."
 msgstr ""
 
 #: templates/registration/password_reset_form.html:53
@@ -7183,43 +7161,43 @@ msgstr ""
 msgid "Print test reports"
 msgstr ""
 
-#: templates/stock_table.html:54
+#: templates/stock_table.html:55
 msgid "Add to selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:55
+#: templates/stock_table.html:56
 msgid "Remove from selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:56
+#: templates/stock_table.html:57
 msgid "Stocktake selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move stock"
 msgstr ""
 
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order selected items"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change status"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change stock status"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete selected items"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete Stock"
 msgstr ""
 
@@ -7255,34 +7233,34 @@ msgstr ""
 msgid "Important dates"
 msgstr ""
 
-#: users/models.py:167
+#: users/models.py:170
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:175
+#: users/models.py:178
 msgid "Group"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "View"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:180
+#: users/models.py:183
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Change"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:184
+#: users/models.py:187
 msgid "Permission to delete items"
 msgstr ""
diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.mo b/InvenTree/locale/zh/LC_MESSAGES/django.mo
index 6c5906d1cd061dff54de8b533942893de34efc9e..d02b517fab4f5decbc17e3e4aaf12a440530d8f6 100644
GIT binary patch
delta 140
zcmcb}bed^`3ZvjeRgH-;S|LUTMuxfuCb~w33I>)|#>QMeiNz(lAw`LK#W{&3`9)R=
zK#{!k(!}&s-H_D8Tq_0VjLf{$;#7s;%-n*U%(TqZ6u1g2g{q8rXTOPGqg4ZPN{bS6
cblvica*M4L@(RG*Vp~IN1qjpDz?zEz04qf<2><{9

delta 163
zcmX@jbdhO-3ZwW$RSo_CM`v$GcUOfl*Pvief4_;oTJ@2xjzPM<{<<!X3LgGezMk4q
z{(i1pK8eL8x*<i0dBr)2CHX~G3T~l3J_>%0zOD*3uD*_*J`Rp9E<vur!FE8UdFiEz
z>8ZLQsfoE(3O<g0?x7$%Y<zqiax(Sui_#HltQ5F>J$+qu!%~ZiGxPJT6bvWc_GV-N
E0Bz$j1poj5

diff --git a/InvenTree/locale/zh/LC_MESSAGES/django.po b/InvenTree/locale/zh/LC_MESSAGES/django.po
index 2534d27c42..2075ec9326 100644
--- a/InvenTree/locale/zh/LC_MESSAGES/django.po
+++ b/InvenTree/locale/zh/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-04-21 09:17+0000\n"
+"POT-Creation-Date: 2021-05-05 17:33+1000\n"
 "PO-Revision-Date: 2021-04-21 09:33\n"
 "Last-Translator: \n"
 "Language-Team: Chinese Simplified\n"
@@ -67,35 +67,36 @@ msgstr ""
 msgid "Select Category"
 msgstr ""
 
-#: InvenTree/helpers.py:375 order/models.py:245 order/models.py:344
-#: stock/views.py:1763
-msgid "Invalid quantity provided"
-msgstr ""
-
-#: InvenTree/helpers.py:378
-msgid "Empty serial number string"
-msgstr ""
-
-#: InvenTree/helpers.py:399
+#: InvenTree/helpers.py:377
 #, python-brace-format
 msgid "Duplicate serial: {n}"
 msgstr ""
 
-#: InvenTree/helpers.py:403 InvenTree/helpers.py:406 InvenTree/helpers.py:409
+#: InvenTree/helpers.py:384 order/models.py:245 order/models.py:353
+#: stock/views.py:1763
+msgid "Invalid quantity provided"
+msgstr ""
+
+#: InvenTree/helpers.py:387
+msgid "Empty serial number string"
+msgstr ""
+
+#: InvenTree/helpers.py:409 InvenTree/helpers.py:412 InvenTree/helpers.py:415
+#: InvenTree/helpers.py:440
 #, python-brace-format
 msgid "Invalid group: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:414
+#: InvenTree/helpers.py:445
 #, python-brace-format
 msgid "Duplicate serial: {g}"
 msgstr ""
 
-#: InvenTree/helpers.py:422
+#: InvenTree/helpers.py:453
 msgid "No serial numbers found"
 msgstr ""
 
-#: InvenTree/helpers.py:426
+#: InvenTree/helpers.py:457
 #, python-brace-format
 msgid "Number of unique serial number ({s}) must match quantity ({q})"
 msgstr ""
@@ -140,7 +141,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_base.html:72
 #: company/templates/company/supplier_part_base.html:71
 #: company/templates/company/supplier_part_detail.html:31 label/models.py:108
-#: order/models.py:101 order/templates/order/purchase_order_detail.html:168
+#: order/models.py:101 order/templates/order/purchase_order_detail.html:143
 #: part/models.py:710 part/templates/part/detail.html:54
 #: part/templates/part/set_category.html:14 report/models.py:192
 #: report/models.py:505 report/models.py:544
@@ -165,23 +166,23 @@ msgstr ""
 msgid "parent"
 msgstr ""
 
-#: InvenTree/settings.py:493
+#: InvenTree/settings.py:491
 msgid "English"
 msgstr ""
 
-#: InvenTree/settings.py:494
+#: InvenTree/settings.py:492
 msgid "French"
 msgstr ""
 
-#: InvenTree/settings.py:495
+#: InvenTree/settings.py:493
 msgid "German"
 msgstr ""
 
-#: InvenTree/settings.py:496
+#: InvenTree/settings.py:494
 msgid "Polish"
 msgstr ""
 
-#: InvenTree/settings.py:497
+#: InvenTree/settings.py:495
 msgid "Turkish"
 msgstr ""
 
@@ -375,16 +376,16 @@ msgstr ""
 msgid "Target date for build completion. Build will be overdue after this date."
 msgstr ""
 
-#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1227
+#: build/forms.py:48 build/forms.py:90 build/forms.py:266 build/models.py:1241
 #: build/templates/build/allocation_card.html:23
 #: build/templates/build/auto_allocate.html:17
 #: build/templates/build/build_base.html:123
 #: build/templates/build/detail.html:31 common/models.py:703
 #: company/forms.py:176 company/templates/company/supplier_part_pricing.html:77
 #: order/forms.py:188 order/forms.py:205 order/forms.py:239 order/forms.py:261
-#: order/forms.py:278 order/models.py:593 order/models.py:784
+#: order/forms.py:278 order/models.py:603 order/models.py:794
 #: order/templates/order/order_wizard/select_parts.html:32
-#: order/templates/order/purchase_order_detail.html:200
+#: order/templates/order/purchase_order_detail.html:175
 #: order/templates/order/sales_order_detail.html:70
 #: order/templates/order/sales_order_detail.html:77
 #: order/templates/order/sales_order_detail.html:159
@@ -458,7 +459,7 @@ msgid "Location of completed parts"
 msgstr ""
 
 #: build/forms.py:215 build/templates/build/build_base.html:128
-#: build/templates/build/detail.html:59 order/models.py:445
+#: build/templates/build/detail.html:59 order/models.py:455
 #: order/templates/order/receive_parts.html:24
 #: stock/templates/stock/item_base.html:392 templates/InvenTree/search.html:252
 #: templates/js/barcode.js:119 templates/js/build.js:770
@@ -508,7 +509,7 @@ msgstr ""
 #: order/templates/order/so_navbar.html:22 part/templates/part/navbar.html:55
 #: part/templates/part/navbar.html:58 templates/InvenTree/index.html:183
 #: templates/InvenTree/search.html:185
-#: templates/InvenTree/settings/tabs.html:31 users/models.py:41
+#: templates/InvenTree/settings/tabs.html:31 users/models.py:43
 msgid "Build Orders"
 msgstr ""
 
@@ -516,8 +517,8 @@ msgstr ""
 msgid "Build Order Reference"
 msgstr ""
 
-#: build/models.py:127 order/models.py:99 order/models.py:595
-#: order/templates/order/purchase_order_detail.html:195
+#: build/models.py:127 order/models.py:99 order/models.py:605
+#: order/templates/order/purchase_order_detail.html:170
 #: order/templates/order/sales_order_detail.html:219 part/models.py:2187
 #: report/templates/report/inventree_po_report.html:92
 #: report/templates/report/inventree_so_report.html:92 templates/js/bom.js:197
@@ -540,10 +541,10 @@ msgstr ""
 
 #: build/models.py:152 build/templates/build/auto_allocate.html:16
 #: build/templates/build/build_base.html:118
-#: build/templates/build/detail.html:26 company/models.py:669
-#: order/models.py:637 order/models.py:669
+#: build/templates/build/detail.html:26 company/models.py:688
+#: order/models.py:647 order/models.py:679
 #: order/templates/order/order_wizard/select_parts.html:30
-#: order/templates/order/purchase_order_detail.html:156
+#: order/templates/order/purchase_order_detail.html:131
 #: order/templates/order/receive_parts.html:19
 #: order/templates/order/sales_order_detail.html:207 part/models.py:321
 #: part/models.py:1876 part/models.py:1888 part/models.py:1906
@@ -628,7 +629,7 @@ msgstr ""
 msgid "Creation Date"
 msgstr ""
 
-#: build/models.py:223 order/models.py:451
+#: build/models.py:223 order/models.py:461
 msgid "Target completion date"
 msgstr ""
 
@@ -678,9 +679,9 @@ msgstr ""
 #: company/models.py:135 company/models.py:501
 #: company/templates/company/navbar.html:70
 #: company/templates/company/navbar.html:73 order/models.py:123
-#: order/models.py:597 order/templates/order/po_navbar.html:29
+#: order/models.py:607 order/templates/order/po_navbar.html:29
 #: order/templates/order/po_navbar.html:32
-#: order/templates/order/purchase_order_detail.html:234
+#: order/templates/order/purchase_order_detail.html:209
 #: order/templates/order/sales_order_detail.html:264
 #: order/templates/order/so_navbar.html:33
 #: order/templates/order/so_navbar.html:36 part/models.py:871
@@ -713,47 +714,47 @@ msgstr ""
 msgid "Completed build output"
 msgstr ""
 
-#: build/models.py:1118
+#: build/models.py:1132
 msgid "BuildItem must be unique for build, stock_item and install_into"
 msgstr ""
 
-#: build/models.py:1143
+#: build/models.py:1157
 msgid "Build item must specify a build output, as master part is marked as trackable"
 msgstr ""
 
-#: build/models.py:1147
+#: build/models.py:1161
 #, python-brace-format
 msgid "Selected stock item not found in BOM for part '{p}'"
 msgstr ""
 
-#: build/models.py:1151
+#: build/models.py:1165
 #, python-brace-format
 msgid "Allocated quantity ({n}) must not exceed available quantity ({q})"
 msgstr ""
 
-#: build/models.py:1158 order/models.py:758
+#: build/models.py:1172 order/models.py:768
 msgid "StockItem is over-allocated"
 msgstr ""
 
-#: build/models.py:1162 order/models.py:761
+#: build/models.py:1176 order/models.py:771
 msgid "Allocation quantity must be greater than zero"
 msgstr ""
 
-#: build/models.py:1166
+#: build/models.py:1180
 msgid "Quantity must be 1 for serialized stock"
 msgstr ""
 
-#: build/models.py:1206 stock/templates/stock/item_base.html:306
+#: build/models.py:1220 stock/templates/stock/item_base.html:306
 #: templates/InvenTree/search.html:183 templates/js/build.js:714
 #: templates/navbar.html:29
 msgid "Build"
 msgstr ""
 
-#: build/models.py:1207
+#: build/models.py:1221
 msgid "Build to allocate parts"
 msgstr ""
 
-#: build/models.py:1214 part/templates/part/allocation.html:18
+#: build/models.py:1228 part/templates/part/allocation.html:18
 #: part/templates/part/allocation.html:24
 #: part/templates/part/allocation.html:31
 #: part/templates/part/allocation.html:49
@@ -765,19 +766,19 @@ msgstr ""
 msgid "Stock Item"
 msgstr ""
 
-#: build/models.py:1215
+#: build/models.py:1229
 msgid "Source stock item"
 msgstr ""
 
-#: build/models.py:1228
+#: build/models.py:1242
 msgid "Stock quantity to allocate to build"
 msgstr ""
 
-#: build/models.py:1236
+#: build/models.py:1250
 msgid "Install into"
 msgstr ""
 
-#: build/models.py:1237
+#: build/models.py:1251
 msgid "Destination stock item"
 msgstr ""
 
@@ -801,7 +802,7 @@ msgstr ""
 msgid "Unallocate stock"
 msgstr ""
 
-#: build/templates/build/allocate.html:26 build/views.py:308 build/views.py:794
+#: build/templates/build/allocate.html:26 build/views.py:319 build/views.py:805
 msgid "Unallocate Stock"
 msgstr ""
 
@@ -811,7 +812,7 @@ msgstr ""
 
 #: build/templates/build/allocate.html:30
 #: company/templates/company/detail_manufacturer_part.html:33
-#: company/templates/company/detail_supplier_part.html:32 order/views.py:794
+#: company/templates/company/detail_supplier_part.html:32 order/views.py:795
 #: part/templates/part/category.html:127
 msgid "Order Parts"
 msgstr ""
@@ -954,7 +955,7 @@ msgid "Progress"
 msgstr ""
 
 #: build/templates/build/build_base.html:160
-#: build/templates/build/detail.html:84 order/models.py:667
+#: build/templates/build/detail.html:84 order/models.py:677
 #: order/templates/order/sales_order_base.html:9
 #: order/templates/order/sales_order_base.html:33
 #: order/templates/order/sales_order_ship.html:25
@@ -1139,7 +1140,7 @@ msgstr ""
 msgid "Alter the quantity of stock allocated to the build output"
 msgstr ""
 
-#: build/templates/build/index.html:28 build/views.py:667
+#: build/templates/build/index.html:28 build/views.py:678
 msgid "New Build Order"
 msgstr ""
 
@@ -1226,141 +1227,145 @@ msgstr ""
 msgid "Create Build Output"
 msgstr ""
 
-#: build/views.py:173 stock/models.py:969 stock/views.py:1789
+#: build/views.py:168
+msgid "Maximum output quantity is "
+msgstr ""
+
+#: build/views.py:184 stock/models.py:969 stock/views.py:1789
 msgid "Serial numbers already exist"
 msgstr ""
 
-#: build/views.py:182
+#: build/views.py:193
 msgid "Serial numbers required for trackable build output"
 msgstr ""
 
-#: build/views.py:248
+#: build/views.py:259
 msgid "Delete Build Output"
 msgstr ""
 
-#: build/views.py:269 build/views.py:359
+#: build/views.py:280 build/views.py:370
 msgid "Confirm unallocation of build stock"
 msgstr ""
 
-#: build/views.py:270 build/views.py:360 stock/views.py:425
+#: build/views.py:281 build/views.py:371 stock/views.py:425
 msgid "Check the confirmation box"
 msgstr ""
 
-#: build/views.py:282
+#: build/views.py:293
 msgid "Build output does not match build"
 msgstr ""
 
-#: build/views.py:284 build/views.py:485
+#: build/views.py:295 build/views.py:496
 msgid "Build output must be specified"
 msgstr ""
 
-#: build/views.py:296
+#: build/views.py:307
 msgid "Build output deleted"
 msgstr ""
 
-#: build/views.py:394
+#: build/views.py:405
 msgid "Complete Build Order"
 msgstr ""
 
-#: build/views.py:400
+#: build/views.py:411
 msgid "Build order cannot be completed - incomplete outputs remain"
 msgstr ""
 
-#: build/views.py:411
+#: build/views.py:422
 msgid "Completed build order"
 msgstr ""
 
-#: build/views.py:427
+#: build/views.py:438
 msgid "Complete Build Output"
 msgstr ""
 
-#: build/views.py:469
+#: build/views.py:480
 msgid "Invalid stock status value selected"
 msgstr ""
 
-#: build/views.py:476
+#: build/views.py:487
 msgid "Quantity to complete cannot exceed build output quantity"
 msgstr ""
 
-#: build/views.py:482
+#: build/views.py:493
 msgid "Confirm completion of incomplete build"
 msgstr ""
 
-#: build/views.py:581
+#: build/views.py:592
 msgid "Build output completed"
 msgstr ""
 
-#: build/views.py:721
+#: build/views.py:732
 msgid "Created new build"
 msgstr ""
 
-#: build/views.py:742
+#: build/views.py:753
 msgid "Edit Build Order Details"
 msgstr ""
 
-#: build/views.py:775
+#: build/views.py:786
 msgid "Edited build"
 msgstr ""
 
-#: build/views.py:784
+#: build/views.py:795
 msgid "Delete Build Order"
 msgstr ""
 
-#: build/views.py:799
+#: build/views.py:810
 msgid "Removed parts from build allocation"
 msgstr ""
 
-#: build/views.py:811
+#: build/views.py:822
 msgid "Allocate stock to build output"
 msgstr ""
 
-#: build/views.py:854
+#: build/views.py:865
 msgid "Item must be currently in stock"
 msgstr ""
 
-#: build/views.py:860
+#: build/views.py:871
 msgid "Stock item is over-allocated"
 msgstr ""
 
-#: build/views.py:861 templates/js/bom.js:230 templates/js/build.js:575
+#: build/views.py:872 templates/js/bom.js:230 templates/js/build.js:575
 #: templates/js/build.js:838 templates/js/build.js:1021
 msgid "Available"
 msgstr ""
 
-#: build/views.py:863
+#: build/views.py:874
 msgid "Stock item must be selected"
 msgstr ""
 
-#: build/views.py:1026
+#: build/views.py:1037
 msgid "Edit Stock Allocation"
 msgstr ""
 
-#: build/views.py:1030
+#: build/views.py:1041
 msgid "Updated Build Item"
 msgstr ""
 
-#: build/views.py:1059
+#: build/views.py:1070
 msgid "Add Build Order Attachment"
 msgstr ""
 
-#: build/views.py:1072 order/views.py:110 order/views.py:162 part/views.py:172
+#: build/views.py:1083 order/views.py:110 order/views.py:162 part/views.py:172
 #: stock/views.py:277
 msgid "Added attachment"
 msgstr ""
 
-#: build/views.py:1108 order/views.py:189 order/views.py:210
+#: build/views.py:1119 order/views.py:189 order/views.py:210
 msgid "Edit Attachment"
 msgstr ""
 
-#: build/views.py:1118 order/views.py:193 order/views.py:214
+#: build/views.py:1129 order/views.py:193 order/views.py:214
 msgid "Attachment updated"
 msgstr ""
 
-#: build/views.py:1128 order/views.py:229 order/views.py:243
+#: build/views.py:1139 order/views.py:229 order/views.py:243
 msgid "Delete Attachment"
 msgstr ""
 
-#: build/views.py:1133 order/views.py:235 order/views.py:249 stock/views.py:333
+#: build/views.py:1144 order/views.py:235 order/views.py:249 stock/views.py:333
 msgid "Deleted attachment"
 msgstr ""
 
@@ -1766,7 +1771,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_detail.html:26
 #: company/templates/company/supplier_part_base.html:101
 #: company/templates/company/supplier_part_detail.html:35
-#: order/templates/order/purchase_order_detail.html:183 part/bom.py:171
+#: order/templates/order/purchase_order_detail.html:158 part/bom.py:171
 #: part/bom.py:242 templates/js/company.js:181 templates/js/company.js:307
 msgid "MPN"
 msgstr ""
@@ -1865,7 +1870,7 @@ msgstr ""
 msgid "Base Part"
 msgstr ""
 
-#: company/models.py:312 company/models.py:463 order/views.py:1372
+#: company/models.py:312 company/models.py:463 order/views.py:1384
 msgid "Select part"
 msgstr ""
 
@@ -1905,7 +1910,7 @@ msgstr ""
 
 #: company/models.py:475 company/templates/company/supplier_part_base.html:88
 #: company/templates/company/supplier_part_detail.html:26
-#: order/templates/order/purchase_order_detail.html:174 part/bom.py:176
+#: order/templates/order/purchase_order_detail.html:149 part/bom.py:176
 #: part/bom.py:287
 msgid "SKU"
 msgstr ""
@@ -2017,7 +2022,8 @@ msgstr ""
 
 #: company/templates/company/delete.html:12
 #, python-format
-msgid "There are %(count)s parts sourced from this company.<br>\n"
+msgid ""
+"There are %(count)s parts sourced from this company.<br>\n"
 "If this supplier is deleted, these supplier part entries will also be deleted."
 msgstr ""
 
@@ -2033,7 +2039,7 @@ msgstr ""
 msgid "Uses default currency"
 msgstr ""
 
-#: company/templates/company/detail.html:67 order/models.py:440
+#: company/templates/company/detail.html:67 order/models.py:450
 #: order/templates/order/sales_order_base.html:92 stock/models.py:415
 #: stock/models.py:416 stock/templates/stock/item_base.html:251
 #: templates/js/company.js:40 templates/js/order.js:267
@@ -2122,13 +2128,13 @@ msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:21
 #: order/templates/order/order_wizard/select_parts.html:42
-#: order/templates/order/purchase_order_detail.html:75
+#: order/templates/order/purchase_order_detail.html:50
 msgid "Create new supplier part"
 msgstr ""
 
 #: company/templates/company/detail_supplier_part.html:22
 #: company/templates/company/manufacturer_part_suppliers.html:17
-#: order/templates/order/purchase_order_detail.html:74
+#: order/templates/order/purchase_order_detail.html:49
 #: part/templates/part/supplier.html:17 templates/js/stock.js:1163
 msgid "New Supplier Part"
 msgstr ""
@@ -2226,7 +2232,7 @@ msgstr ""
 #: company/templates/company/manufacturer_part_suppliers.html:22
 #: part/templates/part/manufacturer.html:24 part/templates/part/params.html:44
 #: part/templates/part/related.html:44 part/templates/part/supplier.html:22
-#: stock/views.py:1002 users/models.py:184
+#: stock/views.py:1002 users/models.py:187
 msgid "Delete"
 msgstr ""
 
@@ -2252,7 +2258,7 @@ msgstr ""
 #: stock/templates/stock/location_navbar.html:22
 #: stock/templates/stock/location_navbar.html:29
 #: templates/InvenTree/search.html:198 templates/js/stock.js:968
-#: templates/stats.html:72 templates/stats.html:81 users/models.py:40
+#: templates/stats.html:72 templates/stats.html:81 users/models.py:42
 msgid "Stock Items"
 msgstr ""
 
@@ -2266,7 +2272,7 @@ msgstr ""
 #: part/templates/part/sales_orders.html:10 templates/InvenTree/index.html:228
 #: templates/InvenTree/search.html:345
 #: templates/InvenTree/settings/tabs.html:37 templates/navbar.html:46
-#: users/models.py:43
+#: users/models.py:45
 msgid "Sales Orders"
 msgstr ""
 
@@ -2278,7 +2284,7 @@ msgstr ""
 #: part/templates/part/orders.html:10 templates/InvenTree/index.html:205
 #: templates/InvenTree/search.html:325
 #: templates/InvenTree/settings/tabs.html:34 templates/navbar.html:37
-#: users/models.py:42
+#: users/models.py:44
 msgid "Purchase Orders"
 msgstr ""
 
@@ -2357,7 +2363,7 @@ msgid "Pricing Information"
 msgstr ""
 
 #: company/templates/company/supplier_part_pricing.html:19 company/views.py:794
-#: part/templates/part/sale_prices.html:17 part/views.py:2624
+#: part/templates/part/sale_prices.html:17 part/views.py:2636
 msgid "Add Price Break"
 msgstr ""
 
@@ -2467,15 +2473,15 @@ msgstr ""
 msgid "Delete Supplier Part"
 msgstr ""
 
-#: company/views.py:799 part/views.py:2628
+#: company/views.py:799 part/views.py:2640
 msgid "Added new price break"
 msgstr ""
 
-#: company/views.py:855 part/views.py:2672
+#: company/views.py:855 part/views.py:2684
 msgid "Edit Price Break"
 msgstr ""
 
-#: company/views.py:870 part/views.py:2686
+#: company/views.py:870 part/views.py:2698
 msgid "Delete Price Break"
 msgstr ""
 
@@ -2565,7 +2571,7 @@ msgstr ""
 msgid "Enter sales order number"
 msgstr ""
 
-#: order/forms.py:145 order/models.py:452
+#: order/forms.py:145 order/models.py:462
 msgid "Target date for order completion. Order will be overdue after this date."
 msgstr ""
 
@@ -2601,7 +2607,7 @@ msgstr ""
 msgid "Order notes"
 msgstr ""
 
-#: order/models.py:182 order/models.py:445
+#: order/models.py:182 order/models.py:455
 msgid "Purchase order status"
 msgstr ""
 
@@ -2642,8 +2648,8 @@ msgstr ""
 msgid "Date order was completed"
 msgstr ""
 
-#: order/models.py:243 order/models.py:342 part/views.py:1586
-#: stock/models.py:270 stock/models.py:953
+#: order/models.py:243 part/views.py:1586 stock/models.py:270
+#: stock/models.py:953
 msgid "Quantity must be greater than zero"
 msgstr ""
 
@@ -2651,120 +2657,128 @@ msgstr ""
 msgid "Part supplier must match PO supplier"
 msgstr ""
 
-#: order/models.py:337
+#: order/models.py:344
 msgid "Lines can only be received against an order marked as 'Placed'"
 msgstr ""
 
-#: order/models.py:359
+#: order/models.py:348
+msgid "Quantity must be an integer"
+msgstr ""
+
+#: order/models.py:350
+msgid "Quantity must be a positive number"
+msgstr ""
+
+#: order/models.py:369
 msgid "Received items"
 msgstr ""
 
-#: order/models.py:441
+#: order/models.py:451
 msgid "Company to which the items are being sold"
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer Reference "
 msgstr ""
 
-#: order/models.py:447
+#: order/models.py:457
 msgid "Customer order reference code"
 msgstr ""
 
-#: order/models.py:455 templates/js/order.js:303
+#: order/models.py:465 templates/js/order.js:303
 msgid "Shipment Date"
 msgstr ""
 
-#: order/models.py:462
+#: order/models.py:472
 msgid "shipped by"
 msgstr ""
 
-#: order/models.py:506
+#: order/models.py:516
 msgid "SalesOrder cannot be shipped as it is not currently pending"
 msgstr ""
 
-#: order/models.py:593
+#: order/models.py:603
 msgid "Item quantity"
 msgstr ""
 
-#: order/models.py:595
+#: order/models.py:605
 msgid "Line item reference"
 msgstr ""
 
-#: order/models.py:597
+#: order/models.py:607
 msgid "Line item notes"
 msgstr ""
 
-#: order/models.py:623 order/models.py:667
+#: order/models.py:633 order/models.py:677
 #: part/templates/part/allocation.html:17
 #: part/templates/part/allocation.html:45
 msgid "Order"
 msgstr ""
 
-#: order/models.py:624 order/templates/order/order_base.html:9
+#: order/models.py:634 order/templates/order/order_base.html:9
 #: order/templates/order/order_base.html:24
 #: report/templates/report/inventree_po_report.html:77
 #: stock/templates/stock/item_base.html:313 templates/js/order.js:148
 msgid "Purchase Order"
 msgstr ""
 
-#: order/models.py:638
+#: order/models.py:648
 msgid "Supplier part"
 msgstr ""
 
-#: order/models.py:641 order/templates/order/order_base.html:131
-#: order/templates/order/purchase_order_detail.html:214
+#: order/models.py:651 order/templates/order/order_base.html:131
+#: order/templates/order/purchase_order_detail.html:189
 #: order/templates/order/receive_parts.html:22
 #: order/templates/order/sales_order_base.html:131
 msgid "Received"
 msgstr ""
 
-#: order/models.py:641
+#: order/models.py:651
 msgid "Number of items received"
 msgstr ""
 
-#: order/models.py:648 stock/models.py:508
+#: order/models.py:658 stock/models.py:508
 #: stock/templates/stock/item_base.html:320
 msgid "Purchase Price"
 msgstr ""
 
-#: order/models.py:649
+#: order/models.py:659
 msgid "Unit purchase price"
 msgstr ""
 
-#: order/models.py:743 order/models.py:745
+#: order/models.py:753 order/models.py:755
 msgid "Stock item has not been assigned"
 msgstr ""
 
-#: order/models.py:749
+#: order/models.py:759
 msgid "Cannot allocate stock item to a line with a different part"
 msgstr ""
 
-#: order/models.py:751
+#: order/models.py:761
 msgid "Cannot allocate stock to a line without a part"
 msgstr ""
 
-#: order/models.py:754
+#: order/models.py:764
 msgid "Allocation quantity cannot exceed stock quantity"
 msgstr ""
 
-#: order/models.py:764
+#: order/models.py:774
 msgid "Quantity must be 1 for serialized stock item"
 msgstr ""
 
-#: order/models.py:769
+#: order/models.py:779
 msgid "Line"
 msgstr ""
 
-#: order/models.py:780
+#: order/models.py:790
 msgid "Item"
 msgstr ""
 
-#: order/models.py:781
+#: order/models.py:791
 msgid "Select stock item to allocate"
 msgstr ""
 
-#: order/models.py:784
+#: order/models.py:794
 msgid "Enter stock allocation quantity"
 msgstr ""
 
@@ -2812,9 +2826,22 @@ msgstr ""
 msgid "Issued"
 msgstr ""
 
-#: order/templates/order/order_cancel.html:7
-#: order/templates/order/sales_order_cancel.html:9
-msgid "Cancelling this order means that the order will no longer be editable."
+#: order/templates/order/order_base.html:180
+#: order/templates/order/purchase_order_detail.html:100
+#: part/templates/part/category.html:185 part/templates/part/category.html:227
+#: stock/templates/stock/location.html:191 templates/js/stock.js:708
+#: templates/js/stock.js:1169
+msgid "New Location"
+msgstr ""
+
+#: order/templates/order/order_base.html:181
+#: order/templates/order/purchase_order_detail.html:101
+#: stock/templates/stock/location.html:42
+msgid "Create new stock location"
+msgstr ""
+
+#: order/templates/order/order_cancel.html:8
+msgid "Cancelling this order means that the order and line items will no longer be editable."
 msgstr ""
 
 #: order/templates/order/order_complete.html:7
@@ -2826,10 +2853,10 @@ msgid "This order has line items which have not been marked as received."
 msgstr ""
 
 #: order/templates/order/order_complete.html:11
-msgid "Marking this order as complete will remove these line items."
+msgid "Completing this order means that the order and line items will no longer be editable."
 msgstr ""
 
-#: order/templates/order/order_issue.html:7
+#: order/templates/order/order_issue.html:8
 msgid "After placing this purchase order, line items will no longer be editable."
 msgstr ""
 
@@ -2881,11 +2908,13 @@ msgid "Select Purchase Order"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:45
-msgid "Create new purchase order for {{ supplier.name }}"
+#, python-format
+msgid "Create new purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/order_wizard/select_pos.html:68
-msgid "Select a purchase order for"
+#, python-format
+msgid "Select a purchase order for %(name)s"
 msgstr ""
 
 #: order/templates/order/po_attachments.html:12
@@ -2907,43 +2936,29 @@ msgid "Purchase Order Items"
 msgstr ""
 
 #: order/templates/order/purchase_order_detail.html:24
-#: order/templates/order/sales_order_detail.html:22 order/views.py:1108
-#: order/views.py:1191
+#: order/templates/order/sales_order_detail.html:22 order/views.py:1120
+#: order/views.py:1203
 msgid "Add Line Item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:45
-#: order/templates/order/purchase_order_detail.html:125
-#: part/templates/part/category.html:185 part/templates/part/category.html:227
-#: stock/templates/stock/location.html:191 templates/js/stock.js:708
-#: templates/js/stock.js:1169
-msgid "New Location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:46
-#: order/templates/order/purchase_order_detail.html:126
-#: stock/templates/stock/location.html:42
-msgid "Create new stock location"
-msgstr ""
-
-#: order/templates/order/purchase_order_detail.html:139
+#: order/templates/order/purchase_order_detail.html:114
 msgid "No line items found"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:205
+#: order/templates/order/purchase_order_detail.html:180
 msgid "Unit Price"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:246
+#: order/templates/order/purchase_order_detail.html:221
 #: order/templates/order/sales_order_detail.html:294
 msgid "Edit line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:247
+#: order/templates/order/purchase_order_detail.html:222
 msgid "Delete line item"
 msgstr ""
 
-#: order/templates/order/purchase_order_detail.html:252
+#: order/templates/order/purchase_order_detail.html:227
 msgid "Receive line item"
 msgstr ""
 
@@ -2966,7 +2981,7 @@ msgstr ""
 #: templates/InvenTree/index.html:97 templates/InvenTree/search.html:114
 #: templates/InvenTree/settings/tabs.html:25 templates/js/part.js:577
 #: templates/navbar.html:23 templates/stats.html:59 templates/stats.html:68
-#: users/models.py:38
+#: users/models.py:40
 msgid "Parts"
 msgstr ""
 
@@ -3019,6 +3034,10 @@ msgstr ""
 msgid "Warning"
 msgstr ""
 
+#: order/templates/order/sales_order_cancel.html:9
+msgid "Cancelling this order means that the order will no longer be editable."
+msgstr ""
+
 #: order/templates/order/sales_order_detail.html:13
 msgid "Sales Order Items"
 msgstr ""
@@ -3213,65 +3232,65 @@ msgstr ""
 msgid "No lines specified"
 msgstr ""
 
-#: order/views.py:1060
+#: order/views.py:1069
 #, python-brace-format
 msgid "Ordered {n} parts"
 msgstr ""
 
-#: order/views.py:1117
+#: order/views.py:1129
 msgid "Supplier part must be specified"
 msgstr ""
 
-#: order/views.py:1123
+#: order/views.py:1135
 msgid "Supplier must match for Part and Order"
 msgstr ""
 
-#: order/views.py:1242 order/views.py:1260
+#: order/views.py:1254 order/views.py:1272
 msgid "Edit Line Item"
 msgstr ""
 
-#: order/views.py:1276 order/views.py:1288
+#: order/views.py:1288 order/views.py:1300
 msgid "Delete Line Item"
 msgstr ""
 
-#: order/views.py:1281 order/views.py:1293
+#: order/views.py:1293 order/views.py:1305
 msgid "Deleted line item"
 msgstr ""
 
-#: order/views.py:1306
+#: order/views.py:1318
 msgid "Allocate Serial Numbers"
 msgstr ""
 
-#: order/views.py:1351
+#: order/views.py:1363
 #, python-brace-format
 msgid "Allocated {n} items"
 msgstr ""
 
-#: order/views.py:1367
+#: order/views.py:1379
 msgid "Select line item"
 msgstr ""
 
-#: order/views.py:1398
+#: order/views.py:1410
 msgid "No matching item for serial"
 msgstr ""
 
-#: order/views.py:1408
+#: order/views.py:1420
 msgid "is not in stock"
 msgstr ""
 
-#: order/views.py:1416
+#: order/views.py:1428
 msgid "already allocated to an order"
 msgstr ""
 
-#: order/views.py:1470
+#: order/views.py:1482
 msgid "Allocate Stock to Order"
 msgstr ""
 
-#: order/views.py:1544
+#: order/views.py:1556
 msgid "Edit Allocation Quantity"
 msgstr ""
 
-#: order/views.py:1559
+#: order/views.py:1571
 msgid "Remove allocation"
 msgstr ""
 
@@ -3457,7 +3476,7 @@ msgstr ""
 #: part/models.py:83 part/templates/part/category.html:23
 #: part/templates/part/category.html:94 part/templates/part/category.html:141
 #: templates/InvenTree/search.html:127 templates/stats.html:63
-#: users/models.py:37
+#: users/models.py:39
 msgid "Part Categories"
 msgstr ""
 
@@ -4004,7 +4023,7 @@ msgstr ""
 msgid "All parts"
 msgstr ""
 
-#: part/templates/part/category.html:29 part/views.py:2270
+#: part/templates/part/category.html:29 part/views.py:2282
 msgid "Create new part category"
 msgstr ""
 
@@ -4694,63 +4713,63 @@ msgstr ""
 msgid "Part Pricing"
 msgstr ""
 
-#: part/views.py:2069
+#: part/views.py:2081
 msgid "Create Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2079
+#: part/views.py:2091
 msgid "Edit Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2086
+#: part/views.py:2098
 msgid "Delete Part Parameter Template"
 msgstr ""
 
-#: part/views.py:2094
+#: part/views.py:2106
 msgid "Create Part Parameter"
 msgstr ""
 
-#: part/views.py:2144
+#: part/views.py:2156
 msgid "Edit Part Parameter"
 msgstr ""
 
-#: part/views.py:2158
+#: part/views.py:2170
 msgid "Delete Part Parameter"
 msgstr ""
 
-#: part/views.py:2218
+#: part/views.py:2230
 msgid "Edit Part Category"
 msgstr ""
 
-#: part/views.py:2256
+#: part/views.py:2268
 msgid "Delete Part Category"
 msgstr ""
 
-#: part/views.py:2262
+#: part/views.py:2274
 msgid "Part category was deleted"
 msgstr ""
 
-#: part/views.py:2314
+#: part/views.py:2326
 msgid "Create Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2415
+#: part/views.py:2427
 msgid "Edit Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2471
+#: part/views.py:2483
 msgid "Delete Category Parameter Template"
 msgstr ""
 
-#: part/views.py:2490
+#: part/views.py:2502
 msgid "Create BOM Item"
 msgstr ""
 
-#: part/views.py:2560
+#: part/views.py:2572
 msgid "Edit BOM item"
 msgstr ""
 
-#: part/views.py:2616
+#: part/views.py:2628
 msgid "Confim BOM item deletion"
 msgstr ""
 
@@ -5301,15 +5320,15 @@ msgid "Stock adjustment actions"
 msgstr ""
 
 #: stock/templates/stock/item_base.html:164
-#: stock/templates/stock/location.html:65 templates/stock_table.html:56
+#: stock/templates/stock/location.html:65 templates/stock_table.html:57
 msgid "Count stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:167 templates/stock_table.html:54
+#: stock/templates/stock/item_base.html:167 templates/stock_table.html:55
 msgid "Add stock"
 msgstr ""
 
-#: stock/templates/stock/item_base.html:170 templates/stock_table.html:55
+#: stock/templates/stock/item_base.html:170 templates/stock_table.html:56
 msgid "Remove stock"
 msgstr ""
 
@@ -5503,7 +5522,7 @@ msgid "Stock Details"
 msgstr ""
 
 #: stock/templates/stock/location.html:117 templates/InvenTree/search.html:279
-#: templates/stats.html:76 users/models.py:39
+#: templates/stats.html:76 users/models.py:41
 msgid "Stock Locations"
 msgstr ""
 
@@ -5689,7 +5708,7 @@ msgstr ""
 msgid "Add Stock Items"
 msgstr ""
 
-#: stock/views.py:1001 users/models.py:180
+#: stock/views.py:1001 users/models.py:183
 msgid "Add"
 msgstr ""
 
@@ -5867,6 +5886,31 @@ msgstr ""
 msgid "No stock location set"
 msgstr ""
 
+#: templates/InvenTree/settings/appearance.html:10
+msgid "Theme Settings"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:17
+msgid "Color Themes"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:29
+#, python-format
+msgid ""
+"\n"
+"        The CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
+"        Please select another color theme :)\n"
+"    "
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:39
+msgid "Language"
+msgstr ""
+
+#: templates/InvenTree/settings/appearance.html:61
+msgid "Set Language"
+msgstr ""
+
 #: templates/InvenTree/settings/build.html:10
 msgid "Build Order Settings"
 msgstr ""
@@ -5950,7 +5994,7 @@ msgstr ""
 msgid "Stock Settings"
 msgstr ""
 
-#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:49
+#: templates/InvenTree/settings/stock.html:13 templates/stock_table.html:50
 msgid "Stock Options"
 msgstr ""
 
@@ -5964,7 +6008,7 @@ msgid "Account"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:9
-msgid "Theme"
+msgid "Appearance"
 msgstr ""
 
 #: templates/InvenTree/settings/tabs.html:13
@@ -5983,22 +6027,6 @@ msgstr ""
 msgid "Categories"
 msgstr ""
 
-#: templates/InvenTree/settings/theme.html:10
-msgid "Theme Settings"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:17
-msgid "Color Themes"
-msgstr ""
-
-#: templates/InvenTree/settings/theme.html:29
-#, python-format
-msgid "\n"
-"\t\tThe CSS sheet \"%(invalid_color_theme)s.css\" for the currently selected color theme was not found.<br>\n"
-"\t\tPlease select another color theme :)\n"
-"\t"
-msgstr ""
-
 #: templates/InvenTree/settings/user.html:16
 msgid "User Information"
 msgstr ""
@@ -6061,13 +6089,23 @@ msgid "View Code on GitHub"
 msgstr ""
 
 #: templates/about.html:63
-msgid "Get the App"
+msgid "Credits"
 msgstr ""
 
 #: templates/about.html:68
+msgid "Mobile App"
+msgstr ""
+
+#: templates/about.html:73
 msgid "Submit Bug Report"
 msgstr ""
 
+#: templates/about.html:82 templates/js/modals.js:550
+#: templates/js/modals.js:809 templates/modals.html:28 templates/modals.html:52
+#: templates/modals.html:93
+msgid "Close"
+msgstr ""
+
 #: templates/attachment_table.html:6
 msgid "Add Attachment"
 msgstr ""
@@ -6263,7 +6301,7 @@ msgid "Quantity Per"
 msgstr ""
 
 #: templates/js/build.js:638 templates/js/build.js:1056
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order stock"
 msgstr ""
 
@@ -6396,11 +6434,6 @@ msgstr ""
 msgid "Submit"
 msgstr ""
 
-#: templates/js/modals.js:550 templates/js/modals.js:809
-#: templates/modals.html:28 templates/modals.html:52 templates/modals.html:93
-msgid "Close"
-msgstr ""
-
 #: templates/js/modals.js:760
 msgid "Invalid response from server"
 msgstr ""
@@ -6974,6 +7007,10 @@ msgstr ""
 msgid "Form errors exist"
 msgstr ""
 
+#: templates/navbar.html:13
+msgid "Toggle navigation"
+msgstr ""
+
 #: templates/navbar.html:33
 msgid "Buy"
 msgstr ""
@@ -6986,7 +7023,7 @@ msgstr ""
 msgid "Scan Barcode"
 msgstr ""
 
-#: templates/navbar.html:77 users/models.py:36
+#: templates/navbar.html:77 users/models.py:38
 msgid "Admin"
 msgstr ""
 
@@ -7118,43 +7155,43 @@ msgstr ""
 msgid "Print test reports"
 msgstr ""
 
-#: templates/stock_table.html:54
+#: templates/stock_table.html:55
 msgid "Add to selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:55
+#: templates/stock_table.html:56
 msgid "Remove from selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:56
+#: templates/stock_table.html:57
 msgid "Stocktake selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move selected stock items"
 msgstr ""
 
-#: templates/stock_table.html:57
+#: templates/stock_table.html:58
 msgid "Move stock"
 msgstr ""
 
-#: templates/stock_table.html:58
+#: templates/stock_table.html:59
 msgid "Order selected items"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change status"
 msgstr ""
 
-#: templates/stock_table.html:59
+#: templates/stock_table.html:60
 msgid "Change stock status"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete selected items"
 msgstr ""
 
-#: templates/stock_table.html:62
+#: templates/stock_table.html:63
 msgid "Delete Stock"
 msgstr ""
 
@@ -7190,35 +7227,34 @@ msgstr ""
 msgid "Important dates"
 msgstr ""
 
-#: users/models.py:167
+#: users/models.py:170
 msgid "Permission set"
 msgstr ""
 
-#: users/models.py:175
+#: users/models.py:178
 msgid "Group"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "View"
 msgstr ""
 
-#: users/models.py:178
+#: users/models.py:181
 msgid "Permission to view items"
 msgstr ""
 
-#: users/models.py:180
+#: users/models.py:183
 msgid "Permission to add items"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Change"
 msgstr ""
 
-#: users/models.py:182
+#: users/models.py:185
 msgid "Permissions to edit items"
 msgstr ""
 
-#: users/models.py:184
+#: users/models.py:187
 msgid "Permission to delete items"
 msgstr ""
-
diff --git a/tasks.py b/tasks.py
index 6eed4c488e..37cbc71eab 100644
--- a/tasks.py
+++ b/tasks.py
@@ -185,7 +185,7 @@ def translate(c):
     """
 
     # Translate applicable .py / .html / .js files
-    manage(c, "makemessages --all -e py,html,js")
+    manage(c, "makemessages --all -e py,html,js --no-wrap")
     manage(c, "compilemessages")
 
     path = os.path.join('InvenTree', 'script', 'translation_stats.py')