Coverage Report - jp.co.y_net.amm.page.OrgDetailPage
 
Classes in this File Line Coverage Branch Coverage Complexity
OrgDetailPage
0%
0/157
0%
0/34
0
OrgDetailPage$1
0%
0/7
0%
0/4
0
OrgDetailPage$10
0%
0/3
0%
0/2
0
OrgDetailPage$11
0%
0/120
0%
0/94
0
OrgDetailPage$12
0%
0/21
0%
0/12
0
OrgDetailPage$2
0%
0/5
0%
0/2
0
OrgDetailPage$3
0%
0/5
0%
0/2
0
OrgDetailPage$4
0%
0/2
N/A
0
OrgDetailPage$5
0%
0/3
N/A
0
OrgDetailPage$6
0%
0/3
N/A
0
OrgDetailPage$7
0%
0/7
0%
0/4
0
OrgDetailPage$8
0%
0/5
0%
0/2
0
OrgDetailPage$9
0%
0/5
0%
0/2
0
OrgDetailPage$DateDropDownOnchangeBehavior
0%
0/6
N/A
0
 
 1  0
 package jp.co.y_net.amm.page;
 2  
 
 3  
 import java.util.List;
 4  
 
 5  
 import jp.co.y_net.amm.AppSession;
 6  
 import jp.co.y_net.amm.AppSession.LoginUser;
 7  
 import jp.co.y_net.amm.common.AppStringUtils;
 8  
 import jp.co.y_net.amm.common.AppUtils;
 9  
 import jp.co.y_net.amm.common.CalcHash;
 10  
 import jp.co.y_net.amm.common.ChoiceDateElement;
 11  
 import jp.co.y_net.amm.common.ChoiceDateElement.DropDownChoiceDate;
 12  
 import jp.co.y_net.amm.common.ChoiceElement;
 13  
 import jp.co.y_net.amm.dao.Org;
 14  
 import jp.co.y_net.amm.dao.Usr;
 15  
 
 16  
 import org.apache.commons.lang.StringUtils;
 17  
 import org.apache.wicket.ajax.AjaxRequestTarget;
 18  
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 19  
 import org.apache.wicket.markup.html.basic.Label;
 20  
 import org.apache.wicket.markup.html.form.Button;
 21  
 import org.apache.wicket.markup.html.form.DropDownChoice;
 22  
 import org.apache.wicket.markup.html.form.Form;
 23  
 import org.apache.wicket.markup.html.form.PasswordTextField;
 24  
 import org.apache.wicket.markup.html.form.TextField;
 25  
 import org.apache.wicket.model.Model;
 26  
 import org.apache.wicket.model.PropertyModel;
 27  
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 28  
 
 29  
 /**
 30  
  * 機関情報詳細
 31  
  * @author k_inaba
 32  
  */
 33  
 public class OrgDetailPage extends CommonFrameA {
 34  
     private static final long serialVersionUID = 1L;
 35  
         
 36  
     /*
 37  
      * 画面入力値
 38  
      */
 39  
     public String kindValue;
 40  
     public String nameValue;
 41  
     public String adminnameValue;
 42  
     public String adminnamekanaValue;
 43  
     public String postnumValue;
 44  
     public String addressValue;
 45  
     public String telnumValue;
 46  
     public String mailValue;
 47  
     public String mail2Value; 
 48  
     public String passwordValue;
 49  
     public String password2Value;
 50  
     public String fromdateValue;
 51  
     public String todateValue;
 52  
     public String limitnumValue;
 53  
     
 54  
     /*
 55  
      * 画面の状態
 56  
      */
 57  0
     private boolean completeMod = false;
 58  0
     private boolean completeDel = false;
 59  
         
 60  
     /**
 61  
      * ログインチェック定義
 62  
      * @see jp.co.y_net.amm.page.AppPage#validateLogin()
 63  
      */
 64  
     @Override
 65  
     public boolean validateLogin() {
 66  0
         if(AppSession.get().isLogin()) {
 67  0
             if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) {
 68  0
                 return true;
 69  
             }
 70  0
             if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_機関管理者)) {
 71  0
                 return true;
 72  
             }
 73  
         }
 74  0
         return false;
 75  
     }
 76  
         
 77  0
     public OrgDetailPage(PageParameters pageParams) {
 78  
         
 79  
         /* 共通戻るリンクの設置 */
 80  0
         createCommonBackLinks();
 81  
         
 82  
         /* 画面固有の戻るボタンの設置 */
 83  0
         createBackLink(OrgMemberListPage.class, "登録会員情報管理");
 84  
         
 85  
         /* フィードバックパネルの設置 */
 86  0
         createFeedbackPanel();
 87  
         
 88  
         /* 入力フォーム */
 89  0
         final Form<Void> form  = new Form<Void>("form");
 90  0
         add(form);
 91  
         
 92  
         /* 初期表示エラーチェック ----------------------------------------------------------------------------------- */
 93  0
         form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。
 94  
         
 95  0
         final LoginUser loginUser  = AppSession.get().getLoginUser();
 96  0
         if(loginUser == null) {
 97  0
             error("ログイン情報が取得できません。");
 98  0
             return; // ----------中断
 99  
         }
 100  0
         final Integer loginUserId = loginUser.getUsrid();
 101  
         
 102  0
         String paramOrgid = pageParams.get("orgid").toString("");
 103  
         Integer targetOrgid;
 104  0
         if(StringUtils.isEmpty(paramOrgid)) {
 105  
             /*
 106  
              * パラメータ orgid が指定されていなければ、ログインユーザに紐づく機関情報を対象とする。
 107  
              *  ただし、機関管理者か、運営管理者に限る。
 108  
              */
 109  0
             if (isOrgAdmin() || isSystemAdmin()) {
 110  0
                 targetOrgid = loginUser.getOrgid();
 111  
                 
 112  0
             } else {
 113  0
                 error("パラメータ orgid がありません。");
 114  0
                 return; // ----------中断
 115  
                 
 116  
             }
 117  
         } else {
 118  0
             targetOrgid = AppUtils.toInteger(paramOrgid);
 119  
         }
 120  0
         final Org targetOrg = orgDao.getByOrgid(targetOrgid);
 121  0
         if (targetOrg == null) {
 122  0
             error("該当する登録会員情報がありません。");
 123  0
             return; // ----------中断
 124  
         }
 125  0
         if(isSystemAdmin()) {
 126  
             /* 機関管理者が他機関の情報にアクセスしてはいけない */
 127  0
             if(AppUtils.equals(loginUser.getOrgid(), targetOrg.getOrgid()) == false && isSystemAdmin() == false) {
 128  0
                 error("該当する情報を扱う権限がありません。");
 129  0
                 return; // ----------中断
 130  
             }
 131  
         }
 132  
         
 133  
         final Usr target代表者; 
 134  
         {
 135  0
             Usr cnd = new Usr();
 136  0
             cnd.setOrgid(targetOrgid);
 137  0
             cnd.setOrgrole(1); // 代表者
 138  0
             List<Usr> users = usrDao.get(cnd);
 139  0
             if(users.size() != 1) {
 140  0
                 error("代表者のデータが取得できません。");
 141  0
                 return; // ----------中断
 142  
             } else {
 143  0
                 target代表者 = users.get(0);
 144  
             }
 145  
         }
 146  
         
 147  
         
 148  0
         if(hasInputError()) return; // ----------エラーがあれば中止
 149  0
         form.setVisible(true);
 150  
 
 151  
         /* Form内の設定 ----------------------------------------------------------------------------------------------*/
 152  
         
 153  
         /* 完了メッセージ */
 154  0
         Model<String> resultMessageModel = new Model<String>() {
 155  
             @Override
 156  
             public String getObject() {
 157  0
                 if(completeMod) {
 158  0
                     return "登録会員情報を変更しました。";
 159  
                 }
 160  0
                 if(completeDel) {
 161  0
                     return "登録会員情報を削除しました。";
 162  
                 }
 163  0
                 return "";
 164  
             }
 165  
         };
 166  0
         final Label resutlMessage = new Label("resutlMessage", resultMessageModel);
 167  0
         form.add(resutlMessage);
 168  
         
 169  
         /* 組織IDの出力 */
 170  0
         form.add(new Label("orgid", Model.of(targetOrg.getOrgid())));
 171  
         
 172  
         
 173  
         /* 入力コンポーネントの設定 ----------------------------------------------------------------------------------*/
 174  
         
 175  
 //        kindValue = AppUtils.toStr(targetOrg.getKind());
 176  0
         nameValue = targetOrg.getName();
 177  
 //        adminnameValue = targetOrg.getAdminname();
 178  0
         adminnameValue = target代表者.getName();
 179  0
         adminnamekanaValue = targetOrg.getAdminnamekana();
 180  0
         postnumValue = targetOrg.getPostnum_Disp(); // ハイフン付きへ変換
 181  0
         addressValue = targetOrg.getAddress();
 182  0
         telnumValue = targetOrg.getTelnum();
 183  
 //        mailValue = targetOrg.getMail();
 184  0
         mailValue = target代表者.getLoginid();
 185  0
         mail2Value = "";
 186  0
         fromdateValue = AppUtils.toStr(targetOrg.getFromdate());
 187  0
         todateValue = AppUtils.toStr(targetOrg.getTodate());
 188  0
         limitnumValue = AppUtils.toStr(targetOrg.getLimitnum());
 189  0
         if(StringUtils.isEmpty(limitnumValue)) {
 190  0
             limitnumValue = "-1";
 191  
         }
 192  
         
 193  
         /* 会員の種類 */
 194  0
         form.add(new Label("kind", Model.of(targetOrg.getKind_Disp())));
 195  
         
 196  
         /* 団体名称 */
 197  0
         TextField<String> name = new TextField<String>("name", new PropertyModel<String>(this, "nameValue")){
 198  
             @Override
 199  
             public boolean isVisible() {
 200  0
                 if(targetOrg.isPersonalOrg()) { // 個人の場合は非表示
 201  0
                     return false;
 202  
                 }
 203  0
                 return true;
 204  
             }
 205  
         };
 206  0
         form.add(name);
 207  
         
 208  
         /* 管理者氏名 */
 209  0
         final Label thAdminname = new Label("thAdminname", new Model<String>(){
 210  
             @Override
 211  
             public String getObject() {
 212  0
                 if(targetOrg.isPersonalOrg() == false) {
 213  0
                     return "代表者氏名";
 214  
                 }
 215  0
                 return "氏名";
 216  
             }
 217  
         }){
 218  
         };
 219  0
         form.add(thAdminname);
 220  0
         TextField<String> adminname = new TextField<String>("adminname", new PropertyModel<String>(this, "adminnameValue"));
 221  0
         form.add(adminname);
 222  
         
 223  
         /* ふりがな */
 224  0
         TextField<String> adminnamekana = new TextField<String>("adminnamekana", new PropertyModel<String>(this, "adminnamekanaValue"));
 225  0
         form.add(adminnamekana);
 226  
         
 227  
         /* 連絡先郵便番号 */
 228  0
         TextField<String> postnum = new TextField<String>("postnum", new PropertyModel<String>(this, "postnumValue"));
 229  0
         form.add(postnum);
 230  
         
 231  
         /* 連絡先住所 */
 232  0
         TextField<String> address = new TextField<String>("address", new PropertyModel<String>(this, "addressValue"));
 233  0
         form.add(address);
 234  
         
 235  
         /* 連絡先電話番号 */
 236  0
         TextField<String> telnum = new TextField<String>("telnum", new PropertyModel<String>(this, "telnumValue"));
 237  0
         form.add(telnum);
 238  
         
 239  
         /* 連絡先メールアドレス */
 240  0
         TextField<String> mail = new TextField<String>("mail", new PropertyModel<String>(this, "mailValue"));
 241  0
         form.add(mail);
 242  
         
 243  
         /* 連絡先メールアドレス確認用 */
 244  0
         TextField<String> mail2 = new TextField<String>("mail2", new PropertyModel<String>(this, "mail2Value"));
 245  0
         form.add(mail2);
 246  
         
 247  
         /* パスワード */
 248  0
         final PasswordTextField password = new PasswordTextField("password", new PropertyModel<String>(this, "passwordValue")){
 249  
             @Override
 250  
             public boolean isVisible() {
 251  
                 /* ログインユーザ自身の情報でなければ画面から変更できない */
 252  0
                 return isLoginUser(target代表者);
 253  
             }
 254  
         };
 255  0
         password.setRequired(false);
 256  0
         form.add(password);
 257  
         
 258  
         /* パスワード確認用 */
 259  0
         PasswordTextField password2 = new PasswordTextField("password2", new PropertyModel<String>(this, "password2Value")){
 260  
             @Override
 261  
             public boolean isVisible() {
 262  
                 /* ログインユーザ自身の情報でなければ画面から変更できない */
 263  0
                 return isLoginUser(target代表者);
 264  
             }
 265  
         };
 266  0
         password2.setRequired(false);
 267  0
         form.add(password2);
 268  
         
 269  
         /* 利用可能期間 ---------------------------------------------------------------------------------------  */
 270  
         
 271  0
         List<ChoiceDateElement> choiceY = ChoiceDateElement.createChoiceY(fromdateValue, todateValue);
 272  0
         List<ChoiceDateElement> choiceM = ChoiceDateElement.createChoiceM();
 273  0
         List<ChoiceDateElement> choiceD = ChoiceDateElement.createChoiceD();
 274  
         
 275  0
         final Model<ChoiceDateElement> fromdateYModel = ChoiceDateElement.createModelY(choiceY, fromdateValue);
 276  0
         final Model<ChoiceDateElement> fromdateMModel = ChoiceDateElement.createModelM(choiceM, fromdateValue);
 277  0
         final Model<ChoiceDateElement> fromdateDModel = ChoiceDateElement.createModelD(choiceD, fromdateValue);
 278  
         
 279  0
         final Model<ChoiceDateElement> todateYModel = ChoiceDateElement.createModelY(choiceY, todateValue);
 280  0
         final Model<ChoiceDateElement> todateMModel = ChoiceDateElement.createModelM(choiceM, todateValue);
 281  0
         final Model<ChoiceDateElement> todateDModel = ChoiceDateElement.createModelD(choiceD, todateValue);
 282  
         
 283  0
         final DropDownChoiceDate fromdateY = new DropDownChoiceDate("fromdateY", fromdateYModel, choiceY);
 284  0
         form.add(fromdateY);
 285  0
         final DropDownChoiceDate fromdateM = new DropDownChoiceDate("fromdateM", fromdateMModel, choiceM);
 286  0
         form.add(fromdateM);
 287  0
         final DropDownChoiceDate fromdateD = new DropDownChoiceDate("fromdateD", fromdateDModel, choiceD);
 288  0
         form.add(fromdateD);
 289  
         
 290  0
         final DropDownChoiceDate todateY = new DropDownChoiceDate("todateY", todateYModel, choiceY);
 291  0
         form.add(todateY);
 292  0
         final DropDownChoiceDate todateM = new DropDownChoiceDate("todateM", todateMModel, choiceM);
 293  0
         form.add(todateM);
 294  0
         final DropDownChoiceDate todateD = new DropDownChoiceDate("todateD", todateDModel, choiceD);
 295  0
         form.add(todateD);
 296  
         
 297  0
         if(isSystemAdmin() == false) { // 運営管理者にのみ表示する編集項目
 298  0
             fromdateY.setVisible(false); 
 299  0
             fromdateM.setVisible(false);
 300  0
             fromdateD.setVisible(false);
 301  0
             todateY.setVisible(false);
 302  0
             todateM.setVisible(false);
 303  0
             todateD.setVisible(false);
 304  
         }
 305  
         /* 即時日付チェック */
 306  0
         final Label quickMsgFromto = new Label("quickMsgFromto", new Model<String>(){
 307  
             @Override
 308  
             public String getObject() {
 309  
 //                fromdateY.getModelObject().getId()
 310  0
                 String tmpFromdate = ChoiceDateElement.日付取得(fromdateYModel, fromdateMModel, fromdateDModel);
 311  0
                 String tmpTodate = ChoiceDateElement.日付取得(todateYModel, todateMModel, todateDModel);
 312  
                 
 313  0
                 if(validFromToDate(tmpFromdate) == false || validFromToDate(tmpTodate) == false) {
 314  0
                     return "日付が正しくありません。";
 315  
                 } else {
 316  0
                     return "";
 317  
                 }
 318  
             }
 319  
         });
 320  0
         quickMsgFromto.setOutputMarkupId(true);
 321  0
         form.add(quickMsgFromto);
 322  
         
 323  
         /* ドロップダウン変更時の挙動を設定 */
 324  0
         fromdateY.add(new DateDropDownOnchangeBehavior(quickMsgFromto));
 325  0
         fromdateM.add(new DateDropDownOnchangeBehavior(quickMsgFromto));
 326  0
         fromdateD.add(new DateDropDownOnchangeBehavior(quickMsgFromto));
 327  0
         todateY.add(new DateDropDownOnchangeBehavior(quickMsgFromto));
 328  0
         todateM.add(new DateDropDownOnchangeBehavior(quickMsgFromto));
 329  0
         todateD.add(new DateDropDownOnchangeBehavior(quickMsgFromto));     
 330  
         
 331  
         /* 利用可能期間 ここまで ----------------------------------------------------------------------------------  */
 332  
         
 333  
         /* 登録可能会員数 */
 334  0
         List<ChoiceElement> choiceLimitnum = Org.createLimitChices(limitnumValue);
 335  0
         final Model<ChoiceElement> limitnumModel = new Model<ChoiceElement>();
 336  0
         ChoiceElement.setDropDownList(limitnumModel, choiceLimitnum, String.valueOf(limitnumValue)); // 初期値設定
 337  
 
 338  0
         final DropDownChoice<ChoiceElement> limitnum = new DropDownChoice<ChoiceElement>(
 339  0
                 "limitnum", limitnumModel, choiceLimitnum, new ChoiceElement.Renderer());
 340  0
         form.add(limitnum);
 341  
         
 342  0
         if(isSystemAdmin() == false) { // 運営管理者にのみ表示する編集項目
 343  0
             limitnum.setVisible(false);
 344  
         }
 345  
         
 346  
         
 347  
         /* 組織「運営管理」を編集する場合の表示制御 ------------------------------------------------------------------*/
 348  0
         if(targetOrg.getKind().equals(Org.KIND_運営管理)) {
 349  
             /* 次の項目を非表示 */
 350  0
             adminnamekana.setVisible(false); // ふりがな
 351  0
             postnum.setVisible(false); // 連絡先郵便番号
 352  0
             address.setVisible(false); // 連絡先住所
 353  0
             telnum.setVisible(false); // 連絡先電話番号 
 354  0
             limitnum.setVisible(false); // 登録可能会員数
 355  
             /* 利用可能期間 */
 356  0
             fromdateY.setVisible(false); 
 357  0
             fromdateM.setVisible(false);
 358  0
             fromdateD.setVisible(false);
 359  0
             todateY.setVisible(false);
 360  0
             todateM.setVisible(false);
 361  0
             todateD.setVisible(false);
 362  
         }
 363  
         
 364  
         /* 表示コンポーネントの設定 ----------------------------------------------------------------------------------*/
 365  
         
 366  0
         form.add(new Label("thLoginid", new Model<String>(){
 367  
             @Override
 368  
             public String getObject() {
 369  0
                 if(targetOrg.getKind().equals(Org.KIND_運営管理) == false) {
 370  0
                     return "連絡先メールアドレス";
 371  
                 } else {
 372  0
                     return "ログインID";
 373  
                 }
 374  
             }
 375  
         }));
 376  0
         form.add(new Label("thLoginid2", new Model<String>(){
 377  
             @Override
 378  
             public String getObject() {
 379  0
                 if(targetOrg.getKind().equals(Org.KIND_運営管理) == false) {
 380  0
                     return "連絡先メールアドレス確認用";
 381  
                 } else {
 382  0
                     return "ログインID確認用";
 383  
                 }
 384  
             }
 385  
         }));
 386  
         
 387  
         /* 代表者によるメールアドレス変更のメッセージ */
 388  0
         form.add(new Label("msgpwreset", "※ メールアドレスを変更するとパスワードがリセットされます。") {
 389  
             @Override
 390  
             public boolean isVisible() {
 391  
                 /* パスワード欄から変更できない場合はパスワードリセット */
 392  0
                 return password.isVisible() == false;
 393  
             }
 394  
         });
 395  
         
 396  
         
 397  
         /* パスワード情報 */
 398  0
         PasswordInfoPanel passwordInfoPanel = new PasswordInfoPanel("PasswordInfoPanel", 
 399  0
                 target代表者,
 400  0
                 isSystemAdmin());
 401  0
         form.add(passwordInfoPanel);
 402  
         
 403  
         
 404  
         /* 処理ボタン定義 --------------------------------------------------------------------------------------------*/
 405  
 
 406  
         /*
 407  
          * 【更新する】
 408  
          */
 409  0
         Button btnSubmitMod = new ConfirmAjaxButton("btnSubmitMod") {
 410  
             @Override
 411  
             String getConfirmMessage() {
 412  0
                 return "更新します。";
 413  
             }
 414  
             @Override
 415  
             boolean executeBefore() {
 416  
                 /* モデル(PropertyModel以外)から値取得 */
 417  0
                 fromdateValue = ChoiceDateElement.日付取得(fromdateYModel, fromdateMModel, fromdateDModel);
 418  0
                 todateValue = ChoiceDateElement.日付取得(todateYModel, todateMModel, todateDModel);
 419  0
                 if(limitnumModel.getObject() == null) {
 420  0
                     limitnumValue = String.valueOf(Org.LIMITNUM_未指定);
 421  0
                 } else {
 422  0
                     limitnumValue = limitnumModel.getObject().getId();
 423  
                 }
 424  
                 /* 入力値変換 */
 425  
 //                kindValue = AppStringUtils.trim(kindModel);
 426  0
                 nameValue = AppStringUtils.trim(nameValue);
 427  0
                 adminnameValue = AppStringUtils.trim(adminnameValue);
 428  0
                 adminnamekanaValue = AppStringUtils.trim(adminnamekanaValue);
 429  0
                 postnumValue = AppStringUtils.trimHalf(postnumValue);
 430  0
                 postnumValue = postnumValue.replaceAll("-", "");// 郵便番号からハイフン除去
 431  0
                 addressValue = AppStringUtils.trim(addressValue);
 432  0
                 telnumValue = AppStringUtils.trimHalf(telnumValue);
 433  0
                 mailValue = AppStringUtils.trimHalf(mailValue);
 434  0
                 mail2Value = AppStringUtils.trimHalf(mail2Value);
 435  0
                 passwordValue = AppStringUtils.trimHalf(passwordValue);
 436  0
                 password2Value = AppStringUtils.trimHalf(password2Value);
 437  0
                 if(isSystemAdmin()) {
 438  
                     
 439  0
                     fromdateValue = AppStringUtils.trimHalf(fromdateValue);
 440  0
                     todateValue = AppStringUtils.trimHalf(todateValue);
 441  
                     
 442  0
                     limitnumValue = AppStringUtils.trimHalf(limitnumValue);
 443  
                 }
 444  
                 
 445  0
                 boolean isメールアドレスが変更されている = (mailValue.equals(target代表者.getLoginid()) == false);
 446  0
                 boolean isパスワード欄が入力されている = (StringUtils.isEmpty(passwordValue) == false);
 447  
                 
 448  
                 /* 入力値検査 */
 449  
 //                validItemNum(kindValue, "会員の種類", 1, 1);
 450  0
                 validItem(nameValue, "機関・団体名称", 0, 512);
 451  0
                 validItem(adminnameValue, thAdminname.getDefaultModelObjectAsString(), 1, 512); // 代表者氏名 or 氏名
 452  
                 
 453  
                 
 454  0
                 if(targetOrg.getKind().equals(Org.KIND_運営管理)) { 
 455  
                     /* 組織「運営管理」を編集する場合のチェック */
 456  0
                     validItem(mailValue, "ログインID確認用", 1, 256);
 457  
                     
 458  0
                 } else {
 459  
                     /* 通常のチェック */
 460  0
                     validItem(adminnamekanaValue, "ふりがな", 1, 512);
 461  0
                     validItemNum(postnumValue, "連絡先郵便番号", 7, 7);
 462  0
                     validItem(addressValue, "連絡先住所", 1, 1024);
 463  0
                     validItemTel(telnumValue, "連絡先電話番号", 1, 32);
 464  0
                     validItemMail(mailValue, "連絡先メールアドレス");
 465  0
                     if(isSystemAdmin()) {
 466  0
                         validItemNum(limitnumValue, "登録可能会員数", 0, 4);
 467  
                     }
 468  0
                     if(hasInputError()) return false; // ここまででエラーチェック
 469  
                     
 470  0
                     if(isSystemAdmin() && validFromToDate(fromdateValue) == false) {
 471  0
                         error("利用可能期間(開始)が日付として正しくありません。");
 472  
                     }
 473  0
                     if(isSystemAdmin() && validFromToDate(todateValue) == false) {
 474  0
                         error("利用可能期間(終了)が日付として正しくありません。");
 475  
                     }
 476  
                 }
 477  
 
 478  0
                 if(hasInputError()) return false; // ここまででエラーチェック
 479  
 
 480  0
                 if(isメールアドレスが変更されている) {
 481  
 
 482  0
                     if(targetOrg.getKind().equals(Org.KIND_運営管理)) { 
 483  
                         /* 組織「運営管理」を編集する場合のチェック */
 484  0
                         validItem(mail2Value, "ログインID確認用", 1, 256);
 485  0
                         if(hasInputError()) return false; // ここまででエラーチェック
 486  
                         
 487  0
                         if(mailValue.equals(mail2Value) == false) {
 488  0
                             error("ログインIDが一致しません。");
 489  
                         }
 490  0
                         if(mailAddressCheck.exist(mailValue)) {
 491  0
                             error("このログインIDは既に使用されています。");
 492  
                         }
 493  
                         
 494  0
                     } else {
 495  
                         /* 通常のチェック */
 496  0
                         validItemMail(mail2Value, "メールアドレス確認用");
 497  
                         
 498  0
                         if(hasInputError()) return false; // ここまででエラーチェック
 499  
                         
 500  0
                         if(mailValue.equals(mail2Value) == false) {
 501  0
                             error("メールアドレスが一致しません。");
 502  
                         }
 503  0
                         if(mailAddressCheck.exist(mailValue)) {
 504  0
                             error("このメールアドレスは既に使用されています。");
 505  
                         }
 506  
                     }
 507  
 
 508  
                 }
 509  
 
 510  0
                 if (isパスワード欄が入力されている) {
 511  0
                     validItemAscii(passwordValue, "パスワード", 8, 16);
 512  0
                     validItemAscii(password2Value, "パスワード確認用", 8, 16);
 513  
                 }
 514  
                 
 515  0
                 if(hasInputError()) return false; // ここまででエラーチェック
 516  
                 
 517  0
                 if(isパスワード欄が入力されている) {
 518  0
                     if(passwordValue.equals(password2Value) == false) {
 519  0
                         error("パスワードが一致しません。");
 520  
                     }
 521  
                 }
 522  0
                 if(hasInputError()) return false; // ここまででエラーチェック
 523  
                 
 524  
                 /*
 525  
                  * パスワードの変更について
 526  
                  *  メールアドレスが変更されている場合は、パスワードの変更が必須である。
 527  
                  *  パスワード欄が入力できるのは変更対象の情報が、ログインユーザ本人であるときのみ。
 528  
                  *  パスワード欄が入力できない場合(代表者や運営管理者による変更)は、パスワードリセットを実施する。
 529  
                  */
 530  
 //                boolean パスワードリセットが必要 = false;
 531  0
                 if(isメールアドレスが変更されている) {
 532  
                     
 533  0
                     if(isLoginUser(target代表者) ) {
 534  
                         /* 変更対象の情報が、ログインユーザ本人 */
 535  
                         
 536  0
                         if(isパスワード欄が入力されている) {
 537  
                             // 正しい
 538  
                         } else {
 539  0
                             error("メールアドレスを変更する場合は、パスワードも設定してください。");
 540  
                         }
 541  
                         
 542  0
                     } else if(isSystemAdmin() ) {
 543  
                         /* パスワード欄が入力できない場合(代表者や運営管理者による変更) */
 544  
 //                        パスワードリセットが必要 = true;
 545  
                     } else {
 546  
                         /* 通常想定されない条件 */
 547  0
                         error("メールアドレスを変更することはできません。");
 548  
                     }
 549  
                 }
 550  
 
 551  
                 
 552  0
                 if(hasInputError()) return false; // ここまででエラーチェック
 553  
                 
 554  0
                 return true;
 555  
             }
 556  
             @Override
 557  
             void executeAfter(AjaxRequestTarget target) {
 558  
                 
 559  
                 /* データアクセス 代表者による登録会員情報の変更  */
 560  
                 
 561  
 //                targetOrg.setKind(Integer.parseInt(kindValue));
 562  0
                 targetOrg.setName(nameValue);
 563  0
                 targetOrg.setAdminname(adminnameValue);
 564  0
                 targetOrg.setAdminnamekana(adminnamekanaValue);
 565  0
                 targetOrg.setPostnum(postnumValue);
 566  0
                 targetOrg.setTelnum(telnumValue);
 567  0
                 targetOrg.setAddress(addressValue);
 568  0
                 targetOrg.setMail(mailValue);
 569  0
                 if(isSystemAdmin()) {
 570  0
                     if(StringUtils.isEmpty(fromdateValue) == false) {
 571  0
                         int i = AppUtils.toInteger(fromdateValue);
 572  0
                         if(i == 0) {
 573  0
                             i = -1; // 未指定は「-1」とする。
 574  
                         }
 575  0
                         targetOrg.setFromdate(i);
 576  
                     }
 577  0
                     if(StringUtils.isEmpty(todateValue) == false) {
 578  0
                         int i = AppUtils.toInteger(todateValue);
 579  0
                         if(i == 0) {
 580  0
                             i = -1; // 未指定は「-1」とする。
 581  
                         }
 582  0
                         targetOrg.setTodate(i);                        
 583  
                     }
 584  0
                     if(StringUtils.isEmpty(limitnumValue) == false) {
 585  0
                         targetOrg.setLimitnum(AppUtils.toInteger(limitnumValue));
 586  
                     }
 587  
                 }
 588  
                 
 589  0
                 orgDao.update(targetOrg, loginUserId); // 【更新処理】
 590  
                 
 591  
                 
 592  
                 // 代表者の氏名、メールアドレス、パスワードの変更についてユーザー情報も変更する。
 593  
                 
 594  0
                 boolean isメールアドレスが変更されている = (mailValue.equals(target代表者.getLoginid()) == false);
 595  0
                 boolean isパスワード欄が入力されている = (StringUtils.isEmpty(passwordValue) == false);
 596  
                 
 597  0
                 if(isメールアドレスが変更されている){
 598  0
                     target代表者.setLoginid(mailValue);
 599  
                 }
 600  0
                 if(isパスワード欄が入力されている) {
 601  0
                     String pwhash = CalcHash.passowrdHash(passwordValue, target代表者.getLoginid());
 602  0
                     target代表者.setPwhash(pwhash);
 603  0
                     target代表者.setModpwdate(AppUtils.createNowLong()); // パスワード変更日時
 604  
                 }
 605  
                 
 606  0
                 if(isメールアドレスが変更されている 
 607  0
                         && isパスワード欄が入力されている == false) {
 608  
                     /* 運営管理者によるメールアドレスだけの変更 */
 609  0
                     target代表者.setPwhash("");
 610  0
                     target代表者.setModpwdate(AppUtils.createNowLong()); // パスワード変更日時
 611  
                 }
 612  0
                 target代表者.setName(adminnameValue);
 613  
                 
 614  0
                 usrDao.update(target代表者, loginUserId); // 更新処理
 615  
                 
 616  
                 /* 本人以外がメールアドレスを変更していたらパスワードリセット */
 617  0
                 boolean パスワードリセットが必要 = false;
 618  0
                 if(isメールアドレスが変更されている) {
 619  0
                     if(isSystemAdmin() ) {
 620  
                         /* パスワード欄が入力できない場合(代表者や運営管理者による変更) */
 621  0
                         パスワードリセットが必要 = true;
 622  
                     }
 623  
                 }
 624  0
                 if(パスワードリセットが必要) {
 625  0
                     doパスワードリセット(target代表者.getUsrid(), passwordTicketManager, mailValue);
 626  
                 }
 627  
                 
 628  
                 /* TODO ログインユーザのメールアドレスかパスワードが変更されたら、自動ログアウトさせる */
 629  
                 
 630  
                 /*
 631  
                  * 状態遷移
 632  
                  */
 633  0
                 completeMod = true;
 634  
                 
 635  
                 /* 画面コンポーネントを更新する */
 636  0
                 target.add(form);
 637  0
             }
 638  
 
 639  
             @Override
 640  
             public boolean isVisible() {
 641  
                 /* 完了後の状態ならボタンを表示しない */
 642  0
                 return completeMod == false && completeDel == false;
 643  
             }
 644  
         };
 645  0
         form.add(btnSubmitMod);
 646  
         
 647  
         
 648  
         /*
 649  
          * 【削除する】
 650  
          */
 651  0
         Button btnSubmitDel = new ConfirmAjaxButton("btnSubmitDel") {
 652  
             @Override
 653  
             String getConfirmMessage() {
 654  0
                 return "削除します。";
 655  
             }
 656  
             @Override
 657  
             String getConfirmMessageStrong() {
 658  0
                 return "登録情報を削除すると、機関・団体の情報が削除され、所属する会員もすべて退会します。";
 659  
             }
 660  
             @Override
 661  
             void executeAfter(AjaxRequestTarget target) {
 662  
                 
 663  
                 /* 
 664  
                  * 運営管理者による機関情報の削除
 665  
                  * ・所属する会員を退会
 666  
                  * ・組織を論理削除
 667  
                  */
 668  0
                 Usr cndUser = new Usr();
 669  0
                 cndUser.setOrgid(targetOrg.getOrgid());
 670  0
                 List<Usr> members = usrDao.get(cndUser);
 671  0
                 for(Usr member: members) {
 672  0
                     if(Usr.STATUS_退会 != member.getStatus()) {
 673  0
                         member.退会処理();
 674  0
                         usrDao.update(member, loginUserId); // 更新処理
 675  
                     }
 676  
                 }
 677  
                 /* 外部APIに退会者のログインIDを通知 */
 678  0
                 AppUtils.callDeleteNotice(members);
 679  
                 
 680  0
                 orgDao.removeLogical(targetOrg, loginUserId); // 論理削除
 681  
                 
 682  
                 /* 状態遷移 */
 683  0
                 completeDel = true;
 684  
                 
 685  
                 /* 画面コンポーネントを更新する */
 686  0
                 target.add(form);
 687  0
             }
 688  
             @Override
 689  
             public boolean isVisible() {
 690  
                 /* 運営管理者以外には表示しない */
 691  0
                 if(isSystemAdmin() == false) {
 692  0
                     return false;
 693  
                 }
 694  0
                 if(targetOrg.getKind().equals(Org.KIND_運営管理)) { 
 695  
                     /* 組織「運営管理」は削除しない */
 696  0
                     return false;
 697  
                 }
 698  
                 /* 完了後の状態ならボタンを表示しない */
 699  0
                 return completeMod == false && completeDel == false;
 700  
             }
 701  
         };
 702  0
         form.add(btnSubmitDel);
 703  0
     }
 704  
 
 705  
 
 706  
     /**
 707  
      * 利用期間の日付ドロップダウンが変更された時の振る舞い
 708  
      */
 709  
     private class DateDropDownOnchangeBehavior extends AjaxFormComponentUpdatingBehavior {
 710  
         private final Label quickMsgFromto;
 711  0
         private DateDropDownOnchangeBehavior(Label quickMsgFromto) {
 712  0
             super("onchange");
 713  0
             this.quickMsgFromto = quickMsgFromto;
 714  0
         }
 715  
         @Override
 716  
         protected void onUpdate(AjaxRequestTarget target) {
 717  0
             target.add(quickMsgFromto);
 718  0
         }
 719  
     }
 720  
 }