02 - 스마트스토어 개설을 위한 사전 준비


01 단계에서 사업자등록을 했다면 스마트스토어에서 요구하는 사항을 준비해야된다.


1. 도메인 신청 

   - 인터넷 주소를 적당한 도메인 사이트(검색하면 많이 나옴)에서 신청한다. (예 : dasdes.com)

      (보통 1년에 1만원 정도 하지만 도메인 만드는 사이트마다 가격 차이는 있다)

   - 네이버에서 "도메인 등록"으로 검색하여 나온 [결과보기]

   - 이 도메인을 나중에 에스크로 서비스에 사용하면 됨.

   - 도메인은 본인만의 주소를 입력했을 때 만들어진 스마트스토어 주소로 바로 포워딩(자동연결) 될 수 있도록 설정 가능.


2. 에스크로가 제공되는 국민은행 또는 NH농협은행 사업자 계좌 개설

   (에스크로란 판매가 된 후 배송완료(구매확정)이 되기 전까지 판매금액을 예치해 뒀다가

    배송완료가 되고 나서 판매자 계좌로 입금해 주는 것이다.

    이것은 쇼핑몰을 운영할 경우 필수적으로 처리해야 되는 사항이다.

    "전자상거래 등에서의 소비자 보호에 관한 법률" 에 따라 필수적으로 요구되는 법적 의무사항이다.)

    : 계좌만들 때 현금카드, OTP도 같이 신청한다.

    - 필요서류 : 사업자등록증, 대표자 신분증

    - 수령 : 우편 또는 직접수령

    - 통장을 수령 후 "사업자 통장 사본"을 스캔해놓는다. (스마트스토어 등록시 사용)


3. 개설한 은행의 인터넷 뱅킹 사이트에서 "사업자 공인인증서" 구매 

    : 기업범용(11만원)은 너무 비싸고 저렴한 은행/신용카드/보험용(4,400원)으로 구매한다.

      (위에서 계좌 개설하고 받은 카드로 결제한다. 사업 오픈 관련된 사항이므로..ㅋ)




4. 개설한 은행의 인터넷 뱅킹 사이트에서 "에스크로 서비스를 신청"한다.

    본인은 국민은행을 이용했으므로 국민은행의 에스크로 서비스를 신청했다.

    - 주소 : https://okbfex.kbstar.com/quics?page=oescrow#loading

    1) 위 주소 클릭 후 "판매 인증마크 등록" 버튼을 클릭한다.


     2) 기본적인 정보를 입력한다. (이미 발급받은 도메인 주소도 같이 입력한다.)


        3) 등록이 완료되면 각 쇼핑몰에서 사용할 javascript 또는 URL을 제공한다.(확인용)


        4) 아래는 네이버 스마트 스토어에 제출하기 위해 이용확인증을 PDF파일로 받아놓으면 된다.

            : 아래 입력란에는 사업자등록증에 있는 내용의 대표자명, 소재지를 입력하면 된다.


        5) 다운로드 받은 구매안전서비스 이용확인증

5. 정부24 (https://www.gov.kr/main?a=AA020InfoCappViewApp&CappBizCD=11300000006#noaction) 에서 

    "통신판매업신고"를 처리한다.

   (등록예시 : https://www.gov.kr/main?a=AA040WHMinwonSamplePopupApp&cappBizCd=1130000000601)

    - 필요서류 스캔/출력 : 개인사업자는 사업자등록증 스캔, 대표자 신분증 스캔

                                 구매안전확인서(에스크로, 위에서 출력) 스캔

    - 수령 : 등록할 때 어디서 수령할 것인지 입력한 곳(예 구청)에서 4만원정도 결제하고 안내책자와 통신판매업신고증을 

               찾아온다.

   1) 아래는 위의 등록예시에 나오는 화면임.

      


    2) 신청을 완료하고 난 이후에는 다음과 같이 진행과정을 조회할 수 있음.


     3) 직접수령한 통신판매업 신고증



