Browse Source

Merge branch 'develop' into bin2107

bin2107 5 years ago
parent
commit
d9a6ba05b6

+ 24 - 0
src/main/java/com/style24/admin/biz/dao/TsaReviewDao.java

@@ -58,4 +58,28 @@ public interface TsaReviewDao {
 	 */
 	void deleteReviewAttach(ReviewAttach reviewAttach);
 
+	/**
+	 * 베스트상품평포인트 생성
+	 * @param review - 상품평 정보
+	 * @author gagamel
+	 * @since 2021. 4. 27
+	 */
+	void createBestReviewPoint(Review review);
+
+	/**
+	 * 베스트상품평포인트이력 생성
+	 * @param review - 상품평 정보
+	 * @author gagamel
+	 * @since 2021. 4. 27
+	 */
+	void createBestReviewPointHistory(Review review);
+
+	/**
+	 * 베스트상품평 선정 처리
+	 * @param review - 상품평 정보
+	 * @author gagamel
+	 * @since 2021. 4. 27
+	 */
+	void updateBestReviewSelection(Review review);
+
 }

+ 44 - 3
src/main/java/com/style24/admin/biz/service/TsaReviewService.java

@@ -7,7 +7,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.style24.admin.biz.dao.TsaReviewDao;
-import com.style24.core.support.message.TscMessageByLocale;
+import com.style24.admin.support.security.session.TsaSession;
+import com.style24.core.biz.service.TscEnvsetService;
+import com.style24.core.support.env.TscConstants;
 import com.style24.persistence.domain.Review;
 import com.style24.persistence.domain.ReviewAttach;
 
@@ -24,10 +26,10 @@ import lombok.extern.slf4j.Slf4j;
 public class TsaReviewService {
 
 	@Autowired
-	private TscMessageByLocale message;
+	private TsaReviewDao reviewDao;
 
 	@Autowired
-	private TsaReviewDao reviewDao;
+	private TscEnvsetService envsetService;
 
 	/**
 	 * 상품평 목록
@@ -79,4 +81,43 @@ public class TsaReviewService {
 		reviewDao.deleteReviewAttach(reviewAttach);
 	}
 
+	/**
+	 * 베스트상품평선정 처리
+	 * @param reviewList - 상품평 목록
+	 * @author gagamel
+	 * @since 2021. 4. 27
+	 */
+	@Transactional("shopTxnManager")
+	public void saveBestReviewList(Collection<Review> reviewList) {
+		// 1.베스트상품평포인트금액
+		int bestPntAmt = envsetService.getBestReviewPoint(TscConstants.Site.STYLE24.value());
+
+		for (Review review : reviewList) {
+			review.setGvPntAmt(bestPntAmt);
+			review.setRegNo(TsaSession.getInfo().getUserNo());
+			review.setUpdNo(TsaSession.getInfo().getUserNo());
+
+			// 2.베스트상품평포인트 생성
+			reviewDao.createBestReviewPoint(review);
+
+			// 고객포인트일련번호 설정
+			Integer custPntSq = review.getCustPntSq();
+			if (review.getCustPntSq() == null) {
+				review.setCustPntSq(custPntSq);
+			}
+
+			review.setOccurGb(TscConstants.PointOccurGb.REVIEW_POINT.value());
+			review.setOccurDtlDesc("베스트상품평포인트 지급");
+			review.setPntAmt(bestPntAmt);
+			review.setPntUploadStat(TscConstants.PntUploadStat.APPLY_COMPLETE.value());
+
+			// 3.베스트상품평포인트이력 생성
+			reviewDao.createBestReviewPointHistory(review);
+
+			// 4.베스트상품평선정 처리
+			review.setGiveDueBpnt(bestPntAmt);
+			reviewDao.updateBestReviewSelection(review);
+		}
+	}
+
 }

+ 19 - 0
src/main/java/com/style24/admin/biz/web/TsaMarketingController.java

@@ -262,6 +262,25 @@ public class TsaMarketingController extends TsaBaseController {
 		return super.ok(message.getMessage("SUCC_0004"));
 	}
 
