본문으로 건너뛰기

상품 수정시 정가/매입가/판매가 입력 안정성 개선

PHP 8 · GODO25
변경 파일 수: 2개
변경 파일 목록
총 2개
변경 파일 코드
추가삭제
Component/Goods/GoodsAdmin.php+10-2
변경 전GoodsAdmin.php
 
const ECT_INVALID_ARG = 'GoodsAdmin.ECT_INVALID_ARG';
 
 
 
 
const TEXT_REQUIRE_VALUE = '%s은(는) 필수 항목 입니다.';
 
const TEXT_USELESS_VALUE = '%s은(는) 사용할 수 없습니다.';
*/
 
//
 
 
$arrData['mileageGroupMemberInfo'] = str_replace('\'', '', json_encode($arrData['mileageGroupMemberInfo'], JSON_UNESCAPED_UNICODE));
$arrData['mileageGroupInfo'] = @gd_implode(INT_DIVISION, $arrData['mileageGroupInfo']);
$arrData['fixedGoodsDiscount'] = @gd_implode(STR_DIVISION, $arrData['fixedGoodsDiscount']);
// 할인값의 천 단위 콤마 제거 (미제거 시 할인가 숫자 연산이 깨짐)
$arrData = NumberUtils::removeCommaByField($arrData, 'goodsDiscount');
 
 
 
$arrData['goodsDiscountGroupMemberInfo'] = NumberUtils::removeCommaByField($arrData['goodsDiscountGroupMemberInfo'], 'goodsDiscount');
$arrData['goodsDiscountGroupMemberInfo'] = str_replace('\'', '', json_encode($arrData['goodsDiscountGroupMemberInfo'], JSON_UNESCAPED_UNICODE));
$arrData['exceptBenefit'] = @gd_implode(STR_DIVISION, $arrData['exceptBenefit']);
 
변경 후GoodsAdmin.php
 
const ECT_INVALID_ARG = 'GoodsAdmin.ECT_INVALID_ARG';
 
/** @var string[] 천 단위 콤마 입력이 허용되어 저장 전 정제가 필요한 금액 필드 */
protected const COMMA_REMOVABLE_AMOUNT_FIELDS = ['goodsPrice', 'fixedPrice', 'costPrice', 'goodsDiscount', 'mileageGoods'];
 
const TEXT_REQUIRE_VALUE = '%s은(는) 필수 항목 입니다.';
 
const TEXT_USELESS_VALUE = '%s은(는) 사용할 수 없습니다.';
*/
 
//
// 회원등급별 마일리지도 회원등급별 할인과 같이 별도 배열이라, 인코딩 전에 정제해야 한다
$arrData['mileageGroupMemberInfo'] = NumberUtils::removeCommaByField($arrData['mileageGroupMemberInfo'], 'mileageGoods');
$arrData['mileageGroupMemberInfo'] = str_replace('\'', '', json_encode($arrData['mileageGroupMemberInfo'], JSON_UNESCAPED_UNICODE));
$arrData['mileageGroupInfo'] = @gd_implode(INT_DIVISION, $arrData['mileageGroupInfo']);
$arrData['fixedGoodsDiscount'] = @gd_implode(STR_DIVISION, $arrData['fixedGoodsDiscount']);
// 금액값의 천 단위 콤마 제거 (미제거 시 DB 저장 과정에서 콤마 앞자리만 남고, 할인가 숫자 연산도 깨짐)
foreach (self::COMMA_REMOVABLE_AMOUNT_FIELDS as $amountField) {
$arrData = NumberUtils::removeCommaByField($arrData, $amountField);
}
// 회원등급별 할인은 별도 배열에 담겨 와 위 루프 대상이 아니다
$arrData['goodsDiscountGroupMemberInfo'] = NumberUtils::removeCommaByField($arrData['goodsDiscountGroupMemberInfo'], 'goodsDiscount');
$arrData['goodsDiscountGroupMemberInfo'] = str_replace('\'', '', json_encode($arrData['goodsDiscountGroupMemberInfo'], JSON_UNESCAPED_UNICODE));
$arrData['exceptBenefit'] = @gd_implode(STR_DIVISION, $arrData['exceptBenefit']);
 
Component/Goods/GoodsBenefit.php+3-1
변경 전GoodsBenefit.php
// 상품할인금액
$goodsDcPrice = $goodsData['goodsPrice'] - gd_number_figure(($goodsData['goodsPrice'] * $discountPercent), $goodsConfigTrunc['unitPrecision'], $goodsConfigTrunc['unitRound']);
} else {
 
 
// 상품금액보다 상품할인금액이 클 경우 상품금액으로 변경
if ($goodsData['goodsDiscount'] > $goodsData['goodsPrice']) $goodsDiscount = $goodsData['goodsPrice'];
// 상품할인금액 (정액인 경우 해당 설정된 금액으로)
$goodsDcPrice = $goodsData['goodsPrice'] - $goodsDiscount;
}
 
변경 후GoodsBenefit.php
// 상품할인금액
$goodsDcPrice = $goodsData['goodsPrice'] - gd_number_figure(($goodsData['goodsPrice'] * $discountPercent), $goodsConfigTrunc['unitPrecision'], $goodsConfigTrunc['unitRound']);
} else {
// 할인금액 초기화 (미초기화 시 null 이라 할인이 반영되지 않음)
$goodsDiscount = NumberUtils::numberFormatToFloat($goodsData['goodsDiscount']) ?: 0;
// 상품금액보다 상품할인금액이 클 경우 상품금액으로 변경
if ($goodsDiscount > $goodsData['goodsPrice']) $goodsDiscount = $goodsData['goodsPrice'];
// 상품할인금액 (정액인 경우 해당 설정된 금액으로)
$goodsDcPrice = $goodsData['goodsPrice'] - $goodsDiscount;
}