6. 동사무소에서 인감증명서를 발급받는다.

   * 팁 : 인감증명서를 받기 싫으면 "본인서명사실확인서"를 발급받으면 된다.

           "본인서명사실확인서"는 인감도장이 필요없고 본인이 직접 방문하여 신분증만 제시하면

           발급해주는 것으로 인감증명서와 동일한 효력을 가진다.

    



어때요? 도움이 많이 되셨나요? ~~~~~~~

'인터넷 쇼핑몰 오픈해보기' 카테고리의 다른 글

03-스마트 스토어 개설하기  (0) 2020.03.07
01-개인사업자 등록하기  (0) 2020.02.01

시간이 좀 있어 인터넷 쇼핑몰..구체적으로는 네이버 스마트스토어를 시범적으로 운영해 보았습니다. (아주 짧게..ㅋ)

제가 쇼핑몰을 시도해 본 건 전체적인 과정이 궁금하기도 하고 뭐든지 직접 해보고자 하는 성격 때문에 

크게 비용을 들이지 않고 할 수 있는 방향으로 진행해 봤습니다.

폐업신고한지는 좀 됐지만 시작하고자 하시는 분들에게 자그마한 도움이 될까 해서 하나씩 정리해 보고자 합니다.


1. 개인 사업자 등록을 위한 서류 스캔해놓기

   : 아래 필요서류를 확인해서 해당하는 사항만 미리 스캔해서 이미지로 준비해 놓으면 됩니다.


2. 국세청 홈택스(https://www.hometax.go.kr/)로 접속해서 아래 매뉴를 클릭한다.



3. 위 매뉴 클릭 시 사용자 로긴이 안되어 있을 경우 로긴 요청화면이 아래와 같이 나온다.

  : 계정이 없으면 개인으로 회원가입해서 로긴하면 된다.


4. 로긴 후에는 바로 아래와 같은 개인사업자 등록화면이 나온다.

  : 아래 이미지의 붉은 테두리 있는 곳에 설명을 참고해서 등록하면 된다.



5. 위 과정을 최종 등록하면 3일정도 지나면 사업자등록증이 나온다.(인터넷으로 발행 가능)



1. Docker란?

   : Docker는 가상화를 위한 시스템 중 하나이다.  

    Oracle의 virtual box나 VMWare의 경우(이하 VM) 현재 운영체제(OS) 안에서 하드웨어를 별도로 가상화 한 후 또 다른 

   운영체제를 설치하는 것이고, Docker의 경우 하드웨어를 가상화하지 않고 운영체제(OS)만 가상화한다.

   이것은 버전과 설치환경이 다른 프로그램을 설치할 경우 VM에서는 OS를 환경이 다른 만큼 새로 설치해서 

   셋팅해야되고 Docker는 추가로 OS를 설치하지 않아도 Container만 추가로 설치해주면 된다.

   그렇기 때문에 더 작은 용량으로 효율적으로 사용할 수 있다.

     다른 사람들이 만들어 놓은 환경을 다운로드해서 그대로 사용할 수 있어 좋다.


2. Docker 설치

   1) Docker hub 사이트 방문 (여기서는 윈도우 10 기준으로 설명한다. )

      : https://hub.docker.com/editions/community/docker-ce-desktop-windows

    


   

    2) 회원가입 후 다운로드 클릭

       



    3) 기본설치

        : 다운로드한 Docker Desktop Installer.exe 파일을 실행하여 기본설치를 한다.

       


    4) kitematic 설치 (컨테이너를 쉽게 설치할 수 있는 GUI 툴)

      - 설치 후 우측 아래의 고래 아이콘 클릭 후 툴바에 나오는 kitematic을 클릭하면 다운로드 창이 뜬다.

      

     


          - 다운로드를 클릭하면 zip파일로 내려받아지는데 압축을 풀고 Kitematic폴더를 바로 위 메시지에서 

             알려주는 것과 같이 C:\Program Files\Docker\ 하위에 붙여넣는다.

          - 그런다음 우측 아래의 고래 아이콘 클릭후 나오는 툴바의 Kitematic을 클릭하면 아래와 같은 툴이

             실행된다.

             