+	/**
+	 * 베스트상품평선정 처리
+	 * @param reviewList - 상품평 목록
+	 * @return
+	 * @author gagamel
+	 * @since 2021. 4. 27
+	 */
+	@PostMapping("/review/best/list/save")
+	@ResponseBody
+	public GagaResponse saveBestReviewList(@RequestBody Collection<Review> reviewList) {
+		if (reviewList == null || reviewList.isEmpty()) {
+			throw new IllegalStateException(message.getMessage("FAIL_1001"));
+		}
+
+		reviewService.saveBestReviewList(reviewList);
+
+		return super.ok(message.getMessage("SUCC_0004"));
+	}
+
 	/* xodud1202 진행 */
 	/**
 	 * 사은품 프로모션 관리 화면

+ 32 - 3
src/main/java/com/style24/admin/biz/web/TsaStockController.java

@@ -129,6 +129,9 @@ public class TsaStockController extends TsaBaseController {
 			goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
 			goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
 		}
+		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+		}
 		// multi row 검색관련 처리
 		if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
 			try {
@@ -149,6 +152,8 @@ public class TsaStockController extends TsaBaseController {
 				throw new IllegalStateException(message.getMessage("업체코드 검색중 오류로 인해 조회되지 않았습니다."));
 			}
 		}
+		
+		log.info("[goodsSearch] goodsSearch =>{}", goodsSearch);
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 		goodsSearch.setPageable(new TscPageRequest(goodsSearch.getPageNo() - 1, goodsSearch.getPageSize()));
 		goodsSearch.getPageable().setTotalCount(stockService.getGoodsSizeStockCount(goodsSearch));
@@ -179,6 +184,29 @@ public class TsaStockController extends TsaBaseController {
 			goodsSearch.setSupplyCompCd(TsaSession.getInfo().getSupplyCompCd());
 			goodsSearch.setMdNo(TsaSession.getInfo().getUserNo().toString());
 		}
+		if (!StringUtils.isBlank(goodsSearch.getCondition())) {
+			goodsSearch.setConditionList(goodsSearch.getCondition().replaceAll("\r", "").split("\n"));
+		}
+		// multi row 검색관련 처리
+		if (!StringUtils.isBlank(goodsSearch.getBrandList())) {
+			try {
+				String [] arrBrandCd = mapper.readValue(goodsSearch.getBrandList(), String[].class);
+				goodsSearch.setMultiBrand(arrBrandCd);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException(message.getMessage("브랜드코드 검색중 오류로 인해 조회되지 않았습니다."));
+			}
+		}
+
+		if (!StringUtils.isBlank(goodsSearch.getSupplyCompList())) {
+			try {
+				String [] arrSupplyComp = mapper.readValue(goodsSearch.getSupplyCompList(), String[].class);
+				goodsSearch.setMultiSupplyCompCd(arrSupplyComp);
+			} catch (Exception e) {
+				e.printStackTrace();
+				throw new IllegalStateException(message.getMessage("업체코드 검색중 오류로 인해 조회되지 않았습니다."));
+			}
+		}
 		goodsSearch.setRegNo(TsaSession.getInfo().getUserNo());	//엑셀조회시 로그인 사용자의 엑셀 상품조회시 사용
 
 		// 대용량엑셀파일다운로드는 이런 식으로 ...
@@ -199,14 +227,15 @@ public class TsaStockController extends TsaBaseController {
 	@PostMapping("/sizeSoldout/excelupload/save")
 	@ResponseBody
 	public GagaResponse saveGoodsSizeSoldoutExcelupload(@RequestBody Goods goods) throws Exception {
-
+		log.info("[saveGoodsSizeSoldoutExcelupload]Goods = >{}", goods);
 		ObjectMapper mapper = new ObjectMapper();
 
 		String targetPath = GagaFileUtil.getConcatenationPath(env.getProperty("upload.excel.target.path"), "excel");
 		// DB 처리 시 사용되는 파라미터명(셀명) 설정
 		String[] cellName = { "brandEnm", "goodsNm", "itemkindCd","goodsStat","goodsCd", "optCd", "optCd1", "optCd2",  "soldoutYn",
-			"currStockQty", "baseStockQty","saleStockQty", "ableStockQty"};
-
+								"currStockQty", "baseStockQty","saleStockQty", "ableStockQty"};
+		log.info("[saveGoodsSizeSoldoutExcelupload]targetPath = >{}", targetPath);
+		log.info("[saveGoodsSizeSoldoutExcelupload]getExcelFileNm = >{}", GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()));
 		Collection<GagaMap> ecxelGoodsList = GagaExcelUtil.getList(GagaFileUtil.getConcatenationPath(targetPath, goods.getExcelFileNm()), 0, cellName, 0);
 
 		//건수

+ 8 - 0
src/main/java/com/style24/persistence/domain/Review.java

@@ -86,4 +86,12 @@ public class Review extends TscBaseDomain {
 		return TsaSession.getInfo().getMaskingYn().equals("Y") ? MaskingUtils.name(getCustNm()) : getCustNm();
 	}
 
+	// 베스트상품평포인트 생성
+	private Integer custPntSq;		// 고객포인트일련번호
+	private int gvPntAmt;			// 지급포인트금액
+	private String occurGb;			// 포인트발생구분
+	private String occurDtlDesc;	// 포인트발생상세설명
+	private int pntAmt;				// 포인트금액
+	private String pntUploadStat;	// 포인트반영상태
+
 }

+ 93 - 0
src/main/java/com/style24/persistence/mybatis/shop/TsaReview.xml

@@ -35,6 +35,9 @@
 		     , R.PNT_GIVE_STAT                                            /*포인트지급상태*/
 		     , R.DISP_YN                                                  /*표시여부*/
 		     , R.DEL_YN                                                   /*삭제여부*/
