Coverage Report - jp.co.y_net.amm.page.OrgEntryDetailPage
 
Classes in this File Line Coverage Branch Coverage Complexity
OrgEntryDetailPage
0%
0/91
0%
0/22
0
OrgEntryDetailPage$1
0%
0/7
0%
0/4
0
OrgEntryDetailPage$2
0%
0/5
0%
0/2
0
OrgEntryDetailPage$3
0%
0/5
0%
0/2
0
OrgEntryDetailPage$4
0%
0/2
N/A
0
OrgEntryDetailPage$5
0%
0/37
0%
0/14
0
OrgEntryDetailPage$6
0%
0/24
0%
0/10
0
OrgEntryDetailPage$7
0%
0/3
N/A
0
OrgEntryDetailPage$8
0%
0/22
0%
0/4
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.AppLogger;
 8  
 import jp.co.y_net.amm.common.AppSendMail;
 9  
 import jp.co.y_net.amm.common.AppSendMail.MailSetting;
 10  
 import jp.co.y_net.amm.common.AppStringUtils;
 11  
 import jp.co.y_net.amm.common.AppUtils;
 12  
 import jp.co.y_net.amm.common.ResourceReader;
 13  
 import jp.co.y_net.amm.dao.AppDef;
 14  
 import jp.co.y_net.amm.dao.Org;
 15  
 import jp.co.y_net.amm.dao.Usr;
 16  
 
 17  
 import org.apache.wicket.ajax.AjaxRequestTarget;
 18  
 import org.apache.wicket.markup.html.WebMarkupContainer;
 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.Form;
 22  
 import org.apache.wicket.markup.html.form.TextArea;
 23  
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 24  
 import org.apache.wicket.model.Model;
 25  
 import org.apache.wicket.model.PropertyModel;
 26  
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 27  
 
 28  
 public class OrgEntryDetailPage extends CommonFrameA {
 29  
         private static final long serialVersionUID = 1L;
 30  
 
 31  
 
 32  
     /*
 33  
      * 画面入力値
 34  
      */
 35  
         public String noteValue;
 36  
         /*
 37  
          * 画面の状態
 38  
          */
 39  0
         private boolean completeA = false;
 40  0
         private boolean completeR = false;
 41  0
         private boolean complete = false;
 42  
         
 43  
         /**
 44  
          * ログインチェック定義
 45  
          * @see jp.co.y_net.amm.page.AppPage#validateLogin()
 46  
          */
 47  
         @Override
 48  
         public boolean validateLogin() {
 49  0
             if(AppSession.get().isLogin()) {
 50  0
                 if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) {
 51  0
                     return true;
 52  
                 }
 53  
             }
 54  0
             return false;
 55  
         }
 56  
         
 57  0
     public OrgEntryDetailPage(final PageParameters pageParams) {
 58  
         
 59  
         /* 共通戻るリンクの設置 */
 60  0
         createCommonBackLinks();
 61  
 
 62  
         /* 画面固有の戻るボタンの設置 */
 63  0
         createBackLink(OrgEntryListPage.class, "申請一覧");
 64  
         
 65  
         /* フィードバックパネルの設置 */
 66  0
         createFeedbackPanel();
 67  
         
 68  0
         final Form<Void> form  = new Form<Void>("form");
 69  0
         form.setOutputMarkupId(true);
 70  0
         add(form);
 71  
 
 72  
         
 73  
         /* 初期表示エラーチェック ----------------------------------------------------------------------------------- */
 74  0
         form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。
 75  
         
 76  0
         final LoginUser loginUser  = AppSession.get().getLoginUser();
 77  0
         if(loginUser == null) {
 78  0
             error("ログイン情報が取得できません。");
 79  0
             return; // ----------中断
 80  
         }
 81  0
         final Integer loginUserId = loginUser.getUsrid();
 82  
         
 83  0
         String orgid = pageParams.get("orgid").toString();
 84  0
         validItemNum(orgid, "パラメータorgid", 1, Integer.MAX_VALUE);
 85  0
         if(hasInputError()) return; // ----------エラーがあれば中止
 86  
         
 87  0
         Integer iOrgid = Integer.parseInt(orgid);
 88  
         
 89  0
         Org cond = new Org();
 90  0
         cond.setOrgid(iOrgid);
 91  0
         List<Org> orgs = orgDao.get(cond);
 92  0
         if(orgs.size() != 1) {
 93  0
             error("パラメータorgidが不正です。");
 94  
         }
 95  
         
 96  0
         if(hasInputError()) return; // ----------エラーがあれば中止
 97  
         
 98  0
         form.setVisible(true); 
 99  
         /* Form内の設定 ----------------------------------------------------------------------------------------------*/
 100  
         
 101  0
         final Org org = orgs.get(0);
 102  
         
 103  
         /* 状態に応じて初期表示を変更 */
 104  0
         if(org.getStatus().equals(Org.STATUS_承認済み)) {
 105  0
             error("すでに承認されています。");
 106  0
             complete = true;
 107  
         }
 108  0
         if(org.getStatus().equals(Org.STATUS_本登録済み)) {
 109  0
             error("すでに登録が完了しています。");
 110  0
             complete = true;
 111  
         }
 112  0
         if(org.getStatus().equals(Org.STATUS_拒否済み)) {
 113  0
             error("すでに拒否されています。");
 114  0
             complete = true;
 115  
         }
 116  
         
 117  
                 
 118  
         /* 完了メッセージ */
 119  0
         Model<String> resultMessageModel = new Model<String>() {
 120  
             @Override
 121  
             public String getObject() {
 122  0
                 if(completeA) {
 123  0
                     return "承認しました。連絡先メールアドレスへ申請内容承認メールを送りました。";
 124  
                 }
 125  0
                 if(completeR) {
 126  0
                     return "拒否しました。連絡先メールアドレスへ申請内容拒否メールを送りました。";
 127  
                 }
 128  0
                 return "";
 129  
             }
 130  
         };
 131  0
         final Label resutlMessage = new Label("resutlMessage", resultMessageModel);
 132  0
         form.add(resutlMessage);
 133  
         
 134  
         /* 出力コンポーネントの設定 ----------------------------------------------------------------------------------*/
 135  0
         form.add(new Label("kind", Model.of(org.getKind_Disp())));
 136  0
         Label name = new Label("name", Model.of(org.getName())){
 137  
             @Override
 138  
             public boolean isVisible() {
 139  0
                 if(org.isPersonalOrg()) { // 個人の場合は非表示
 140  0
                     return false;
 141  
                 }
 142  0
                 return true;
 143  
             }
 144  
         };
 145  0
         form.add(name);
 146  0
         form.add(new Label("adminname", Model.of(org.getAdminname())));
 147  0
         form.add(new Label("adminnamekana", Model.of(org.getAdminnamekana())));
 148  0
         form.add(new Label("postnum", Model.of(org.getPostnum_Disp())));
 149  0
         form.add(new Label("address", Model.of(org.getAddress())));
 150  0
         form.add(new Label("telnum", Model.of(org.getTelnum())));
 151  0
         form.add(new Label("mail", Model.of(org.getMail())));
 152  
         
 153  0
         noteValue = org.getNote();
 154  0
         TextArea<String> note = new TextArea<String>("note", new PropertyModel<String>(this, "noteValue"));
 155  0
         form.add(note);
 156  
         
 157  
         
 158  0
         Label thAdminname = new Label("thAdminname", new Model<String>(){
 159  
             @Override
 160  
             public String getObject() {
 161  0
                 if(org.isPersonalOrg() == false) {
 162  0
                     return "担当者";
 163  
                 }
 164  0
                 return "氏名";
 165  
             }
 166  
         }){
 167  
         };
 168  0
         form.add(thAdminname);
 169  
         
 170  0
         final Button btnSubmitA = new ConfirmAjaxButton("btnSubmitA"){
 171  
             @Override
 172  
             String getConfirmMessage() {
 173  0
                 return "承認します";
 174  
             }
 175  
             @Override
 176  
             boolean executeBefore() {
 177  
                 /* 入力値変換 */
 178  
                 // なし
 179  
                 
 180  
                 /* 入力値チェック */
 181  
                 // なし
 182  
                 
 183  
                 /*
 184  
                  *  この時点でもう一度メールアドレスのチェックが必要。
 185  
                  *  (申請中に別の申請が通過してユーザが作成されている可能性を考慮)
 186  
                  */
 187  0
                 if(mailAddressCheck.existWithoutOrg(org.getAddress())) {
 188  0
                     error("このメールアドレスは既に使用されています。");
 189  
                 }
 190  
                 
 191  0
                 if(hasInputError()) return false; // ここまででエラーチェック
 192  
                 
 193  0
                 return true;
 194  
             }
 195  
             @Override
 196  
             void executeAfter(AjaxRequestTarget target) {
 197  
                 /* データアクセス 新規申請承認 */
 198  
                 
 199  0
                 org.setStatus(Org.STATUS_承認済み);
 200  0
                 org.setApprovaldate(AppUtils.createNowLong());
 201  0
                 orgDao.update(org, loginUserId); // 【更新実施】
 202  
                 
 203  0
                 Usr usr = new Usr();
 204  0
                 usr.setLoginid(org.getMail());
 205  0
                 usr.setName(org.getAdminname());
 206  0
                 usr.setKind(Usr.KIND_機関管理者);
 207  0
                 usr.setOrgid(org.getOrgid());
 208  0
                 usr.setOrgrole(Usr.ROLE_管理者);
 209  0
                 usr.setStoplogin(AppDef.FLASE);
 210  0
                 usr.setStatus(Usr.STATUS_仮登録); // 仮登録
 211  0
                 usr.setLoginerrorcount(0);
 212  0
                 usrDao.add(usr, loginUserId); // 【更新実施】
 213  
                 
 214  
                 /* 共通機能:パスワード登録チケット発行 からチケットを取得する(申請者のユーザIDをキーとする)*/
 215  0
                 String random = passwordTicketManager.execute新規パスワード発行(usr.getUsrid());
 216  
 
 217  
                 /* 申請内容承認メール */
 218  0
                 MailSetting setting = new MailSetting();
 219  0
                 setting.setTemplate(ResourceReader.getText("message/mail.org.approval"));
 220  0
                 setting.setMailTo(org.getMail());
 221  0
                 setting.replace("機関名称", org.getName());
 222  0
                 setting.replace("申請者氏名", org.getAdminname());
 223  0
                 String 本登録URL = ResourceReader.getStringQuick("urlroot") + "entrypassword?value=" + random;
 224  0
                 setting.replace("本登録URL", 本登録URL);
 225  0
                 boolean sendmailrsult = AppSendMail.send(setting);
 226  0
                 if(sendmailrsult == false) {
 227  0
                     error("メールの送信に失敗しました。");
 228  
                 }
 229  
                 
 230  
                 /* テスト自動化対応 */
 231  0
                 if (AppLogger.isDebug()) {
 232  
                     //info("メールに記載したURL【" + 本登録URL + "】");
 233  0
                     addDebugUrl(本登録URL);
 234  
                 }
 235  
                 
 236  
                 
 237  
                 /* 完了状態へ移行 */
 238  0
                 completeA = true;
 239  
                 
 240  
                 /* コンポーネント更新 */
 241  0
                 target.add(form);
 242  0
             }
 243  
             @Override
 244  
             public boolean isVisible() {
 245  
                 /* 完了後の状態ならボタンを表示しない */
 246  0
                 return completeA == false && completeR == false && complete== false;
 247  
             }
 248  
         };
 249  0
         form.add(btnSubmitA);
 250  
         
 251  0
         final Button btnSubmitR = new ConfirmAjaxButton("btnSubmitR"){
 252  
             @Override
 253  
             String getConfirmMessage() {
 254  0
                 return "拒否します";
 255  
             }
 256  
             @Override
 257  
             boolean executeBefore() {
 258  
                 /* 入力値変換 */
 259  0
                 noteValue = AppStringUtils.trim(noteValue);
 260  
                 
 261  
                 /* 入力値チェック */
 262  0
                 validItem(noteValue, "拒否理由", 1, 5000);
 263  
                 
 264  0
                 if(hasInputError()) return false; // ここまででエラーチェック
 265  
                 
 266  0
                 return true;
 267  
             }
 268  
             @Override
 269  
             void executeAfter(AjaxRequestTarget target) {
 270  
                 /* データアクセス 新規機関申請拒否 */
 271  0
                 org.setStatus(Org.STATUS_拒否済み);
 272  0
                 org.setRejectdate(AppUtils.createNowLong());
 273  0
                 org.setNote(noteValue);
 274  0
                 orgDao.update(org, loginUserId); // 【更新実施】
 275  
                 
 276  
                 
 277  
                 /* 申請内容拒否メール */
 278  0
                 MailSetting setting = new MailSetting();
 279  0
                 setting.setTemplate(ResourceReader.getText("message/mail.org.reject"));
 280  0
                 setting.setMailTo(org.getMail());
 281  0
                 setting.replace("機関名称", org.getName());
 282  0
                 setting.replace("申請者氏名", org.getAdminname());
 283  0
                 setting.replace("否認理由", noteValue);
 284  0
                 boolean sendmailrsult = AppSendMail.send(setting);
 285  0
                 if(sendmailrsult == false) {
 286  0
                     error("メールの送信に失敗しました。");
 287  
                 }
 288  
                 
 289  
                 /* 完了状態へ移行 */
 290  0
                 completeR = true;
 291  
                 
 292  
                 /* コンポーネント更新 */
 293  0
                 target.add(form);
 294  0
             }
 295  
             @Override
 296  
             public boolean isVisible() {
 297  
                 /* 完了後の状態ならボタンを表示しない */
 298  0
                 return completeA == false && completeR == false && complete== false;
 299  
             }
 300  
         };
 301  0
         form.add(btnSubmitR);
 302  
         
 303  
         /*
 304  
          * 承認済みのときに表示される領域
 305  
          */
 306  0
         WebMarkupContainer cntStatus1 = new WebMarkupContainer("cntStatus1") {
 307  
             @Override
 308  
             public boolean isVisible() {
 309  0
                 return org.getStatus().equals(Org.STATUS_承認済み);
 310  
             }
 311  
         };
 312  0
         cntStatus1.setOutputMarkupId(true);
 313  0
         cntStatus1.setOutputMarkupPlaceholderTag(true);
 314  0
         form.add(cntStatus1);
 315  
             
 316  
 
 317  
         
 318  
 //        /* パスワードの有効期限 */
 319  
 //        Label pwtcktLabel = new Label("pwtckt", new Model<String>(){
 320  
 //            @Override
 321  
 //            public String getObject() {
 322  
 //                /* 仮登録されている代表者 */
 323  
 //                final Usr usrPreAdmin = 仮登録されている代表者(org);
 324  
 //                String ticket = "xxx";
 325  
 //                Pwtckt pwtckt = passwordTicketManager.get有効なチケット(usrPreAdmin.getUsrid());
 326  
 //                if(pwtckt != null) {
 327  
 //                    if(pwtckt.getTicketdate() != null) {
 328  
 //                        ticket = "パスワード受付の有効期限は "
 329  
 //                                + AppUtils.toStrYyyyMMdd_HHmmss(pwtckt.getTicketdate())
 330  
 //                                + " です。";
 331  
 //                    } else {
 332  
 //                        ticket = "パスワード受付の有効期限が取得できません。";
 333  
 //                    }
 334  
 //                } else {
 335  
 //                    ticket = "パスワード受付の有効期限が取得できません。";
 336  
 //                }
 337  
 //                return ticket;
 338  
 //            }
 339  
 //        });
 340  
 //        pwtcktLabel.setOutputMarkupPlaceholderTag(true);
 341  
 //        cntStatus1.add(pwtcktLabel);
 342  
         
 343  
         /* 承認メールを再送する ボタン */
 344  0
         final Button btnSubmitStatus1 = new ConfirmAjaxButton("btnSubmitStatus1"){
 345  
             @Override
 346  
             String getConfirmMessage() {
 347  0
                 return "承認メールを再送します。";
 348  
             }
 349  
             @Override
 350  
             boolean executeBefore() {
 351  
                 /* 入力値変換 */
 352  
                 // なし
 353  
                 /* 入力値チェック */
 354  
                 // なし
 355  0
                 return true;
 356  
             }
 357  
             @Override
 358  
             void executeAfter(AjaxRequestTarget target) {
 359  
                 
 360  
                 /* 共通機能:パスワード登録チケット発行 からチケットを取得する(申請者のユーザIDをキーとする)*/
 361  0
                 final Usr usrPreAdmin = 組織の代表者(org);
 362  0
                 String random = passwordTicketManager.execute新規パスワード発行(usrPreAdmin.getUsrid());
 363  
 
 364  
                 /* 申請内容承認メール */
 365  0
                 MailSetting setting = new MailSetting();
 366  0
                 setting.setTemplate(ResourceReader.getText("message/mail.org.approval"));
 367  0
                 setting.setMailTo(org.getMail());
 368  0
                 setting.replace("機関名称", org.getName());
 369  0
                 setting.replace("申請者氏名", org.getAdminname());
 370  0
                 String 本登録URL = ResourceReader.getStringQuick("urlroot") + "entrypassword?value=" + random;
 371  0
                 setting.replace("本登録URL", 本登録URL);
 372  0
                 boolean sendmailrsult = AppSendMail.send(setting);
 373  0
                 if(sendmailrsult == false) {
 374  0
                     error("メールの送信に失敗しました。");
 375  
                 }
 376  
                 
 377  
                 /* テスト自動化対応 */
 378  0
                 if (AppLogger.isDebug()) {
 379  0
                     addDebugUrl(本登録URL);
 380  
                 }
 381  
                 
 382  
                 /* メッセージ表示 */
 383  0
                 info("パスワード受付の有効期限を更新して、メールを再送しました。");
 384  
                 
 385  
                 /* コンポーネント更新 */
 386  0
                 target.add(form);
 387  
                 
 388  0
             }
 389  
             @Override
 390  
             public boolean isVisible() {
 391  0
                 return org.getStatus().equals(Org.STATUS_承認済み);
 392  
             }
 393  
         };
 394  0
         btnSubmitStatus1.setOutputMarkupPlaceholderTag(true);
 395  0
         cntStatus1.add(btnSubmitStatus1);
 396  
         
 397  0
         FeedbackPanel fb = new FeedbackPanel("feedback");
 398  0
         fb.setOutputMarkupPlaceholderTag(true);
 399  0
         cntStatus1.add(fb);
 400  
         
 401  
         
 402  
         /* パスワード情報 */
 403  0
         PasswordInfoPanel passwordInfoPanel = new PasswordInfoPanel("PasswordInfoPanel", 
 404  0
                 組織の代表者(org),
 405  0
                 isSystemAdmin(),
 406  0
                 true);
 407  0
         form.add(passwordInfoPanel);
 408  
         
 409  
 
 410  0
     }
 411  0
     private Usr 組織の代表者(final Org org) {
 412  0
         Usr usrPreAdminCnd = new Usr();
 413  0
         if(Org.KIND_運営管理 == org.getKind()) { // 運営管理を考慮
 414  0
             usrPreAdminCnd.setKind(Usr.KIND_運営管理者);
 415  0
         } else {
 416  0
             usrPreAdminCnd.setKind(Usr.KIND_機関管理者);
 417  
         }
 418  0
         usrPreAdminCnd.setOrgid(org.getOrgid());
 419  0
         usrPreAdminCnd.setOrgrole(Usr.ROLE_管理者);
 420  0
         List<Usr> usrs = usrDao.get(usrPreAdminCnd);
 421  0
         if(usrs.isEmpty()) {
 422  
             //throw new RuntimeException("承認済み組織からユーザ情報が取得できませんでした。");
 423  0
             return null; // 「未処理」を考慮
 424  
         }
 425  0
         final Usr usrPreAdmin = usrs.get(0);
 426  0
         return usrPreAdmin;
 427  
     }
 428  
 }