3. Docker 운영시 필요한 명령어 및 기타오류(윈도우 실행창에서 cmd를 치고 cmd창을 띄워 입력한다.)

   참고) 위 Kitematic에서 프로젝트 관리툴인 openproject container를 설치 후 예제 명령어를 구성해본다.)

  1) 현재 docker이미지 정보 보기 : docker ps -a


  2) Docker container 시작 : docker start [docker ps -a 치고 나오는 결과 제일 우측의 NAMES입력]

예) docker start openproject


  3) docker 리눅스 콘솔 접속 : docker exec -it [위 cmd창 결과 제일 왼쪽 CONTAINER ID] /bin/bash

예) docker exec -it 507f360d641e /bin/bash (안되면 /bin/bash 대신 sh 또는 /bin/sh 를 입력해본다)


4) 윈도우와 docker 리눅스간의 폴더 공유 (C:\public 폴더를 만들고 이 폴더를 공유하고자 할 때)

: docker run -v C:/public:/home/dockerpub -it driveup/openproject:latest bash

*설명 :
- C:/public : 공유할 윈도우 폴더
- /home/dockerpub : docker에서 접근할 경로 (리눅스 창에서 /home/dockerpub 로 공유됨)
- driveup/openproject:latest : docker ps -a 명령어 치고 나오는 IMAGE명 (위 cmd창 참조)

    

   5) docker 리눅스 상에서 yum update 시 오류      

 Error: Cannot retrieve repository metadata (repomd.xml) for repository: [이 부분은 제각각]. 

         Please verify its path and try again

      해결방법 : /etc/yum.repos.d 폴더로 들어가서 위의 [이 부분은 제각각] 을 포함하고 있는 파일을 찾아서

enable=1을 0으로 변경한 후 다시 시도하면 됨.


6) docker 컨테이너 삭제

: docker rm [위에 나오는 CONTAINER ID]

예) docker rm 507f360d641e ==> 한칸 띄우고 컨테이너ID 연결해서 적으면 여러개 동시 삭제 가능


7) docker image 삭제

: docker images 명령으로 repository의 이미지 리스트 확인 후에 ==> docker rmi [리스트에 있는 IMAGE ID입력]



어때요? 도움이 많이 되셨나요? ~~~~~~~



앞 게시글 Axboot 멀티 테이블 수정/저장 예제 (1/2) 에서 연속으로 진행하도록 하겠습니다.

이번 시간에는 4)제품 History 조회와 제품 정보의 판매가 수정 시 제품 History 테이블에 Insert하는 JAVA로직을 

처리하도록 하겠습니다.


4) 제품 History 조회와 제품 정보의 판매가 수정 시 제품 History 테이블에 Insert

   - PrdtPriceHist.java 수정


package com.dasdes.shopmng.domain.prdt;


import com.chequer.axboot.core.annotations.ColumnPosition;


import lombok.*;

import org.apache.ibatis.type.Alias;

import org.hibernate.annotations.CreationTimestamp;

import org.hibernate.annotations.DynamicInsert;

import org.hibernate.annotations.DynamicUpdate;

import org.hibernate.annotations.Type;


import com.chequer.axboot.core.annotations.Comment;

import com.dasdes.shopmng.domain.BaseJpaModel;

import com.dasdes.shopmng.domain.program.Program;


import java.sql.Timestamp;

import java.util.Date;


import javax.persistence.*;

import javax.validation.constraints.NotNull;


@Setter

@Getter

@DynamicInsert

@DynamicUpdate

@Entity

@EqualsAndHashCode(callSuper = true)