+		     , R.BEST_YN                                                  /*베스트여부*/
+		     , R.GIVE_DUE_BPNT                                            /*베스트지급에정포인트*/
+		     , R.BPNT_GIVE_YN                                             /*베스트포인트지급여부*/
 		     , R.CONFIRM_YN                                               /*확인여부*/
 		     , FN_GET_USER_NM(R.CONFIRM_UNO)            AS CONFIRM_UNM    /*확인자명*/
 		     , DATE_FORMAT(R.CONFIRM_DT,'%Y%m%d%H%i%S') AS CONFIRM_DT     /*확인일시*/ 
@@ -110,6 +113,9 @@
 		     , FN_GET_CODE_NM('G041',R.SCORE_BALL)           AS SCORE_BALL     /*볼넓이점수*/
 		     , R.GIVE_DUE_PNT                                                  /*지급예정포인트*/
 		     , FN_GET_CODE_NM('G043',R.PNT_GIVE_STAT)        AS PNT_GIVE_STAT  /*포인트지급상태*/
+		     , R.BEST_YN                                                       /*베스트여부*/
+		     , R.GIVE_DUE_BPNT                                                 /*베스트지급에정포인트*/
+		     , R.BPNT_GIVE_YN                                                  /*베스트포인트지급여부*/
 		     , R.CONFIRM_YN                                                    /*확인여부*/
 		     , FN_GET_USER_NM(R.CONFIRM_UNO)                 AS CONFIRM_UNM    /*확인자명*/
 		     , DATE_FORMAT(R.CONFIRM_DT,'%Y-%m-%d %H:%i:%S') AS CONFIRM_DT     /*확인일시*/ 
@@ -166,4 +172,91 @@
 		AND    DEL_YN = 'N' /*삭제안된넘*/
 	</update>
 	
