Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: SDES2ENTERLETTR2

SDES2ENTERLETTR2.m

Go to the documentation of this file.
SDES2ENTERLETTR2 ;ALB/BLB,TJB - SDES2 CREATE LETTER 2 ;June 30, 2025@04:30pm
 ;;5.3;Scheduling;**916,918**;Aug 13, 1993;Build 4
 ;;Per VHA Directive 6402, this routine should not be modified
 ;
 Q
 ;
CREATELETTER(JSONRETURN,SDCONTEXT,LETTER) ;
 N SAVETYPE
 S SAVETYPE="CREATE"
 D SAVELETTER(.JSONRETURN,.SDCONTEXT,.LETTER,SAVETYPE)
 Q
 ;
EDITLETTER(JSONRETURN,SDCONTEXT,LETTER) ;
 N SAVETYPE
 S SAVETYPE="EDIT"
 D SAVELETTER(.JSONRETURN,.SDCONTEXT,.LETTER,SAVETYPE)
 Q
 ;
DELETELETTER(JSONRETURN,SDCONTEXT,LETTER) ;
 N %,DA,DIK,ERRORS,RETURN,VALRETURN,X,Y
 ;
 D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
 I $D(ERRORS) S ERRORS("Letter",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.ERRORS) Q
 ;
 ; Validate LETTER IEN - Only input field for DELETES
 D VALFILEIEN^SDES2VALUTIL(.VALRETURN,.ERRORS,407.5,$G(LETTER("LETTER IEN")),1,,630,624)
 I $D(ERRORS) S ERRORS("Letter",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.ERRORS) Q
 ;
 ; Verify that no clinic is pointing to this letter
 S DA=LETTER("LETTER IEN")
 I $D(^SC("ALTN",DA))!$D(^SC("ALTP",DA))!$D(^SC("ALTC",DA))!$D(^SC("ALTA",DA)) D  Q
 . D ERRLOG^SDES2JSON(.ERRORS,52,"There are Clinics pointing to this letter. Must remove or change the letter on the clinic")
 . S ERRORS("Letter",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.ERRORS)
 ;
 S DIK="^VA(407.5,"
 D ^DIK
 ;
 S RETURN("Letter","IEN")="LETTER IEN "_LETTER("LETTER IEN")_" has successfully been deleted."
 D BUILDJSON^SDES2JSON(.JSONRETURN,.RETURN)
 Q
 ;
SAVELETTER(JSONRETURN,SDCONTEXT,LETTER,SAVETYPE) ;
 N ERRORS,RETURN
 ;
 D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
 I $D(ERRORS) S ERRORS("Letter",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.ERRORS) Q
 ;
 D VALIDATE(.ERRORS,.LETTER,SAVETYPE)
 I $D(ERRORS) S ERRORS("Letter",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.ERRORS) Q
 ;
 D BUILDER(.ERRORS,.LETTER)
 I $D(ERRORS) S ERRORS("Letter",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.ERRORS) Q
 ;
 S RETURN("Letter","IEN")=LETTER("LETTER IEN")
 D BUILDJSON^SDES2JSON(.JSONRETURN,.RETURN)
 Q
 ;