@IdClass(PrdtPriceHist.class)

@Table(name = "prdt_price_hist")

@Comment(value = "제품가격History")

@Alias("prdtPriceHist")

public class PrdtPriceHist extends BaseJpaModel<String> {


@Id

@Column(name = "id", length = 20, nullable = false)

@Comment(value = "id")

private String id;

@Column(name = "prdt_cd", length = 20, nullable = false)

@Comment(value = "제품코드")

private String prdtCd;


@Column(name = "ch_date", nullable = false)

@Comment(value = "변경일시")

@Temporal(TemporalType.TIMESTAMP)

private Date chDate;


@Column(name = "sales_price", precision = 10, nullable = false)

@Comment(value = "판매가격")

private Integer salesPrice;


@Override

public String getId() {

return id;

}



  - PrdtPriceHistRepository.java


package com.dasdes.shopmng.domain.prdt;


import com.chequer.axboot.core.domain.base.AXBootJPAQueryDSLRepository;

import org.springframework.data.jpa.repository.JpaRepository;

import org.springframework.stereotype.Repository;


@Repository

public interface PrdtPriceHistRepository extends AXBootJPAQueryDSLRepository<PrdtPriceHist, String> {



  - PrdtPriceHistService.java


package com.dasdes.shopmng.domain.prdt;


import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional;


import com.dasdes.shopmng.domain.BaseService;

import com.dasdes.shopmng.exception.DBException;

import com.querydsl.core.BooleanBuilder;


import javax.inject.Inject;

import com.chequer.axboot.core.parameter.RequestParams;


import java.util.ArrayList;

import java.util.List;


@Service

public class PrdtPriceHistService extends BaseService<PrdtPriceHist, String> {

    private PrdtPriceHistRepository prdtPriceHistRepository;


    @Inject

    public PrdtPriceHistService(PrdtPriceHistRepository prdtPriceHistRepository) {

        super(prdtPriceHistRepository);

        this.prdtPriceHistRepository = prdtPriceHistRepository;

    }


    //제품 판매가 History조회

    public List<PrdtPriceHist> gets(RequestParams<PrdtPriceHist> requestParams) {

    String prdtCd=requestParams.getString("prdtCd", "");

    String filter = requestParams.getString("filter");


    BooleanBuilder builder = new BooleanBuilder();


        if (isNotEmpty(prdtCd)) {

            builder.and(qProduct.prdtCd.eq(prdtCd));

        }


        List<PrdtPriceHist> prdtpriceHistList =  

                       select().from(qPrdtPriceHist).where(builder).orderBy(qPrdtPriceHist.prdtCd.asc()).fetch();


        if (isNotEmpty(filter)) {

        prdtpriceHistList = filter(prdtpriceHistList, filter);

        }   


        return prdtpriceHistList;

    }

    

    //제품 정보에서 호출하는 판매가 insert method

    @Transactional

    public void savePrdPrice(List<Product> product) {

    PrdtPriceHist prdtHist=null;

    List<PrdtPriceHist> hlist=new ArrayList();

    Product prdt=null;

   

    for(int i=0;i<product.size();i++)

    {

    prdt=(Product)product.get(i);

   

    if(prdt.is__modified__())

    {

    prdtHist=new PrdtPriceHist();

    prdtHist.setPrdtCd(prdt.getPrdtCd());

    prdtHist.setSalesPrice(prdt.getSalesPrice());

    prdtHist.setCreatedBy(prdt.getCreatedBy());

    hlist.add(prdtHist);

    }

    }        

   

    save(hlist);

    }

}

 


  - ProductService.java : 제품 정보에서 판매가를 수정할 때 제품 History 테이블에 insert되는 method 호출


package com.dasdes.shopmng.domain.prdt;


import org.springframework.stereotype.Service;

import org.springframework.transaction.annotation.Transactional; //추가


import com.querydsl.core.BooleanBuilder;  //추가


import javax.inject.Inject;

import com.chequer.axboot.core.parameter.RequestParams;

import com.dasdes.shopmng.domain.BaseService;

import com.dasdes.shopmng.exception.DBException;


import java.util.List;


//import org.slf4j.Logger;

//import org.slf4j.LoggerFactory;


@Service

public class ProductService extends BaseService<Product, String> {

