summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjeff <jeff>2006-10-27 17:01:31 +0000
committerjeff <jeff>2006-10-27 17:01:31 +0000
commit576c6b48428aa95e0fd80db011fe73c0b728c88b (patch)
tree79b8ddfe015d3732269f402d7129d4d36194bb9e
parentfc3483c8679daf2e00467db05342e9fcd314d541 (diff)
editable notes
-rw-r--r--FS/FS/AccessRight.pm1
-rwxr-xr-xhttemplate/edit/cust_main_note.cgi20
-rwxr-xr-xhttemplate/edit/process/cust_main_note.cgi19
-rw-r--r--httemplate/elements/overlibmws_crossframe.js44
-rwxr-xr-xhttemplate/view/cust_main/notes.html41
5 files changed, 110 insertions, 15 deletions
diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm
index 64c4f6b38..5370e2281 100644
--- a/FS/FS/AccessRight.pm
+++ b/FS/FS/AccessRight.pm
@@ -93,6 +93,7 @@ assigned to users and/or groups.
'Complimentary customer', #aka users-allow_comp
'Delete customer', #aka. deletecustomers #Enable customer deletions. Be very careful! Deleting a customer will remove all traces that this customer ever existed! It should probably only be used when auditing a legacy database. Normally, you cancel all of a customers' packages if they cancel service.
'Add customer note',
+ 'Edit customer note',
###
# customer package rights
diff --git a/httemplate/edit/cust_main_note.cgi b/httemplate/edit/cust_main_note.cgi
index 468ef0051..303895bd8 100755
--- a/httemplate/edit/cust_main_note.cgi
+++ b/httemplate/edit/cust_main_note.cgi
@@ -1,4 +1,4 @@
-<% include('/elements/header-popup.html', 'Add Customer Note') %>
+<% include('/elements/header-popup.html', "$action Customer Note") %>
% if ( $cgi->param('error') ) {
<FONT SIZE="+1" COLOR="#ff0000">Error: <% $cgi->param('error') %></FONT>
@@ -7,6 +7,7 @@
<FORM ACTION="<% popurl(1) %>process/cust_main_note.cgi" METHOD=POST>
<INPUT TYPE="hidden" NAME="custnum" VALUE="<% $custnum %>">
+<INPUT TYPE="hidden" NAME="notenum" VALUE="<% $notenum %>">
<BR><BR>
@@ -15,23 +16,36 @@
</TEXTAREA>
<BR><BR>
-<INPUT TYPE="submit" VALUE="Add note">
+<INPUT TYPE="submit" VALUE="<% $notenum ? "Apply Changes" : "Add Note" %>">
</FORM>
</BODY>
</HTML>
<%init>
-my($custnum, $comment);
+my($custnum, $comment, $notenum, $action);
$comment = '';
if ( $cgi->param('error') ) {
$comment = $cgi->param('comment');
+}elsif ($cgi->param('notenum')) {
+ $cgi->param('notenum') =~ /^(\d+)$/;
+ $notenum = $1;
+ die "illegal query ". $cgi->keywords unless $notenum;
+ my $note = qsearchs('cust_main_note', { 'notenum' => $notenum });
+ die "no such note: ". $notenum unless $note;
+ $comment = $note->comments;
}
+
+$cgi->param('notenum') =~ /^(\d+)$/;
+$notenum = $1;
+
$cgi->param('custnum') =~ /^(\d+)$/;
$custnum = $1;
die "illegal query ". $cgi->keywords unless $custnum;
+$action = $notenum ? 'Edit' : 'Add';
+
</%init>
diff --git a/httemplate/edit/process/cust_main_note.cgi b/httemplate/edit/process/cust_main_note.cgi
index d9251f042..b94d2271c 100755
--- a/httemplate/edit/process/cust_main_note.cgi
+++ b/httemplate/edit/process/cust_main_note.cgi
@@ -4,18 +4,33 @@
% or die "Illegal custnum: ". $cgi->param('custnum');
%my $custnum = $1;
%
+%$cgi->param('notenum') =~ /^(\d+)$/
+% or die "Illegal notenum: ". $cgi->param('notenum');
+%my $notenum = $1;
+%
%my $otaker = $FS::CurrentUser::CurrentUser->name;
%$otaker = $FS::CurrentUser::CurrentUser->username
% if ($otaker eq "User, Legacy");
%
%my $new = new FS::cust_main_note ( {
+% notenum => $notenum,
% custnum => $custnum,
% _date => time,
% otaker => $otaker,
% comments => $cgi->param('comment'),
%} );
%
-%my $error = $new->insert;
+%my $error;
+%if ($notenum){
+% my $old = qsearchs('cust_main_note', { 'notenum' => $notenum });
+% $error = "No such note: $notenum" unless $old;
+% unless($error){
+% map { $new->$_($old->$_) } ('_date', 'otaker');
+% $error = $new->replace($old);
+% }
+%}else{
+% $error = $new->insert;
+%}
%
%if ($error) {
% $cgi->param('error', $error);
@@ -23,7 +38,7 @@
%}
%
%
-<% header('Note added') %>
+<% header('Note ' . ($notenum ? 'updated' : 'added') ) %>
<SCRIPT TYPE="text/javascript">
window.top.location.reload();
</SCRIPT>
diff --git a/httemplate/elements/overlibmws_crossframe.js b/httemplate/elements/overlibmws_crossframe.js
new file mode 100644
index 000000000..6b21c42e8
--- /dev/null
+++ b/httemplate/elements/overlibmws_crossframe.js
@@ -0,0 +1,44 @@
+/*
+ overlibmws_crossframe.js plug-in module - Copyright Foteos Macrides 2003-2006
+ For support of FRAME.
+ Initial: August 3, 2003 - Last Revised: November 2, 2004
+ See the Change History and Command Reference for overlibmws via:
+
+ http://www.macridesweb.com/oltest/
+
+ Published under an open source license: http://www.macridesweb.com/oltest/license.html
+*/
+
+OLloaded=0;
+OLregCmds('frame');
+
+function OLparseCrossframe(pf,i,ar){
+var k=i,v;
+if(k<ar.length){
+if(ar[k]==FRAME){v=ar[++k];if(pf=='ol_')ol_frame=v;else OLoptFRAME(v);return k;}}
+return -1;
+}
+
+function OLgetFrameRef(thisFrame,ofrm){
+var i,v,retVal='';for(i=0;i<thisFrame.length;i++){if((((thisFrame[i].length>0)))&&(((OLns4))||
+((OLie4)&&(v=thisFrame[i].document.all.tags('iframe'))!=null&&v.length==0)||
+((OLns6)&&(v=thisFrame[i].document.getElementsByTagName('iframe'))!=null&&v.length==0))){
+retVal=OLgetFrameRef(thisFrame[i],ofrm);if(retVal=='')continue;}
+else if(thisFrame[i]!=ofrm)continue;retVal='['+i+']'+retVal;break;}
+return retVal;
+}
+
+function OLoptFRAME(frm){
+o3_frame=OLmkLyr('overDiv',frm)?frm:self;if(o3_frame!=self){
+var l,tFrm=OLgetFrameRef(top.frames,o3_frame),sFrm=OLgetFrameRef(top.frames,ol_frame);
+if(sFrm.length==tFrm.length) {l=tFrm.lastIndexOf('[');if(l){
+while(sFrm.substring(0,l)!=tFrm.substring(0,l))l=tFrm.lastIndexOf('[',l-1);
+tFrm=tFrm.substr(l);sFrm=sFrm.substr(l);}}var i,k,cnt=0,p='',str=tFrm;
+while((k=str.lastIndexOf('['))!= -1){cnt++;str=str.substring(0,k);}
+for(i=0;i<cnt;i++)p=p+'parent.';OLfnRef=p+'frames'+sFrm+'.';}
+}
+
+OLregCmdLineFunc(OLparseCrossframe);
+
+OLcrossframePI=1;
+OLloaded=1;
diff --git a/httemplate/view/cust_main/notes.html b/httemplate/view/cust_main/notes.html
index c1a33b020..75bf30e41 100755
--- a/httemplate/view/cust_main/notes.html
+++ b/httemplate/view/cust_main/notes.html
@@ -1,5 +1,6 @@
%
% my $conf = new FS::Conf;
+% my $curuser = $FS::CurrentUser::CurrentUser;
%
% $cgi->param('custnum') =~ /^(\d+)$/
% or die "No customer specified (bad URL)!";
@@ -20,6 +21,11 @@ body { background: #e8e8e8 }
</STYLE>
+<SCRIPT TYPE="text/javascript" SRC="/elements/overlibmws.js"></SCRIPT>
+<SCRIPT TYPE="text/javascript" SRC="/elements/overlibmws_iframe.js"></SCRIPT>
+<SCRIPT TYPE="text/javascript" SRC="/elements/overlibmws_crossframe.js"></SCRIPT>
+<SCRIPT TYPE="text/javascript" SRC="/elements/iframecontentmws.js"></SCRIPT>
+
<TABLE CLASS="inv" CELLSPACING=0 CELLPADDING=0 BORDER=0 >
%#<% include('/elements/table-grid.html') %>
@@ -35,12 +41,27 @@ body { background: #e8e8e8 }
% $bgcolor = $bgcolor1;
% }
%
+% my $pop = popurl(3);
+% my $notenum = $note->notenum;
+% my $clickjs = qq!onclick="overlib( OLiframeContent('${pop}edit/! .
+% qq!cust_main_note.cgi?custnum=$custnum&! .
+% qq!notenum=$notenum', 616, ! .
+% qq!386, 'cust_main_note_popup' ), CAPTION, 'Edit customer ! .
+% qq!note', STICKY, AUTOSTATUSCAP, MIDX, 0, MIDY, 0, ! .
+% qq!CLOSECLICK, FRAME, top); return false;"!;
%
+% my ($el, $eel);
+% if ($curuser->access_right('Edit customer note') ) {
+% $el = qq!<A HREF="javascript:void(0);" $clickjs>!;
+% $eel = qq!</A>!;
+% }else{
+% $el = $eel = '';
+% }
<TR>
- <% note_datestr($note,$conf,$bgcolor) %>
+ <% note_datestr($note,$conf,$bgcolor, $el, $eel) %>
<TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
- &nbsp;<%$note->otaker%>&nbsp;
+ <% $el %> &nbsp;<%$note->otaker%>&nbsp; <% $eel %>
</TD>
<TD CLASS="inv" BGCOLOR="<% $bgcolor %>">
&nbsp;<%$note->comments%>
@@ -58,14 +79,14 @@ body { background: #e8e8e8 }
%#subroutines
%
%sub note_datestr {
-% my($note, $conf, $bgcolor) = @_ or return '';
-% my $format=qq{<TD class="inv" bgcolor="$bgcolor" align="left"><B>%b</B></TD>}.
-% qq{<TD class="inv" bgcolor="$bgcolor" align="right"><B>&nbsp;%o,</B></TD>}.
-% qq{<TD class="inv" bgcolor="$bgcolor" align="right"><B>&nbsp;%Y&nbsp;</B></TD>};
-% $format .= qq{<TD class="inv" bgcolor="$bgcolor" ALIGN="right"><B>&nbsp;%l</TD>}.
-% qq{<TD class="inv" bgcolor="$bgcolor" ALIGN="center"><B>:</B></TD>}.
-% qq{<TD class="inv" bgcolor="$bgcolor" ALIGN="left"><B>%M</B></TD>}.
-% qq{<TD class="inv" bgcolor="$bgcolor" ALIGN="left"><B>&nbsp;%P&nbsp;</B></TD>}
+% my($note, $conf, $bgcolor, $el, $eel) = @_ or return '';
+% my $format=qq{<TD class="inv" bgcolor="$bgcolor" align="left">$el<B>%b</B>$eel</TD>}.
+% qq{<TD class="inv" bgcolor="$bgcolor" align="right">$el<B>&nbsp;%o,</B>$eel</TD>}.
+% qq{<TD class="inv" bgcolor="$bgcolor" align="right">$el<B>&nbsp;%Y&nbsp;</B>$eel</TD>};
+% $format .= qq{<TD class="inv" bgcolor="$bgcolor" ALIGN="right">$el<B>&nbsp;%l$eel</TD>}.
+% qq{<TD class="inv" bgcolor="$bgcolor" ALIGN="center">$el<B>:</B>$eel</TD>}.
+% qq{<TD class="inv" bgcolor="$bgcolor" ALIGN="left">$el<B>%M</B>$eel</TD>}.
+% qq{<TD class="inv" bgcolor="$bgcolor" ALIGN="left">$el<B>&nbsp;%P&nbsp;</B>$eel</TD>}
% if $conf->exists('cust_main_note-display_times');
% ( my $strip = time2str($format, $note->_date) ) =~ s/ (\d)/$1/g;
% $strip;