JSlip  1.0
user_journal_create.tmplt
Go to the documentation of this file.
1 <?php
2 /**
3  * @link https://datagram.co.jp/source/bksj for the canonical source repository
4  * @copyright Copyright (c) 2006-2019 Datagram Ltd. (https://datagram.co.jp)
5  * @license https://datagram.co.jp/source/bksj/license.txt
6  */
7 
8 $view = $ctrl->view;
9 $bid = $ctrl->bid;
10 $basic = $ctrl->basic;
11 $item = $ctrl->item;
12 $sect = $ctrl->sect;
13 $stld = $ctrl->stld;
14 $max = 30;
15 $lines = 3;
16 ?>
17 <script type="text/javascript">
18 
19  var my = {
20 
21  errmsg: null,
22  ans: null,
23  next: null,
24  func: null,
25  act: null,
26  jid: null,
27  scd: null,
28  ymd: null,
29  settled_flg: null,
30  not_use_flg: null,
31 
32  val: null,
33 
34  sort1: null,
35  sort2: null,
36  sid: 0,
37  sname: ['50音順', '使用順'],
38  sundry: '0',
39 
40  max: <?= $max ?>,
41  lines: <?= $lines ?>,
42  last: <?= $lines ?>,
43 
44  gotoNext: function(func, act) {
45  this.func.val(func);
46  this.act.val(act);
47  this.next.submit();
48  return false;
49  },
50 
51  getVal: function() {
52  var s, a, v;
53  var val = {};
54 
55  val['jid'] = $('#jid').val();
56  val['ymd'] = $('#ymd').val();
57 
58  $('select').each(function(){
59  s = $(this).attr('id');
60  if (s) {
61  val[s] = $('#' + s).val();
62  }
63  });
64 
65  $('input[type="hidden"]').each(function(){
66  s = $(this).attr('id');
67  a = s.split('_');
68  if (a[0] == 'v') {
69  v = '#v_' + a[1] + '_valid';
70  if ($(v).val() == 1) {
71  val[s] = $('#' + s).val();
72  }
73  }
74  });
75 
76  $('input[type="text"]').each(function(){
77  s = $(this).attr('id');
78  a = s.split('_');
79  if (a[0] == 'v') {
80  v = '#v_' + a[1] + '_valid';
81  if ($(v).val() == 1) {
82  val[s] = $('#' + s).val();
83  }
84  }
85  });
86 
87  this.val = val;
88  },
89 
90  debug: function() {
91  this.getVal();
92  for (var i in this.val) {
93  alert(i + ' = ' + this.val[i]);
94  }
95  },
96 
97  slct: function(id) {
98 
99  var itm = (this.sid == 0) ? '#item_name' : '#item_time';
100 
101  var debs = 's_' + id + '_deb_name';
102  var debo = 'o_' + id + '_deb_name';
103  var debv = 'v_' + id + '_deb_name';
104  $('#' + debs).html($(itm).html());
105  $('#' + debs + ' select').attr('id', debo);
106  $('#' + debo).attr('onchange', "return my.selChg(" + id + ", 'deb');");
107  $('#' + debo).val($('#' + debv).val());
108 
109  var cres = 's_' + id + '_cre_name';
110  var creo = 'o_' + id + '_cre_name';
111  var crev = 'v_' + id + '_cre_name';
112  $('#' + cres).html($(itm).html());
113  $('#' + cres + ' select').attr('id', creo);
114  $('#' + creo).attr('onchange', "return my.selChg(" + id + ", 'cre');");
115  $('#' + creo).val($('#' + crev).val());
116  },
117 
118  selChg: function(id, w) {
119  var o = '#o_' + id + '_' + w + '_name';
120  var v = '#v_' + id + '_' + w + '_name';
121  var k = $(o).val();
122 
123  $(v).val(k);
124 
125  if (k == this.sundry) {
126  $('#v_' + id + '_' + w + '_amount').val(0);
127  this.getSum();
128  }
129  },
130 
131  getSum: function() {
132 
133  var d, c;
134  var deb = 0;
135  var cre = 0;
136 
137  for (var i = 1; i <= this.max; i++) {
138  if ($('#v_' + i + '_valid').val() > 0) {
139  d = $('#v_' + i + '_deb_amount').val();
140  c = $('#v_' + i + '_cre_amount').val()
141  deb += d.replace(/,/g, '') * 1;
142  cre += c.replace(/,/g, '') * 1;
143  }
144  }
145 
146  $('#v_deb_sum').val(deb);
147  $('#v_cre_sum').val(cre);
148  },
149 
150  chgAmount: function(id, w) {
151 
152  var v;
153  var debv = '#v_' + id + '_deb_amount';
154  var crev = '#v_' + id + '_cre_amount';
155 
156  if (w == 'deb') {
157  v = $(debv).val();
158  $(crev).val(v);
159  } else {
160  v = $(crev).val();
161  $(debv).val(v);
162  }
163 
164  for (var i = 1; i <= this.max; i++) {
165 
166  if ($('#v_' + i + '_valid').val() > 0) {
167  if ($('#v_' + i + '_deb_name').val() == this.sundry) {
168  $('#v_' + i + '_deb_amount').val(0);
169  }
170  if ($('#v_' + i + '_cre_name').val() == this.sundry) {
171  $('#v_' + i + '_cre_amount').val(0);
172  }
173  }
174  }
175 
176  this.getSum();
177  },
178 
179  chkTax: function(id) {
180 
181  var v = $('#' + id).val();
182 
183  if (v < 1) {
184  return;
185  }
186 
187  $.ajax({
188  url: '<?= $base ?>',
189  type: 'post',
190  async: false,
191  data: {
192  'func': 'UserJournal',
193  'act': 'tax',
194  'bid': '<?= $bid ?>',
195  'val': v,
196  'eod': ''
197  }
198  })
199  .done((data) => {
200  $('#modalTaxBody').html(data);
201  })
202  .fail((data) => {
203  $('#modalTaxBody').html('error');
204  });
205 
206  $('#modalTax').modal();
207  },
208 
209  using: function(i) {
210  this.slct(i);
211  $('#v_' + i + '_valid').val(1);
212  $('#r_' + i).css('visibility', 'visible');
213  },
214 
215  plus: function() {
216 
217  if (this.last >= this.max) {
218  alert('これ以上追加できません。');
219  return;
220  }
221 
222  ++this.lines;
223  ++this.last;
224  this.using(this.last);
225  },
226 
227  drop: function(seq) {
228 
229  if (this.lines < 2) {
230  alert('これ以上削除できません。');
231  return;
232  }
233 
234  if (!confirm('行番号' + seq + 'を削除しますか?')) {
235  return;
236  }
237 
238  --this.lines;
239 
240  $('#v_' + seq + '_valid').val(0);
241  $('#r_' + seq).css('visibility', 'collapse');
242  },
243 
244  sort: function() {
245 
246  this.sid = ++this.sid % 2;
247  this.sort1.html(this.sname[this.sid]);
248  this.sort2.html(this.sname[this.sid]);
249 
250  for (var i = 1; i <= this.max; i++) {
251  if ($('#v_' + i + '_valid').val() > 0) {
252  this.slct(i);
253  }
254  }
255  },
256 
257  check: function(arg) {
258 
259  $.ajax({
260  url: '<?= $base ?>',
261  type: 'post',
262  async: false,
263  data: {
264  'func': 'UserJournal',
265  'act': 'check',
266  'insert': 1,
267  'bid': '<?= $bid ?>',
268  'arg': arg,
269  'eod': ''
270  }
271  })
272  .done((data) => {
273  eval( 'var dat =' + data );
274  if (dat.sts == 'NG') {
275  this.ans = {"sts": "NG", "err": dat.err};
276  } else {
277  this.ans = {"sts": "OK", "err": ""};
278  }
279  })
280  .fail((data) => {
281  this.ans = {"sts": "NG", "err": "ajax error"};
282  });
283 
284  return this.ans.sts;
285  },
286 
287  regist: function() {
288 
289  var n;
290  var msg = '';
291  var v = {};
292  var arg = 0;
293 
294  this.getVal();
295 
296  for (var i = 1; i <= this.max; i++) {
297  if ($('#v_' + i + '_valid').val() > 0) {
298  n = 'v_' + i + '_';
299  v[i] = {};
300  v[i]['deb_amount'] = this.val[n + 'deb_amount'];
301  v[i]['deb_name'] = this.val[n + 'deb_name'];
302  v[i]['remark'] = this.val[n + 'remark'];
303  v[i]['cre_name'] = this.val[n + 'cre_name'];
304  v[i]['cre_amount'] = this.val[n + 'cre_amount'];
305  }
306  }
307 
308  arg = {
309  'jid': this.val['jid'],
310  'scd': this.val['scd'],
311  'ymd': this.val['ymd'],
312  'settled_flg': this.val['settled_flg'],
313  'not_use_flg': this.val['not_use_flg'],
314  'dat': v,
315  };
316 
317  if (!confirm("登録しますか?")) {
318  return false;
319  }
320 
321  if (this.check(arg) == 'NG') {
322 
323  for (var i in this.ans.err) {
324  msg += this.ans.err[i] + '<br>';
325  }
326 
327  this.errmsg.html(msg);
328  return false;
329  }
330 
331  $.ajax({
332  url: '<?= $base ?>',
333  type: 'post',
334  async: false,
335  data: {
336  'func': 'UserJournal',
337  'act': 'regist',
338  'insert': 1,
339  'bid': '<?= $bid ?>',
340  'arg': arg,
341  'eod': ''
342  }
343  })
344  .done((data) => {
345  eval("this.ans = " + data);
346  })
347  .fail((data) => {
348  this.ans = {"sts": "NG", "err": "ajax error"};
349  });
350 
351  if (this.ans.sts == 'NG') {
352  this.errmsg.html(this.ans.err);
353  return false;
354  }
355 
356  this.gotoNext('UserJournal', 'remember');
357 
358  return false;
359  },
360 
361  init: function() {
362  this.errmsg = $('#errmsg');
363  this.next = $('#next');
364  this.func = $('#func');
365  this.act = $('#act');
366  this.jid = $('#jid');
367  this.scd = $('#scd');
368  this.ymd = $('#ymd');
369  this.settled_flg = $('#settled_flg');
370  this.not_use_flg = $('#not_use_flg');
371  this.sort1 = $('#sort1');
372  this.sort2 = $('#sort2');
373 
374  this.ymd.datepicker();
375 
376  this.sort1.html(this.sname[this.sid]);
377  this.sort2.html(this.sname[this.sid]);
378 
379  for (var i = 1; i <= this.lines; i++) {
380  this.using(i);
381  }
382  }
383  }
384 
385  $(function(){
386  my.init();
387  });
388 
389 </script>
390 
391 <form method="post" name="next" id="next" action="<?= $base ?>">
392  <input type="hidden" name="func" id="func">
393  <input type="hidden" name="act" id="act">
394 </form>
395 
396 <div id="item_name" style="visibility: hidden;">
397  <select>
398  <option value="-1">&nbsp;</option>
399 <?php
400 $c = '';
401 foreach ($item['name'] as $k => $d) {
402  $p = mb_substr($d['kana'], 0, 1);
403  if ($c != $p) {
404  if ($c != '') {
405  echo '</optgroup>';
406  }
407  echo '<optgroup label="' . $p . '">';
408  $c = $p;
409  }
410  echo '<option value="' . $view->str($k) . '">' . $view->str($d['name']) , '</option>';
411 }
412 if ($c != '') {
413  echo '</optgroup>';
414 }
415 ?>
416  </select>
417 </div>
418 
419 <div id="item_time" style="visibility: hidden;">
420  <select>
421  <option value="-1">&nbsp;</option>
422 <?php
423 foreach ($item['time'] as $k => $d) {
424  echo '<option value="' . $view->str($k) . '">' . $view->str($d) . '</option>';
425 }
426 ?>
427  </select>
428 </div>
429 
430 <table id="my_header" width="100%">
431  <tr>
432  <td>
433  &nbsp;<a onclick="return my.gotoNext('UserMenu', '');">メニュー</a>
434  &nbsp;&gt;&nbsp;<a onclick="return my.gotoNext('UserJournal', 'remember');">仕訳帳</a>
435  &nbsp;&gt;&nbsp;新規伝票作成
436  </td>
437  <td style="text-align: right;">
438  <button type="button" class="my_magenta" style="width: 120px;" onclick="return my.gotoNext('Login', '');">ログアウト</button>
439  </td>
440  </tr>
441  <tr>
442  <td colspan="2" style="text-align: center;">
443  <?= $view->strBasic($basic) ?>
444  </td>
445  </tr>
446 </table>
447 
448 <div style="height: 5px;">&nbsp;</div>
449 
450 <table width="100%">
451  <tr>
452  <td align="center">
453  <table class="my_table" width="100%">
454  <tr>
455  <th class="my_border">仕訳帳・新規伝票作成</th>
456  </tr>
457  </table>
458 
459  <div style="height: 1px;">&nbsp;</div><hr>
460 
461  <table>
462  <tr>
463  <td align="center">
464  <table>
465  <tr>
466  <td style="padding: 8px;">
467  <button type="button" class="my_cyan" style="width: 100px;" onclick="return my.regist();">登録</button>
468  </td>
469  <td style="width: 80px;">&nbsp;</td>
470  <td>
471  <button type="button" class="my_magenta" style="width: 100px;" onclick="return my.gotoNext('UserJournal', 'remember');">戻る</button>
472  </td>
473  </tr>
474  </table>
475  </td>
476  </tr>
477  </table>
478 
479  <div style="height: 1px;">&nbsp;</div><hr>
480 
481  <table width="100%">
482  <tr>
483  <td><div id="errmsg" class="my_red"></div></td>
484  </tr>
485  </table>
486 
487  <table class="my_list" width="100%">
488  <thead>
489  <tr>
490  <th>伝票番号</th>
491  <th>部門</th>
492  <th>伝票日付</th>
493  <th>決算伝票</th>
494  <th>不使用伝票</th>
495  </tr>
496  </thead>
497  <tbody>
498  <tr>
499  <td style="text-align: center;">
500  新番号<input id="jid" type="hidden" value="-1">
501  </td>
502  <td style="text-align: center;">
503  <select id="scd">
504 <?php
505 foreach ($sect as $k => $d) {
506  $slct = ($d == '共通') ? ' selected' : '';
507  echo '<option value="' . $view->str($k) . '"' . $slct . '>' . $view->str($d) . '</option>';
508 }
509 ?>
510  </select>
511  </td>
512  <td style="text-align: center;">
513 <?php
514 $now = explode('-', date('Y-m-d'));
515 $bgn = explode('-', $basic['term_begin']);
516 $end = explode('-', $basic['term_end']);
517 if ($now[1] . $now[2] < $bgn[1] . $bgn[2]) {
518  $ymd = $end[0] . '/' . $now[1] . '/' . $now[2];
519 } else {
520  $ymd = $bgn[0] . '/' . $now[1] . '/' . $now[2];
521 }
522 ?>
523  <input id="ymd" size="10" style="text-align: center;" type="text" value="<?= $ymd ?>">
524  </td>
525  <td style="text-align: center;">
526  <select id="settled_flg">
527 <?php
528 foreach ($stld as $k => $d) {
529  $slct = ($d == '通常伝票') ? ' selected' : '';
530  echo '<option value="' . $view->str($k) . '"' . $slct . '>' . $view->str($d) . '</option>';
531 }
532 ?>
533  </select>
534  </td>
535  <td style="text-align: center;">
536  <select id="not_use_flg">
537  <option value="true">不使用伝票</option>
538  <option value="false" selected>使用伝票</option>
539  </select>
540  </td>
541  </tr>
542  </tbody>
543  </table>
544 
545  <div style="height: 4px;">&nbsp;</div>
546  <!-- <button type="button" class="my_magenta" onclick="return my.debug();">debug</button> -->
547 
548  <table>
549  <tr>
550  <td align="center">
551  <table class="my_list">
552  <thead>
553  <tr>
554  <th>No.</th>
555  <th>借方金額</th>
556  <th>
557  借方科目
558  <button type="button" class="my_th" onclick="return my.sort();">
559  <div id="sort1"></div>
560  </button>
561  </th>
562  <th>摘要</th>
563  <th>
564  貸方科目
565  <button type="button" class="my_th" onclick="return my.sort();">
566  <div id="sort2"></div>
567  </button>
568  </th>
569  <th>貸方金額</th>
570  <th>削除</th>
571  </tr>
572  </thead>
573  <tbody>
574 <?php
575 for ($i = 0; $i < $max; $i++) {
576  $seq = $i + 1;
577 ?>
578  <tr id="r_<?= $seq ?>" style="visibility: collapse;">
579  <td style="text-align: right;">
580  <?= $seq ?>
581  </td>
582  <td style="text-align: center;">
583  <input id="v_<?= $seq ?>_deb_amount" size="10" style="text-align: right;" type="text" value="0" onchange="return my.chgAmount('<?= $seq ?>', 'deb')" ondblclick="my.chkTax('v_<?= $seq ?>_deb_amount')">
584  </td>
585  <td style="text-align: center;">
586  <input id="v_<?= $seq ?>_deb_name" type="hidden" value="-1">
587  <div id="s_<?= $seq ?>_deb_name">&nbsp;</div>
588  </td>
589  <td style="text-align: center;">
590  <input id="v_<?= $seq ?>_remark" size="40" type="text" value="">
591  </td>
592  <td style="text-align: center;">
593  <input id="v_<?= $seq ?>_cre_name" type="hidden" value="-1">
594  <div id="s_<?= $seq ?>_cre_name">&nbsp;</div>
595  </td>
596  <td style="text-align: center;">
597  <input id="v_<?= $seq ?>_cre_amount" size="10" style="text-align: right;" type="text" value="0" onchange="return my.chgAmount('<?= $seq ?>', 'cre')" ondblclick="my.chkTax('v_<?= $seq ?>_deb_amount')">
598  </td>
599  <td style="text-align: center;">
600  <input id="v_<?= $seq ?>_valid" type="hidden" value="0">
601  <button type="button" class="my_magenta" onclick="return my.drop(<?= $seq ?>);">削除</button>
602  </td>
603  </tr>
604 <?php
605 }
606 ?>
607  <tr>
608  <td style="text-align: center;">
609  <button type="button" class="my_th" onclick="return my.plus();">+</button>
610  </td>
611  <td style="text-align: center;">
612  <input id="v_deb_sum" size="10" style="text-align: right;" type="text" value="0">
613  </td>
614  <th colspan="3">合計</th>
615  <td style="text-align: center;">
616  <input id="v_cre_sum" size="10" style="text-align: right;" type="text" value="0">
617  </td>
618  <td>&nbsp;</td>
619  </tr>
620  </tbody>
621  </table>
622  </td>
623  <tr>
624  </table>
625 
626  </td>
627  </tr>
628 </table>
629 
630 <!-- モーダルダイアログ Tax -->
631 <div class="modal" id="modalTax" tabindex="-1" role="dialog" aria-labelledby="staticModalLabel" aria-hidden="true" data-show="true" data-keyboard="false" data-backdrop="static">
632  <div class="modal-dialog">
633  <div class="modal-content">
634  <div class="modal-header">
635  <button type="button" class="close" data-dismiss="modal">
636  <span aria-hidden="true">&#215;</span>
637  </button>
638  <h4 class="modal-tax-title">消費税</h4>
639  </div>
640  <div class="modal-body">
641  <div id="modalTaxBody"></div>
642  </div>
643  <div class="modal-footer">
644  <button type="button" class="my_magenta" data-dismiss="modal">閉じる</button>
645  </div>
646  </div>
647  </div>
648 </div>