    private ProductRepository productRepository;

    

    @Inject

    private PrdtPriceHistService prdtPriceHistService;


    @Inject

    public ProductService(ProductRepository productRepository) {

        super(productRepository);

        this.productRepository = productRepository;

    }


    public List<Product> gets(RequestParams<Product> requestParams) {

    String prdtCd=requestParams.getString("prdtCd", "");

    String prdtNm=requestParams.getString("prdtNm", "");

    String filter = requestParams.getString("filter");

   

    BooleanBuilder builder = new BooleanBuilder();



        if (isNotEmpty(prdtCd)) {

            builder.and(qProduct.prdtCd.eq(prdtCd));

        }



        if (isNotEmpty(prdtNm)) {

            builder.and(qProduct.prdtNm.eq(prdtNm));

        }


        List<Product> prdtList 

              = select().from(qProduct).where(builder).orderBy(qProduct.prdtCd.asc(), qProduct.prdtNm.asc()).fetch();


        if (isNotEmpty(filter)) {

        prdtList = filter(prdtList, filter);

        }

   

        return prdtList;

    }

    

    @Transactional

    public void savePrdt(List<Product> product) {

    Product prdt=null;

    for(int i=0;i<product.size();i++)

    {

    prdt=(Product)product.get(i);

    //logger.error(i+": {} :"+prdt.toString());

   

    if(prdt.is__created__() && exists(prdt.getId()))

    {

    throw new DBException("신규로 추가하신 "+prdt.getId()+"코드는 이미 등록된 제품코드입니다.");

    }

    }   

        save(product);


        //제품 판매가 History Table에 Insert되는 method호출

        prdtPriceHistService.savePrdPrice(product);

    }

}

 


5) 테스트

  - 서버 구동

  


   - 제품 정보에서 판매가 수정을 해본다. 


   - 제품 판매가 History 조회 : 하다보니 누가 변경했는지가 필요할 것 같은데 빠졌네요.^^

                                        그 부분은 여러분들이 한번 추가해 보세요..==>과제.


    

어때요? 도움이 많이 되셨나요? ~~~~~~~


[제품 가격 History]

두개 이상의 테이블을 컨트롤하는 예제를 처리하기 위해 기존 예제에 적합한

제품 가격이 변경될 때마다 그 내역을 관리할 수 있는 화면을 만들어 보기로 한다.



1. 작성순서

   1) 먼저 제품 가격 History를 저장할 수 있는 테이블을 생성하고 조회할 수 있는 화면을 만든다.

      (이 부분은 화면생성부분을 참고하기 바랍니다. 여기서는 대략적으로 설명할 예정입니다.)

      -Axboot 신규화면 만들기 1~3 참고       

       Axboot 신규화면 만들기 1 - DB생성 및 서버단 소스생성

       Axboot 신규화면 만들기 2 - 화면 소스 만들기

       Axboot 신규화면 만들기 3 - 정상적인 CRUD를 위한 JAVA소스 수정

   

   2) 이전 단계에서 만든 제품정보의 판매가격 변경 시 제품 가격 History테이블에 저장하는 로직을 추가한다.


2. 구현

   1) 제품 History테이블 생성      

