| 1 | VAQUTL4 ;ALB/JRP - UTILITY ROUTINES;10-JUN-93
 | 
|---|
| 2 |  ;;1.5;PATIENT DATA EXCHANGE;;NOV 17, 1993
 | 
|---|
| 3 | MAILGRP(NAME,TYPE,SELF,RESTRICT,DESCRIBE) ;ADD/EDIT BASIC MAIL GROUP INFO
 | 
|---|
| 4 |  ;INPUT  : NAME - Name of new mail group
 | 
|---|
| 5 |  ;         TYPE - Flag indicating type of mail group
 | 
|---|
| 6 |  ;                0 = public (default)
 | 
|---|
| 7 |  ;                1 = private
 | 
|---|
| 8 |  ;         SELF - Flag indicating if self enrollment is allowed
 | 
|---|
| 9 |  ;                0 = no
 | 
|---|
| 10 |  ;                1 = yes (default)
 | 
|---|
| 11 |  ;         RESTRICT - Flag indicating restriction of mail group
 | 
|---|
| 12 |  ;                    0 to 7 - refer to data dictionary for definitions
 | 
|---|
| 13 |  ;                    0 (unrestricted) is default
 | 
|---|
| 14 |  ;         DESCRIBE - Array containing description (full global ref)
 | 
|---|
| 15 |  ;                    (optional)
 | 
|---|
| 16 |  ;         DUZ - Current user
 | 
|---|
| 17 |  ;OUTPUT : IFN^0 - Entry number of mail group edited
 | 
|---|
| 18 |  ;         IFN^1 - Entry number of mail group added
 | 
|---|
| 19 |  ;         -1^ErrorText - Error
 | 
|---|
| 20 |  ;NOTES  : If editing an existing mail group, the basic information
 | 
|---|
| 21 |  ;         already defined in the mail group will be overwritten.  The
 | 
|---|
| 22 |  ;         current description will be deleted before the new
 | 
|---|
| 23 |  ;         description is added.  If a new description is not passed,
 | 
|---|
| 24 |  ;         the current description will not be deleted.
 | 
|---|
| 25 |  ;       : The organizer of the mail group will be the current user.
 | 
|---|
| 26 |  ;
 | 
|---|
| 27 |  ;CHECK INPUT
 | 
|---|
| 28 |  Q:($G(NAME)="") "-1^Did not pass name of mail group to create"
 | 
|---|
| 29 |  Q:(($L(NAME)<3)!($L(NAME)>30)) "-1^Did not pass valid mail group name"
 | 
|---|
| 30 |  S TYPE=+$G(TYPE)
 | 
|---|
| 31 |  S:($G(SELF)="") SELF=1
 | 
