<기능개선>

통합테스트목록 . 548
계산서관련 추가개발
This commit is contained in:
kdh0120 2021-11-16 08:25:07 +00:00
parent ed3f96302b
commit a1f9152e2a
6 changed files with 186 additions and 50 deletions

View File

@ -856,6 +856,8 @@ namespace NP.BO.Controllers
ht.Add("cdte", string.IsNullOrEmpty(vm.stringval2) ? null : (vm.stringval2 + " 23:59:59"));
ht.Add("staxdate", vm.stringval8);
ht.Add("etaxdate", string.IsNullOrEmpty(vm.stringval9) ? null : (vm.stringval9 + " 23:59:59"));
ht.Add("pstatus", vm.stringval10);
ht.Add("taxnos", vm.stringval11);
if (!string.IsNullOrEmpty(vm.stringval3))
{
if(vm.stringval3 == "2")
@ -880,6 +882,16 @@ namespace NP.BO.Controllers
}
}
vm.PayTaxes = Dao.Get<PayTax>("cr.paytaxes", ht);
if (vm.isexceldown == 1)
{
return ExportExcel(
new String[] {"결제번호","신청일","입금일","결제상태","이름","아이디","전화번호","강좌명","교육종료일","회사명","대표명","주소","사업자번호","업태","종목","담당자명","담당자연락처"
,"계산서수신이메일","청구영수","발행요청금액","발행요청일","실제날짜","발행한날","발행상태"},
new String[] {"payno","cdtymd", "payoktimeymd", "pstatusname2","username", "userid", "mobile", "itemname","eendymd", "asname", "ceoname","asaddr",
"brno", "btype","bkind", "manname", "telno", "email", "isreceiptname", "taxamt", "taxdatereqymd","taxdateymd","realtaxdateymd","status"},
vm.PayTaxes,
"계산서요청"+DateTime.Now.ToString("yy.MM.dd"), null);
}
vm.pagetotalcount = GetCount(vm.PayTaxes.FirstOrDefault());
return View(vm);

View File