CREATE TABLE `prdt_price_hist` (
	`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
	`prdt_cd` VARCHAR(20) NOT NULL COMMENT '제품코드',
	`ch_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '변경일시',
	`sales_price` INT(10) NOT NULL DEFAULT '0' COMMENT '판매가격',
	`CREATED_AT` DATETIME(6) NULL DEFAULT NULL,
	`CREATED_BY` VARCHAR(255) NULL DEFAULT NULL,
	`UPDATED_AT` DATETIME(6) NULL DEFAULT NULL,
	`UPDATED_BY` VARCHAR(255) NULL DEFAULT NULL,
	PRIMARY KEY (`id`)
)
COMMENT='제품가격History'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=4

  2) JAVA 코드 생성

      : http://localhost:8080/modelExtractor/db 접속 후 위에서 만들어진 테이블 클릭 후 기본 JAVA코드를 생성하자.
        (위 Axboot 신규화면 만들기 1 참조 - 코드생성 시 Package Name : prdt , Class Name : PrdtPriceHist 로 입력)    

  3) 제품 가격 History 화면소스 만들기

      : 간단히 기존에 만들었던 제품 정보 화면 소스를 복사해서 PrdtPriceHist.jsp와 PrdtPriceHist.js 로 

        이름을 변경한 후 일부만 수정하면 된다.

        (추가적으로 위 링크의 화면소스만들기 2를 참고하여 webapp하위의 axboot.config.js 에 js에서 호출할 

         약식이름과 full명의 mapping설정한다. - "prdtPriceHist":"/api/v1/prdtPriceHist")

        

     - PrdtPriceHist.jsp 수정     

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ taglib prefix="ax" tagdir="/WEB-INF/tags" %>


<ax:set key="system-common-code-version" value="1.0.0"/>

<ax:set key="title" value="${pageName}"/>

<ax:set key="page_desc" value="${pageRemark}"/>

<ax:set key="page_auto_height" value="true"/>


<ax:layout name="base">

    <jsp:attribute name="script">

        <ax:script-lang key="ax.script" var="LANG" />

        <ax:script-lang key="ax.admin" var="COL" />

        <script type="text/javascript" src="<c:url value='/assets/js/view/shopmng/prdtPriceHist.js' />"></script>

    </jsp:attribute>

    <jsp:body>


        <ax:page-buttons></ax:page-buttons>


        <div role="page-header">

            <ax:form name="searchView0">

                <ax:tbl clazz="ax-search-tbl" minWidth="500px">

                    <ax:tr>

                        <ax:td label='ax.admin.search' width="300px">

                            <ax:input type="text" name="filter" id="filter" clazz="form-control" placeholder="ax.admin.input.search"/>

                        </ax:td>

                    </ax:tr>

                </ax:tbl>

            </ax:form>

            <div class="H10"></div> 

        </div>


        <ax:split-layout name="ax1" orientation="horizontal">

            <ax:split-panel width="*" style="">


                <!-- 목록 -->

                <div class="ax-button-group" data-fit-height-aside="grid-view-01">

                    <div class="left">

                        <h2>

                            <i class="cqc-list"></i>

                            <!--<ax:lang id="ax.admin.commoncode.title"/>-->

                             제품 가격 변경 내역

                        </h2>

                    </div>

                    <div class="right">

                        <button type="button" class="btn btn-default" data-grid-view-01-btn="add"><i class="cqc-circle-with-plus"></i> <ax:lang id="ax.admin.add"/></button>

                        <button type="button" class="btn btn-default" data-grid-view-01-btn="delete"><i class="cqc-circle-with-minus"></i> <ax:lang id="ax.admin.delete"/></button>

                    </div>

                </div>

                <div data-ax5grid="grid-view-01" data-fit-height-content="grid-view-01" style="height: 300px;"></div>


            </ax:split-panel>

        </ax:split-layout>



    </jsp:body>

</ax:layout>


PrdtPriceHist.js 수정

var fnObj = {};