+	<!-- 베스트상품평포인트 생성-->
+	<insert id="createBestReviewPoint" parameterType="Review" keyProperty="custPntSq">
+		/* TsaReview.createBestReviewPoint */
+		INSERT INTO TB_CUST_POINT (
+		       CUST_PNT_SQ
+		     , CUST_NO
+		     , GV_PNT_AMT
+		     , US_PNT_AMT
+		     , RM_PNT_AMT
+		     , EXP_BE_DT
+		     , EXP_CMP_DT
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		SELECT NULL                             AS CUST_PNT_SQ
+		     , CUST_NO
+		     , #{gvPntAmt}                      AS GV_PNT_AMT
+		     , 0                                AS US_PNT_AMT
+		     , 0                                AS RM_PNT_AMT
+		     , DATE_ADD(NOW(), INTERVAL 1 YEAR) AS EXP_BE_DT
+		     , NULL                             AS EXP_CMP_DT
+		     , #{regNo}                         AS REG_NO
+		     , NOW()                            AS REG_DT
+		     , #{updNo}                         AS UPD_NO
+		     , NOW()                            AS UPD_DT
+		FROM   TB_REVIEW
+		WHERE  REVIEW_SQ = #{reviewSq}
+		AND    BEST_YN = 'N' /*베스트상품이아닌넘. 베스트여부 값이 변경될 수도 있으므로 체크로직 추가*/
+	</insert>
+
+	<!-- 베스트상품평포인트이력 생성-->
+	<insert id="createBestReviewPointHistory" parameterType="Review">
+		/* TsaReview.createBestReviewPointHistory */
+		INSERT INTO TB_CUST_POINT_HST (
+		       PNT_HST_SQ
+		     , CUST_NO
+		     , OCCUR_GB
+		     , OCCUR_DTL_DESC
+		     , PNT_AMT
+		     , CUST_PNT_SQ
+		     , ORD_NO
+		     , ORD_DTL_NO
+		     , REVIEW_SQ
+		     , SWITCH_DUE_DT
+		     , PNT_UPLOAD_STAT
+		     , PNT_UPLOAD_DT
+		     , REG_NO
+		     , REG_DT
+		     , UPD_NO
+		     , UPD_DT
+		)
+		SELECT NULL            AS PNT_HST_SQ
+		     , CUST_NO
+		     , #{occurGb}      AS OCCUR_GB
+		     , #{occurDtlDesc} AS OCCUR_DTL_DESC
+		     , #{pntAmt}       AS PNT_AMT
+		     , #{custPntSq}    AS CUST_PNT_SQ
+		     , ORD_NO
+		     , ORD_DTL_NO
+		     , REVIEW_SQ
+		     , NOW()            AS SWITCH_DUE_DT
+		     , #{pntUploadStat} AS PNT_UPLOAD_STAT
+		     , NOW()            AS PNT_UPLOAD_DT
+		     , #{regNo}         AS REG_NO
+		     , NOW()            AS REG_DT
+		     , #{updNo}         AS UPD_NO
+		     , NOW()            AS UPD_DT
+		FROM   TB_REVIEW
+		WHERE  REVIEW_SQ = #{reviewSq}
+		AND    BEST_YN = 'N' /*베스트상품이아닌넘. 베스트여부 값이 변경될 수도 있으므로 체크로직 추가*/
+	</insert>
+	
+	<!-- 베스트상품평 선정 처리 -->
+	<update id="updateBestReviewSelection" parameterType="Review">
+		/* TsaReview.updateBestReviewSelection */
+		UPDATE TB_REVIEW
+		SET    BEST_YN = 'Y'
+		     , GIVE_DUE_BPNT = #{giveDueBpnt}
+		     , BPNT_GIVE_YN = 'Y'
+		     , UPD_NO = #{updNo}
+		     , UPD_DT = NOW()
+		WHERE  REVIEW_SQ = #{reviewSq}
+		AND    BEST_YN = 'N' /*베스트상품이아닌넘. 베스트여부 값이 변경될 수도 있으므로 체크로직 추가*/
+	</update>
+	
 </mapper>

+ 6 - 3
src/main/webapp/WEB-INF/views/display/LookbookBannerPickerPopupForm.html

@@ -33,7 +33,7 @@
 				<ul class="panelBar" id="pictureOffset"> <!--style="border-color: #dbdbdb;border-style: solid;border-width: 1px;"-->
 					<li>
 						<div class="picWrap">
-							<img id="bannerPreViewUrl" src="" class="picture" style="width:100%;"/>
+							<div id="pickerBannerPreViewUrl" class="thumb" style="background-image:url('');"></div>
 						</div>
 					</li>
 					<li>
@@ -219,9 +219,12 @@
 		}
 	}
 