VALIDATE(ERRORS,LETTER,SAVETYPE) ; Validation for Input Parameter data
 N MESSTYPIEN,VALRETURN,LETIENS,LIEN
 ; Validate required fields
 ;
 ; LETTER NAME
 D VALFIELD^SDES2VALUTIL(.VALRETURN,.ERRORS,407.5,.01,$G(LETTER("LETTER NAME")),1,,620,621)
 Q:$D(ERRORS)
 S LETTER("LETTER NAME")=$$CTRL^XMXUTIL1(LETTER("LETTER NAME"))
 ;
 ; LETTER TYPE
 I $G(LETTER("LETTER TYPE"))="" D ERRLOG^SDES2JSON(.ERRORS,622) Q
 I '$D(^VA(407.6,"B",$G(LETTER("LETTER TYPE")))) D ERRLOG^SDES2JSON(.ERRORS,623) Q
 ;I '$$FIND1^DIC(407.6,"","B",$G(LETTER("LETTER TYPE"))) D ERRLOG^SDES2JSON(.ERRORS,623) Q
 ;
 S LIEN=""
 F  S LIEN=$O(^VA(407.5,"B",$G(LETTER("LETTER NAME")),LIEN)) Q:'+LIEN  S LETIENS(LETTER("LETTER NAME"),$P(^VA(407.5,LIEN,0),U,2),LIEN)=""
 ; Existing letter with this name and letter type
 I SAVETYPE="CREATE",$D(^VA(407.5,"B",$G(LETTER("LETTER NAME")))) D  Q:$D(ERRORS)
 . I $O(LETIENS(LETTER("LETTER NAME"),LETTER("LETTER TYPE"),""))'="" D ERRLOG^SDES2JSON(.ERRORS,629,"Existing letter found with same name and type") Q
 ; Validate LETTER IEN - Required for EDITS, not used for CREATES
 I SAVETYPE="EDIT" D
 . D VALFILEIEN^SDES2VALUTIL(.VALRETURN,.ERRORS,407.5,$G(LETTER("LETTER IEN")),1,,630,624) Q:$D(ERRORS)
 . I $$GET1^DIQ(407.5,$G(LETTER("LETTER IEN"))_",",1,"I")=LETTER("LETTER TYPE"),($$GET1^DIQ(407.5,$G(LETTER("LETTER IEN"))_",",.01,"E")=$G(LETTER("LETTER NAME"))) Q
 . S LIEN="",LIEN=$O(LETIENS(LETTER("LETTER NAME"),LETTER("LETTER TYPE"),""))
 . I ($O(LETIENS(LETTER("LETTER NAME"),LETTER("LETTER TYPE"),""))'=""),LIEN'=$G(LETTER("LETTER IEN")) D ERRLOG^SDES2JSON(.ERRORS,82,"Letter IEN. Letter Name and Letter Type matches existing letter with different Letter IEN") Q
 Q:$D(ERRORS)
 ;
 ; PRINT DEFAULT PROVIDER
 I $D(LETTER("DEFAULT PROVIDER")) D
 .D VALFIELD^SDES2VALUTIL(.VALRETURN,.ERRORS,407.5,4,$G(LETTER("DEFAULT PROVIDER")),,1,,627)
 Q:$D(ERRORS)
 ;
 ; PRINT CLINIC LOCATION
 I $D(LETTER("CLINIC LOCATION")) D
 .D VALFIELD^SDES2VALUTIL(.VALRETURN,.ERRORS,407.5,5,$G(LETTER("CLINIC LOCATION")),,1,,628)
 Q
 ;
BUILDER(ERRORS,LETTER) ; Build FDA array and save LETTER
 N EDITFINAL,EDITINITIAL,FDA,FDAERR,LETTIEN,NEWIEN
 S LETTIEN=$S($G(LETTER("LETTER IEN")):LETTER("LETTER IEN")_",",1:"+1,")
 ;
 S FDA(407.5,LETTIEN,.01)=LETTER("LETTER NAME")
 S FDA(407.5,LETTIEN,1)=LETTER("LETTER TYPE")
 I $D(LETTER("DEFAULT PROVIDER")) S FDA(407.5,LETTIEN,4)=$G(LETTER("DEFAULT PROVIDER"))
 I $D(LETTER("CLINIC LOCATION")) S FDA(407.5,LETTIEN,5)=$G(LETTER("CLINIC LOCATION"))
 ;
 I $G(LETTER("LETTER IEN")) D  Q:$D(ERRORS)
 . D FILE^DIE(,"FDA","FDAERR") K FDA
 . I $D(FDAERR) D ERRLOG^SDES2JSON(.ERRORS,629) Q
 ;
 I '$G(LETTER("LETTER IEN")) D  Q:$D(ERRORS)
 . D UPDATE^DIE(,"FDA","NEWIEN","FDAERR")
 . I $D(FDAERR) D ERRLOG^SDES2JSON(.ERRORS,629) Q
 . S LETTER("LETTER IEN")=NEWIEN(1)
 . S LETTIEN=NEWIEN(1)_"," K FDA
 ;
 D STORELETSECTIONS(.LETTER,$S($G(NEWIEN(1)):NEWIEN(1),1:$G(LETTER("LETTER IEN"))))
 Q
 ;
STORELETSECTIONS(LETTER,LETTERIEN) ;
 N COUNT,INITIALSECTIONS,FINALSECTIONS
 ;
 F COUNT=1:1:$O(LETTER("INITIAL SECTION",""),-1) D
 .S INITIALSECTIONS(COUNT)=$$CTRL^XMXUTIL1($G(LETTER("INITIAL SECTION",COUNT)))
 ;
 F COUNT=1:1:$O(LETTER("FINAL SECTION",""),-1) D
 .S FINALSECTIONS(COUNT)=$$CTRL^XMXUTIL1($G(LETTER("FINAL SECTION",COUNT)))
 ;
 I $D(INITIALSECTIONS) D WP^DIE(407.5,LETTERIEN_",",2,"","INITIALSECTIONS")
 I $D(FINALSECTIONS) D WP^DIE(407.5,LETTERIEN_",",3,"","FINALSECTIONS")
 Q
 ;
SEARCHLETTER(JSONRETURN,SDCONTEXT,SEARCH) ;
 ;
 ; SEARCH INPUT FORMAT
 ;
 ;S SEARCH("LETTER TYPE")=""                REQ
 ;S SEARCH("SEARCH STRING")=""              OPT
 ;
 N ERRORS,RETURN
 ;
 D VALCONTEXT^SDES2VALCONTEXT(.ERRORS,.SDCONTEXT)
 I $D(ERRORS) S ERRORS("Search",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.ERRORS) Q
 ;
 D VALSEARCH(.ERRORS,.SEARCH)
 I $D(ERRORS) S ERRORS("Search",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.ERRORS) Q
 ;
 D BUILDLIST(.RETURN,.ERRORS,.SEARCH)
 I $D(ERRORS) S ERRORS("Search",1)="" D BUILDJSON^SDES2JSON(.JSONRETURN,.ERRORS) Q
 ;
 D BUILDJSON^SDES2JSON(.JSONRETURN,.RETURN)
 Q
 ;
VALSEARCH(ERRORS,SEARCH) ;
 ;
 ; LETTER TYPE
 I $G(SEARCH("LETTER TYPE"))="" D ERRLOG^SDES2JSON(.ERRORS,622) Q
 I '$D(^VA(407.6,"B",$G(SEARCH("LETTER TYPE")))) D ERRLOG^SDES2JSON(.ERRORS,623) Q
 ;I '$$FIND1^DIC(407.6,"","B",$G(SEARCH("LETTER TYPE"))) D ERRLOG^SDES2JSON(.ERRORS,623) Q
 ;
 ; SEARCH STRING
 Q:$G(SEARCH("SEARCH STRING"))=""
 S SEARCH("SEARCH STRING")=$$CTRL^XMXUTIL1(SEARCH("SEARCH STRING"))
 I ($L(SEARCH("SEARCH STRING"))<3)!($L(SEARCH("SEARCH STRING"))>35) D ERRLOG^SDES2JSON(.ERRORS,230) Q
 ;
 Q
 ;
BUILDLIST(RETURN,ERRORS,SEARCH) ;
 ; Search for matches
 N LETIEN,LETLIST,LETNAME,LETTYPE
 S LETTYPE=$G(SEARCH("LETTER TYPE")) Q:LETTYPE=""
 S LETIEN=0
 F  S LETIEN=$O(^VA(407.5,"C",LETTYPE,LETIEN)) Q:'LETIEN  D
 . S LETNAME=$$GET1^DIQ(407.5,LETIEN_",",.01,"E")
 . S LETLIST(LETNAME,LETIEN)=""
 I $G(SEARCH("SEARCH STRING"))'="" D
 . S LETNAME=""
 . F  S LETNAME=$O(LETLIST(LETNAME)) Q:LETNAME=""  D
 . . I LETNAME'[(SEARCH("SEARCH STRING")) K LETLIST(LETNAME)
 ;
 ; Format return data
 I '$D(LETLIST) D  Q
 . D ERRLOG^SDES2JSON(.RETURN,631) S RETURN("Search",1)="" Q
 N LETCOUNT
 S LETNAME="",LETCOUNT=0
 F  S LETNAME=$O(LETLIST(LETNAME)) Q:LETNAME=""  D
 . S LETIEN=0
 . F  S LETIEN=$O(LETLIST(LETNAME,LETIEN)) Q:'LETIEN  D
 . . S LETCOUNT=LETCOUNT+1
 . . S RETURN("Search",LETCOUNT,"LetterIEN")=LETIEN
 . . S RETURN("Search",LETCOUNT,"LetterName")=LETNAME
 Q