|---|
| 32 |  S:(SELF'=1) SELF=0
 | 
|---|
| 33 |  S RESTRICT=+$G(RESTRICT)
 | 
|---|
| 34 |  S:((RESTRICT<0)!(RESTRICT>7)) RESTRICT=0
 | 
|---|
| 35 |  Q:('$G(DUZ)) "-1^You are not identified (NO DUZ)"
 | 
|---|
| 36 |  ;DECLARE VARIABLES
 | 
|---|
| 37 |  N DIC,X,Y,LINE,ADDED,IFN,DIE,DA,DR,DIK,DA
 | 
|---|
| 38 |  ;SEE IF MAIL GROUP ALREADY EXISTS
 | 
|---|
| 39 |  S ADDED=0
 | 
|---|
| 40 |  S DIC="^XMB(3.8,"
 | 
|---|
| 41 |  S DIC(0)="MX"
 | 
|---|
| 42 |  S X=NAME
 | 
|---|
| 43 |  D ^DIC K DIC
 | 
|---|
| 44 |  S IFN=+Y
 | 
|---|
| 45 |  ;CREATE STUB MAIL GROUP
 | 
|---|
| 46 |  I (IFN<0) D  Q:(IFN<0) IFN
 | 
|---|
| 47 |  .S ADDED=1
 | 
|---|
| 48 |  .S DIC="^XMB(3.8,"
 | 
|---|
| 49 |  .S DIC(0)="L"
 | 
|---|
| 50 |  .S X=NAME
 | 
|---|
| 51 |  .K DD,DO
 | 
|---|
| 52 |  .D FILE^DICN K DIC
 | 
|---|
| 53 |  .S IFN=+Y
 | 
|---|
| 54 |  .S:(IFN<0) IFN="-1^Unable to create mail group"
 | 
|---|
| 55 |  ;LOCK ENTRY
 | 
|---|
| 56 |  S X=0
 | 
|---|
| 57 |  L +^XMB(3.8,IFN):60 S:('$T) X=1
 | 
|---|
| 58 |  ;COULDN'T LOCK (ERROR)
 | 
|---|
| 59 |  I (X) D  Q Y
 | 
|---|
| 60 |  .;ENTRY NOT CREATED
 | 
|---|
| 61 |  .I ('ADDED) S Y="-1^Mail group was being edited by another user" Q
 | 
|---|
| 62 |  .;DELETE ENTRY CREATED
 | 
|---|
| 63 |  .S DIK="^XMB(3.8,"
 | 
|---|
| 64 |  .S DA=IFN
 | 
|---|
| 65 |  .D ^DIK
 | 
|---|
| 66 |  .;COULDN'T DELETE NEW ENTRY
 | 
|---|
| 67 |  .I ($D(^XMB(3.8,IFN))) S Y="-1^Error creating mail group; unable to delete (IFN:"_IFN_")" Q
 | 
|---|
| 68 |  .;NEW ENTRY DELETED
 | 
|---|
| 69 |  .S Y="-1^Error creating mail group; entry deleted"
 | 
|---|
| 70 |  ;EDIT ENTRY
 | 
|---|
| 71 |  S DIE="^XMB(3.8,"
 | 
|---|
| 72 |  S DA=IFN
 | 
|---|
| 73 |  S DR="4///"_$S(TYPE:"private",1:"public")
 | 
|---|
| 74 |  S DR(1,3.8,5)="5////"_DUZ
 | 
|---|
| 75 |  S DR(1,3.8,7)="7///"_$S(SELF:"YES",1:"NO")
 | 
|---|
| 76 |  S X="UNRESTRICTED^ORGANIZER ONLY^LOCAL^ORGANIZER/LOCAL^INDIVIDUALS^INDIV/ORGANIZER^INDIV/LOCAL^INDIV/LOCAL/ORGANIZER"
 | 
|---|
| 77 |  S Y=$P(X,"^",(RESTRICT+1))
 | 
|---|
| 78 |  S:(Y="") Y=$P(X,"^",1)
 | 
|---|
| 79 |  S DR(1,3.8,10)="10///"_Y
 | 
|---|
| 80 |  I ($G(DESCRIBE)'="") I ($D(@DESCRIBE)) D
 | 
|---|
| 81 |  .;DELETES CURRENT DESCRIPTION
 | 
|---|
| 82 |  .S DR(1,3.8,3)="3///@"
 | 
|---|
| 83 |  .;ADDS NEW DESCRIPTION
 | 
|---|
| 84 |  .S LINE=""
 | 
|---|
| 85 |  .F X=1:1 S LINE=$O(@DESCRIBE@(LINE)) Q:(LINE="")  D
 | 
|---|
| 86 |  ..S Y=$G(@DESCRIBE@(LINE))
 | 
|---|
| 87 |  ..S:(Y="") Y=" "
 | 
|---|
| 88 |  ..S DR(1,3.8,(300+X))="3///+"_Y
 | 
|---|
| 89 |  K X,Y D ^DIE
 | 
|---|
| 90 |  ;UNLOCK ENTRY AND QUIT
 | 
|---|
| 91 |  L -^XMB(3.8,IFN)
 | 
|---|
| 92 |  Q IFN_"^"_ADDED
 | 
|---|