var ACTIONS = axboot.actionExtend(fnObj, {

    PAGE_SEARCH: function (caller, act, data) {

        axboot.ajax({

            type: "GET",

            url: ["prdtPriceHist"],

            data: caller.searchView.getData(),

            callback: function (res) {

                caller.gridView01.setData(res);

            }

        });

        return false;

    },

    PAGE_SAVE: function (caller, act, data) {

        var saveList = [].concat(caller.gridView01.getData("modified"));

        saveList = saveList.concat(caller.gridView01.getData("deleted"));


        axboot.ajax({

            type: "PUT",

            url: ["prdtPriceHist"],

            data: JSON.stringify(saveList),

            callback: function (res) {

                ACTIONS.dispatch(ACTIONS.PAGE_SEARCH);

                axToast.push(LANG("onsave"));

            }

        });

    },

    ITEM_ADD: function (caller, act, data) {

        caller.gridView01.addRow();

    },

    ITEM_DEL: function (caller, act, data) {

        caller.gridView01.delRow("selected");

    }

});


//기존 제품정보 복사 시 이 부분을 초기 셋팅으로만 변경해준다.

fnObj.pageStart = function () {

    this.pageButtonView.initView();

    this.searchView.initView();

    this.gridView01.initView();


    ACTIONS.dispatch(ACTIONS.PAGE_SEARCH);

};


fnObj.pageResize = function () {


};


fnObj.pageButtonView = axboot.viewExtend({

    initView: function () {

        axboot.buttonClick(this, "data-page-btn", {

            "search": function () {

                ACTIONS.dispatch(ACTIONS.PAGE_SEARCH);

            },

            "save": function () {

                ACTIONS.dispatch(ACTIONS.PAGE_SAVE);

            }

        });

    }

});


//== view 시작

/**

 * searchView

 */

fnObj.searchView = axboot.viewExtend(axboot.searchView, {

    initView: function () {

        this.target = $(document["searchView0"]);

        this.target.attr("onsubmit", "return ACTIONS.dispatch(ACTIONS.PAGE_SEARCH);");

        this.filter = $("#filter");

    },

    getData: function () {

        return {

            pageNumber: this.pageNumber,

            pageSize: this.pageSize,

            filter: this.filter.val()

        }

    }

});



/**

 * gridView

 */

fnObj.gridView01 = axboot.viewExtend(axboot.gridView, {

    initView: function () {

        var _this = this;

         

        this.target = axboot.gridBuilder({

            showRowSelector: true,

            frozenColumnIndex: 0,

            sortable: true,

            multipleSelect: true,

            target: $('[data-ax5grid="grid-view-01"]'), 

            columns: [

            {key: "id", label: "id", display: false},

            {key: "prdtCd", label: "제품코드", width: 100, align: "center", editor: "text"},  

                //내부적으로 update 일자를 관리하고 있지만, 그냥 넣어봤음.

                {key: "chDate", label: "변경일시", width: 150, align: "right", editor: "date"},  

                {key: "salesPrice", label: "판매가격", width: 150, align: "right", editor: "number"}          

            ],

            body: {

                onClick: function () {

                    this.self.select(this.dindex, {selectedClear: true});

                }

            }

        });


        axboot.buttonClick(this, "data-grid-view-01-btn", {

            "add": function () {

                ACTIONS.dispatch(ACTIONS.ITEM_ADD);

            },

            "delete": function () {

                ACTIONS.dispatch(ACTIONS.ITEM_DEL);

            }

        });

    },

    getData: function (_type) {

        var list = [];

        var _list = this.target.getList(_type);


        if (_type == "modified" || _type == "deleted") {

            list = ax5.util.filter(_list, function () {

                return this.prdtCd;

            });

        } else {

            list = _list;

        }

        return list;

    },

    addRow: function () {

        this.target.addRow({__created__: true}, "last");

    }

}); 


그 다음은 서버를 실행하여 프로그램 및 매뉴관리 화면에서 제품가격History를 추가해준다.


   


나머지 조회 및 Update(제품정보의 판매가격 수정시 호출)을 위한 JAVA소스 수정은 다음에 게시하고,

오늘은 여기까지만 하도록 하겠습니다. 



    

      

+ Recent posts