-	$(document).ready(function() {
+	$(document).ready(function() {debugger;
 		var bannerImgPath = $("#lbBannerPickerForm input[name=uploadBannerUrl]").val().replace('/lookbook/banner/', '')+imgNm;
-		$("#lbBannerPickerForm #bannerPreViewUrl").attr('src', bannerImgPath);
+		$("#lbBannerPickerForm #pickerBannerPreViewUrl").css({"background-image":"url("+bannerImgPath+")"});
+		//var container = document.getElementById("pickerBannerPreViewUrl");
+		//container.style.backgroundImage = "url("+bannerImgPath+")";
+
 
 		// 상세/수정일때
 		if(mode != 'N'){

+ 2 - 2
src/main/webapp/WEB-INF/views/marketing/ReviewForm.html

@@ -281,7 +281,7 @@
 			return;
 		}
 		
-		mcxDialog.confirm("베스트상품평으로 선정하시겠습니까?", {
+		mcxDialog.confirm("베스트 상품평으로 선정하시겠습니까?", {
 			cancelBtnText: "취소",
 			sureBtnText: "확인",
 			sureBtnClick: function() {
@@ -295,7 +295,7 @@
 				});
 				
 				var jsonData = JSON.stringify(updatedData);
-				gagajf.ajaxJsonSubmit('/marketing/review/best/save'
+				gagajf.ajaxJsonSubmit('/marketing/review/best/list/save'
 						, jsonData
 						, function() {
 							$('#btnSearch').trigger('click');

+ 1 - 1
src/main/webapp/WEB-INF/views/stock/GoodsSizeStockForm.html

@@ -176,7 +176,7 @@
 					<!-- 아이콘 툴팁 -->
 					&nbsp;<div class="iconTooltip">
 						<i class="fa fa-info" aria-hidden="true"></i>
-						<span class="left" style="width:300px;">
+						<span class="left" style="width:500px;">
 						<!-- class="left" 또는 class="right" -->
 							* 매체별판매가능재고 = WMS가용재고 - 안전재고 - 출고대기
 						</span>

+ 6 - 5
src/main/webapp/ux/css/admin.ui.css

@@ -1,8 +1,9 @@
-@import url("https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700");
-@import url("https://fonts.googleapis.com/css?family=Roboto:300,400,500,700");
+@charset "UTF-8";
+@import url("font.css");
+
 html,body {position:relative; height:100%;}
 html, body, header, div, ul, ol, li, dl, dt, dd, h1, h2, h3, h4, h5, h6, label, a, p, form, input, textarea, table, hr, span, em {margin:0; padding:0; box-sizing:border-box;}
-body {overflow-x:hidden; font-family:"Open Sans", "Roboto", "Malgun Gothic", sans-serif; font-size:12px; background-color:#f3f3f4;}
+body {overflow-x:hidden; font-family:"Open Sans","Roboto","Malgun Gothic","맑은 고딕",Dotum,"돋움",sans-serif; font-size:12px; background-color:#f3f3f4;}
 h1, h2, h3, h4, h5, h6 {display:inline-block;}
 ul, ol {list-style:none;}
 ul::after, ol::after {display:block; clear:both; content:'';}
@@ -863,8 +864,8 @@ table.mtz-monthpicker {border:1px solid #ddd; border-top:none;}
 /* 이미지 좌표값 가져오기 */
 #pictureOffset > li{vertical-align:top;}
 #pictureOffset > li:nth-of-type(1){width:700px;padding-right:20px;-webkit-user-select:none;user-select:none;}
-#pictureOffset .picWrap{overflow:hidden;position:relative;width:700px;height:700px;background-color:#ddd;}
-#pictureOffset .picWrap .picture{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:auto;height:auto;max-height:100%;max-width:100%;}
+#pictureOffset .picWrap{overflow:hidden;position:relative;width:700px;height:700px;background-color:#ddd;text-align:center;}
+#pictureOffset .picWrap .thumb{height:0;padding-top:100%;background-color:#f5f5f5;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;}
 #pictureOffset .dataWrap{min-width:727px;}
 #pictureOffset .dataWrap th{background:#e9f7ff;}
 #pictureOffset .dataWrap td{padding-left:20px;}

+ 59 - 0
src/main/webapp/ux/css/font.css

@@ -0,0 +1,59 @@
+/* Open Sans --------------------------------------------  */
+@font-face {
+    font-family: 'Open Sans';
+    font-style: normal;
+    font-weight: 300;
+    src: url(../../ux/font/opensans_300.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Open Sans';
+    font-style: normal;
+    font-weight: normal;
+    src: url(../../ux/font/opensans_400.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Open Sans';
+    font-style: normal;
+    font-weight: 600;
+    src: url(../../ux/font/opensans_600.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Open Sans';
+    font-style: normal;
+    font-weight: 700;
+    src: url(../../ux/font/opensans_700.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+
+  /* Roboto --------------------------------------------  */
+  @font-face {
+    font-family: 'Roboto';
+    font-style: normal;
+    font-weight: 300;
+    src: url(../../ux/font/roboto_300.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Roboto';
+    font-style: normal;
+    font-weight: normal;
+    src: url(../../ux/font/roboto_400.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Roboto';
+    font-style: normal;
+    font-weight: 500;
+    src: url(../../ux/font/roboto_500.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }
+  @font-face {
+    font-family: 'Roboto';
+    font-style: normal;
+    font-weight: 700;
+    src: url(../../ux/font/roboto_700.woff2) format('woff2');
+    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
+  }

BIN
src/main/webapp/ux/font/opensans_300.woff2


BIN
src/main/webapp/ux/font/opensans_400.woff2


BIN
src/main/webapp/ux/font/opensans_600.woff2


BIN
src/main/webapp/ux/font/opensans_700.woff2


BIN
src/main/webapp/ux/font/roboto_300.woff2


BIN
src/main/webapp/ux/font/roboto_400.woff2


BIN
src/main/webapp/ux/font/roboto_500.woff2


BIN
src/main/webapp/ux/font/roboto_700.woff2