@ -11,6 +11,7 @@
<form id="mform" method="post">
<section class="panel panel-default clearfix devsearch" data-cleartbody="tbody1">
@Html.Partial("./Partial/SearchCaption")
@Html.HiddenFor(w=>w.stringval11)
<div class="step-content">
<div class="step-pane active form-inline">
<div class="form-groupx">
@ -41,6 +42,7 @@
<th>검색어</th>
<td class="text-left">
@Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "valuetext", ":발행상태;0:미발행;1:발행;2:발행취소" }, { "name", "stringval3" }, { "selected", Model.stringval3 } })
@Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "valuetext", ":결제상태;p21:결제대기;p22:입금대기;p1:결제완료;rf1:환불요청;r1:부분환불;r2:전액환불;p41,42,43:결제취소" }, { "name", "stringval10" }, { "selected", Model.stringval10 } })
@Html.Partial("./Partial/Select", null, new ViewDataDictionary { { "valuetext", ":전체검색;username:신청자이름;userid:신청자ID;manname:담당자이름;itemname:상품명;cname:교육과정명;paynos:결제번호;asname:회사명" }, { "name", "stringval4" }, { "selected", Model.stringval4 } })
@Html.Partial("./Partial/Text", Model.stringval5, Helpers.DicText(new NP.Model.TextDic() { Name = "stringval5", Value = Model.stringval5, PH = "", CssClass = "ff" }))
@Html.Partial("./Partial/Button", new NP.Model.Button() { Special = "search" })
@ -51,11 +53,17 @@
</div>
</div>
</section>
<div style="padding:5px 10px; text-align:right;">
@Html.Partial("./Partial/pagerow", new ViewDataDictionary { { "tbodyid", "tbody1" }, { "searchmethod", "submit()" }, { "pagesize", Model.pagerowcount } })
@*<a href="#" onclick="javascript:exceldown('mform', '/croom/tax', 'tbody1', '계산서요청');" class="btn btn-s-xs btn-success" style="margin-left: 5px;">엑셀다운로드</a>*@
<a href="#" onclick="javascript:callexcel();" class="btn btn-s-xs btn-success" style="margin-left: 5px;">엑셀다운로드</a>
</div>
<section class="panel panel-default">
<div class="table-responsive" id="excel1">
<table class="table table-striped b-t b-light no-odd">
<thead>
<tr>
<th><input type="checkbox" onclick="javascript: checkall('excel1', this);" /></th>
<th width="100">No</th>
<th>결제번호</th>
<th>회사명</th>
@ -63,9 +71,11 @@
<th>상품명</th>
<th>수량<br />(인원)</th>
<th>발행요청금액</th>
<th>결제상태</th>
<th>신청일</th>
<th>계산서날짜</th>
<th>실제날짜</th>
<th>실제날짜</th>
<th>발행한날</th>
<th>영수구분</th>
<th>상태</th>
</tr>
@ -74,6 +84,7 @@
@foreach (var d in Model.PayTaxes)
{
<tr>
<td><input type="checkbox" class="autocheck" value="@d.taxno" /></td>
<td>@d.rno</td>
<td>@d.payno</td>
<td class="left">@Html.Raw(string.Format("<span class=\"isjoin{0}\">{1}</span> {2}", d.isjoin, d.isjoin == 1 ? "정" : "비", d.asname))</td>
@ -81,11 +92,13 @@
<td class="link"><a href="#" onclick="gotax(@d.taxno)">@d.itemname @(d.ccount > 1 ? string.Format("외 {0}건", d.ccount - 1) : "")</a></td>
<td>@d.pcnt</td>
<td class="right">@d.taxamt.ToString("#,0")</td>
<td>@d.pstatusname2</td>
<td>@d.cdtymd</td>
<td>@(d.taxdatereq == null ? "" : d.taxdatereq.Value.ToString("yyyy-MM-dd"))</td>
<td>@(d.taxdate == null ? "" : d.taxdate.Value.ToString("yyyy-MM-dd"))</td>
<td>@(d.taxdate == null ? "" : d.taxdate.Value.ToString("yyyy-MM-dd"))</td>
<td>@(d.realtaxdate == null ? "" : d.realtaxdate.Value.ToString("yyyy-MM-dd"))</td>
<td>@(d.isreceipt == 0 ? "청구" : "영수")</td>
<td class="taxdate@(d.status =="미발행" ? "x" :"")" @(!string.IsNullOrEmpty(d.mgtkey) && d.statecode == 0 ? "style=color:blue;" : "" ) >@(d.status)</td>
<td class="taxdate@(d.status =="미발행" ? "x" :"")" @(!string.IsNullOrEmpty(d.mgtkey) && d.statecode == 0 ? "style=color:blue;" : "" )>@(d.status)</td>
</tr>
}
@ -126,5 +139,18 @@
function gotab() {
$("#dform").attr("action", "/croom/taxsmart").submit();
}
function callexcel() {
$("#stringval11").val("")
if ($("#tbody1 tr td input.autocheck:checked").length < 1) {
msg("엑셀 다운로드 할 건이 선택되지 않았습니다.");
} else {
var taxnos = "";
$.each($("#tbody1 tr td input.autocheck:checked"), function (i, c) {
taxnos += "," + $(c).val();
});
$("#stringval11").val(taxnos.substr(1));
exceldown('mform', '/croom/tax', 'tbody1', '계산서요청');
}
}
</script>
}

View File

@ -1012,7 +1012,8 @@ create table paytax (
,cdt datetime not null,cno bigint not NULL,udt datetime not null,uno bigint not NULL,uip varchar(50) not NULL
,mgtkey varchar (24)
,taxdatereq datetime
,statecode INT(11) NULL DEFAULT NULL,
,statecode INT(11) NULL DEFAULT NULL
,realtaxdate datetime default null
,primary key(taxno));
create table paytaxitem (

View File

@ -1289,54 +1289,75 @@
<select id="cr.paytaxes" parameterClass="hashtable" resultClass="paytax">
select a.*
from (
select a.taxno,ifnull(a.cname, ifnull(a.exname, a.bkname)) itemname,a.asaddr,a.pcnt,a.ccount,b.iscancel
,b.payno,b.asname,b.taxamt,b.cdt,b.taxdate,b.ceoname,b.brno,b.grno,b.btype,b.bkind,b.manname,b.fgno,b.taxinfo,b.isreceipt,b.mgtkey,b.taxdatereq,b.statecode
,CAST(AES_DECRYPT(UNHEX(b.telno), <include refid="sql.digest"></include>) AS char) telno
,CAST(AES_DECRYPT(UNHEX(b.email), <include refid="sql.digest"></include>) AS char) email
,u.userno cno,u.username,u.userid
,ua.isjoin
,row_number() over(order by b.cdt desc) rno
,count(a.taxno) over() pagetotalcount
from (
select a.taxno,max(cm.cname) cname,a.asaddr,max(bk.bkname) bkname,max(ex.exname) exname,sum(pi.pcnt) pcnt,count(pi.pino) ccount
from paytax a
inner join paytaxitem b on b.taxno=a.taxno
inner join payitem pi on pi.pino=b.pino
left outer join cm cm on pi.ptype in (0,1,4) and cm.cmno=pi.itemno
inner join cm cm2 on cm2.cmno=cm.pcmno
left outer join book bk on pi.ptype=2 and bk.bkno=pi.itemno
left outer join exam ex on pi.ptype=3 and ex.exno=pi.itemno
inner join users u on u.userno=a.cno
<dynamic prepend="where">
<isNotNull property="payno" prepend="and">a.payno = #payno#</isNotNull>
<isNotNull property="cno" prepend="and">a.cno = #cno#</isNotNull>
<isNotNull property="nottaxno" prepend="and">a.taxno &lt;&gt; #nottaxno#</isNotNull>
<isNotNull property="taxno" prepend="and">a.taxno=#taxno#</isNotNull>
<isNotNull property="iscancel" prepend="and">ifnull(a.iscancel,0)=#iscancel#</isNotNull>
<isNotNull property="cdts" prepend="and">a.cdt &gt;= #cdts#</isNotNull>
<isNotNull property="cdte" prepend="and">a.cdt &lt;= #cdte#</isNotNull>
<isNotNull property="tstatus0" prepend="and">ifnull(a.statecode,0) &lt; 300</isNotNull>
<isNotNull property="tstatus1" prepend="and">a.statecode &gt;= 300</isNotNull>
<isNotNull property="username" prepend="and">u.username like concat('%',#username#,'%')</isNotNull>
<isNotNull property="userid" prepend="and">u.userid like concat('%',#userid#,'%')</isNotNull>
<isNotNull property="manname" prepend="and">a.manname like concat('%',#manname#,'%')</isNotNull>
<isNotNull property="itemname" prepend="and">(cm.cname like concat('%', #itemname#, '%') or bk.bkname like concat('%', #itemname#, '%') or ex.exname like concat('%', #itemname#, '%'))</isNotNull>
<isNotNull property="cname" prepend="and">cm2.cname like concat('%', #cname#, '%')</isNotNull>
<isNotNull property="paynos" prepend="and">a.payno like concat('%', #paynos#, '%')</isNotNull>
<isNotNull property="nimp" prepend="and">
(u.username=#nimp# or u.userid=#nimp# or a.manname=#nimp# or cm.cname like concat('%', #nimp#, '%') or bk.bkname like concat('%', #nimp#, '%') or ex.exname like concat('%', #nimp#, '%') or cm2.cname like concat('%', #nimp#, '%'))
</isNotNull>
<isNotNull property="staxdatereq" prepend="and">a.taxdatereq &gt;= #staxdatereq#</isNotNull>
<isNotNull property="etaxdatereq" prepend="and">a.taxdatereq &lt;= #etaxdatereq#</isNotNull>
<isNotNull property="staxdate" prepend="and">a.taxdate &gt;= #staxdate#</isNotNull>
<isNotNull property="etaxdate" prepend="and">a.taxdate &lt;= #etaxdate#</isNotNull>
<isNotNull property="asname" prepend="and">a.asname like concat('%',#asname#,'%')</isNotNull>
</dynamic>
group by a.taxno
) a
select a.taxno,ifnull(a.cname, ifnull(a.exname, a.bkname)) itemname,a.asaddr,a.pcnt,a.ccount,b.iscancel
,b.payno,b.asname,b.taxamt,b.cdt,b.taxdate,b.ceoname,b.brno,b.grno,b.btype,b.bkind,b.manname,b.fgno,b.taxinfo,b.isreceipt,b.mgtkey,b.taxdatereq,b.realtaxdate,b.statecode
,CAST(AES_DECRYPT(UNHEX(b.telno), <include refid="sql.digest"></include>) AS char) telno
,CAST(AES_DECRYPT(UNHEX(b.email), <include refid="sql.digest"></include>) AS char) email
,u.userno cno,u.username,u.userid,CAST(AES_DECRYPT(UNHEX(u.mobile), <include refid="sql.digest"></include>) AS char) mobile
,p.payoktime,p.pstatus,p.rstatus,p.payamt payamt2,p.refundamt,p.isunpay
,cmis.eend
,ua.isjoin
,case when p.rstatus=0 and pr.rstatus = 0 and pri.rfdno is not null then 1 else 0 end isrefundcall
,row_number() over(order by b.cdt desc) rno
,count(a.taxno) over() pagetotalcount
from (
select a.taxno,max(cm.cname) cname,a.asaddr,max(bk.bkname) bkname,max(ex.exname) exname,sum(pi.pcnt) pcnt,count(pi.pino) ccount
from paytax a
inner join paytaxitem b on b.taxno=a.taxno
inner join payitem pi on pi.pino=b.pino
left outer join cm cm on pi.ptype in (0,1,4) and cm.cmno=pi.itemno
inner join cm cm2 on cm2.cmno=cm.pcmno
left outer join book bk on pi.ptype=2 and bk.bkno=pi.itemno
left outer join exam ex on pi.ptype=3 and ex.exno=pi.itemno
inner join users u on u.userno=a.cno
<dynamic prepend="where">
<isNotNull property="payno" prepend="and">a.payno = #payno#</isNotNull>
<isNotNull property="cno" prepend="and">a.cno = #cno#</isNotNull>
<isNotNull property="nottaxno" prepend="and">a.taxno &lt;&gt; #nottaxno#</isNotNull>
<isNotNull property="taxno" prepend="and">a.taxno=#taxno#</isNotNull>
<isNotNull property="iscancel" prepend="and">ifnull(a.iscancel,0)=#iscancel#</isNotNull>
<isNotNull property="cdts" prepend="and">a.cdt &gt;= #cdts#</isNotNull>
<isNotNull property="cdte" prepend="and">a.cdt &lt;= #cdte#</isNotNull>
<isNotNull property="tstatus0" prepend="and">ifnull(a.statecode,0) &lt; 300</isNotNull>
<isNotNull property="tstatus1" prepend="and">a.statecode &gt;= 300</isNotNull>
<isNotNull property="username" prepend="and">u.username like concat('%',#username#,'%')</isNotNull>
<isNotNull property="userid" prepend="and">u.userid like concat('%',#userid#,'%')</isNotNull>
<isNotNull property="manname" prepend="and">a.manname like concat('%',#manname#,'%')</isNotNull>
<isNotNull property="itemname" prepend="and">(cm.cname like concat('%', #itemname#, '%') or bk.bkname like concat('%', #itemname#, '%') or ex.exname like concat('%', #itemname#, '%'))</isNotNull>
<isNotNull property="cname" prepend="and">cm2.cname like concat('%', #cname#, '%')</isNotNull>
<isNotNull property="paynos" prepend="and">a.payno like concat('%', #paynos#, '%')</isNotNull>
<isNotNull property="nimp" prepend="and">
(u.username=#nimp# or u.userid=#nimp# or a.manname=#nimp# or cm.cname like concat('%', #nimp#, '%') or bk.bkname like concat('%', #nimp#, '%') or ex.exname like concat('%', #nimp#, '%') or cm2.cname like concat('%', #nimp#, '%'))
</isNotNull>
<isNotNull property="staxdatereq" prepend="and">a.taxdatereq &gt;= #staxdatereq#</isNotNull>
<isNotNull property="etaxdatereq" prepend="and">a.taxdatereq &lt;= #etaxdatereq#</isNotNull>
<isNotNull property="staxdate" prepend="and">a.taxdate &gt;= #staxdate#</isNotNull>
<isNotNull property="etaxdate" prepend="and">a.taxdate &lt;= #etaxdate#</isNotNull>
<isNotNull property="asname" prepend="and">a.asname like concat('%',#asname#,'%')</isNotNull>
<isNotEmpty property="taxnos" prepend="and">a.taxno in ($taxnos$)</isNotEmpty>
</dynamic>
group by a.taxno
) a
inner join paytax b on b.taxno=a.taxno
inner join users u on u.userno=b.cno
inner join pay p on p.payno = b.payno
left outer join pplog ppl on ppl.pplno = p.pplno
left outer join cminningscd cmis on cmis.cmisno = ppl.cmisno
left outer join payitem pi on pi.payno = p.payno
left outer join payrfditem pri on pri.pino = pi.pino
left outer join payrfd pr on pr.rfdno = pri.rfdno
left outer join assign ua on ua.asno=u.asno
<dynamic prepend="where">
<isNotEmpty property="pstatus" prepend="and">
<isEqual property="pstatus" compareValue="p21">(p.pstatus in (21) and pr.rstatus is null and p.rstatus = 0)</isEqual>
<isEqual property="pstatus" compareValue="p22">(p.pstatus in (22) and pr.rstatus is null and p.rstatus = 0)</isEqual>
<isEqual property="pstatus" compareValue="p1">(p.pstatus in (1) and pr.rstatus is null and p.rstatus = 0)</isEqual>
<isEqual property="pstatus" compareValue="rf1">(pr.rfdno is not null and pr.rstatus = 0)</isEqual>
<isEqual property="pstatus" compareValue="r1">(pi.rstatus=1 and p.payamt>p.refundamt)</isEqual>
<isEqual property="pstatus" compareValue="r2">(p.rstatus > 0 and p.payamt=p.refundamt)</isEqual>
<isEqual property="pstatus" compareValue="p41,42,43">(p.pstatus in (41,42,43) and pr.rstatus is null and p.rstatus = 0)</isEqual>
</isNotEmpty>
</dynamic>
) a
<include refid="sql.pagedynamic"></include>
order by rno
@ -1401,6 +1422,7 @@
,mgtkey=#mgtkey#
,taxdatereq=#taxdatereq#
,statecode=#statecode#
,realtaxdate=case when #statecode#=300 and realtaxdate is null then now() else realtaxdate end
where taxno=#taxno#
</update>
<select id="cr.documnetspasts" parameterClass="hashtable" resultClass="document">

View File

@ -159,7 +159,8 @@
{
if (item.iscancel != 1 && item.taxdate2 != null && !string.IsNullOrEmpty(item.mgtkey) && item.statecode >= 300) /*취소 and 발행일 and 세금계산서문서번호 */
{
<a href="#" onclick="viewtaxinvoice('@(item.payno)')">[인쇄]</a>
@*<a href="#" onclick="viewtaxinvoice('@(item.payno)')">[인쇄]</a>*@
<a href="#" onclick="msg('요청하신 메일로 확인바랍니다.<br/>감사합니다.')">[계산서발행완료]</a>
}
else if (item.iscancel == 1) /*취소시 일반영수증*/
{

View File

@ -996,6 +996,21 @@ namespace NP.Model
/// 발행일 관리자만입력
/// </summary>
public DateTime? taxdate {get;set;}
public String taxdateymd
{
get
{
return taxdate == null ? "" : taxdate.Value.ToString("yyyy-MM-dd");
}
}
public DateTime? realtaxdate { get; set; }
public String realtaxdateymd
{
get
{
return realtaxdate == null ? "" : realtaxdate.Value.ToString("yyyy-MM-dd");
}
}
/// <summary>
/// fkpaytaxfg 첨부파일
/// </summary>
@ -1009,6 +1024,13 @@ namespace NP.Model
/// </summary>
public String asaddr { get; set; }
public int isreceipt { get; set; }
public String isreceiptname
{
get
{
return isreceipt == 0 ? "청구" : "영수";
}
}
public Int64 pino { get; set; }
public String itemname { get; set; }
public String payamt { get; set; }
@ -1041,6 +1063,13 @@ namespace NP.Model
/// 계산서날짜
/// </summary>
public DateTime? taxdatereq { get; set; }
public String taxdatereqymd
{
get
{
return taxdatereq == null ? "" : taxdatereq.Value.ToString("yyyy-MM-dd");
}
}
/// <summary>
/// 세금계산서 상태코드
/// </summary>
@ -1097,6 +1126,51 @@ namespace NP.Model
return returnString;
}
}
public int isrefundcall { get; set; }
/// <summary>
/// 결제상태 0:결제시도,1:결제완료,21:결제대기(승인심사),22:입금대기,41:결제취소,42: 가상계좌입금대기만료, 43: 가상계좌입금전취소,51:자격증강좌심사중
/// </summary>
public int pstatus { get; set; }
/// <summary>
/// 결제액
/// </summary>
public int payamt2 { get; set; }
/// <summary>
/// 환불액
/// </summary>
public int refundamt { get; set; }
public int isunpay { get; set; }
public String pstatusname
{
get
{
return rstatus == 2 ? "전액환불" : rstatus == 1 ? "부분환불" : isrefundcall == 1 ? "환불요청" : pstatus == 1 ? "결제완료" : pstatus == 21 ? "결제대기" : pstatus == 22 ? "입금대기" : "결제취소";
}
}
public String pstatusname2
{
get
{
return rstatus == 1 && payamt2 <= refundamt ? "전액환불" : (pstatusname + (isunpay == 1 ? "(미수)" : isunpay == 2 ? "(미수입금)" : ""));
}
}
public DateTime? payoktime { get; set; }
public String payoktimeymd
{
get
{
return payoktime == null ? "-" : payoktime.Value.ToString("yyyy-MM-dd");
}
}
public DateTime? eend { get; set; }
public String eendymd
{
get
{
return eend == null ? "-" : eend.Value.ToString("yyyy-MM-dd");
}
}
public String mobile { get; set; }
}
[Serializable]
public class PayRfd : BaseModel