summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8726
-rw-r--r--FS/FS.pm10
-rw-r--r--FS/FS/AccessRight.pm1
-rw-r--r--FS/FS/ClientAPI/MyAccount.pm91
-rw-r--r--FS/FS/Conf.pm427
-rw-r--r--FS/FS/Mason.pm3
-rw-r--r--FS/FS/Misc.pm115
-rw-r--r--FS/FS/Record.pm18
-rw-r--r--FS/FS/Schema.pm148
-rw-r--r--FS/FS/TicketSystem/RT_External.pm33
-rw-r--r--FS/FS/TicketSystem/RT_Internal.pm183
-rw-r--r--FS/FS/UI/Web.pm7
-rw-r--r--FS/FS/UID.pm2
-rw-r--r--FS/FS/Upgrade.pm4
-rw-r--r--FS/FS/access_user.pm17
-rw-r--r--FS/FS/cust_bill.pm35
-rw-r--r--FS/FS/cust_bill_ApplicationCommon.pm142
-rw-r--r--FS/FS/cust_bill_pkg_detail.pm4
-rw-r--r--FS/FS/cust_credit.pm2
-rw-r--r--FS/FS/cust_event.pm6
-rw-r--r--FS/FS/cust_location.pm14
-rw-r--r--FS/FS/cust_main.pm61
-rw-r--r--FS/FS/cust_pkg.pm55
-rw-r--r--FS/FS/cust_svc.pm29
-rw-r--r--FS/FS/h_svc_mailinglist.pm33
-rw-r--r--FS/FS/h_svc_pbx.pm33
-rw-r--r--FS/FS/location_Mixin.pm57
-rw-r--r--FS/FS/mailinglist.pm173
-rw-r--r--FS/FS/mailinglistmember.pm239
-rw-r--r--FS/FS/part_event/Action/Mixin/credit_pkg.pm63
-rw-r--r--FS/FS/part_event/Action/pkg_agent_credit.pm39
-rw-r--r--FS/FS/part_event/Action/pkg_agent_credit_pkg.pm9
-rw-r--r--FS/FS/part_event/Action/pkg_employee_credit.pm44
-rw-r--r--FS/FS/part_event/Action/pkg_employee_credit_pkg.pm9
-rw-r--r--FS/FS/part_event/Action/pkg_referral_credit.pm14
-rw-r--r--FS/FS/part_event/Action/pkg_referral_credit_pkg.pm53
-rw-r--r--FS/FS/part_event/Condition/balance.pm2
-rw-r--r--FS/FS/part_event/Condition/balance_age.pm2
-rw-r--r--FS/FS/part_event/Condition/balance_under.pm2
-rw-r--r--FS/FS/part_event/Condition/cust_bill_has_service.pm6
-rw-r--r--FS/FS/part_event/Condition/cust_bill_owed.pm2
-rw-r--r--FS/FS/part_event/Condition/cust_bill_owed_under.pm2
-rw-r--r--FS/FS/part_event/Condition/every.pm2
-rw-r--r--FS/FS/part_event_condition.pm6
-rw-r--r--FS/FS/part_export.pm20
-rw-r--r--FS/FS/part_export/communigate_pro.pm846
-rw-r--r--FS/FS/part_export/domain_shellcommands.pm2
-rw-r--r--FS/FS/part_export/forward_shellcommands.pm2
-rw-r--r--FS/FS/part_export/grandstream.pm257
-rw-r--r--FS/FS/part_export/indosoft.pm219
-rw-r--r--FS/FS/part_export/netsapiens.pm17
-rw-r--r--FS/FS/part_export/phone_shellcommands.pm2
-rw-r--r--FS/FS/part_export/shellcommands.pm2
-rw-r--r--FS/FS/part_export/shellcommands_withdomain.pm2
-rw-r--r--FS/FS/part_export/textradius.pm2
-rw-r--r--FS/FS/part_export/thirdlane.pm348
-rw-r--r--FS/FS/part_export/vpopmail.pm2
-rw-r--r--FS/FS/part_export/www_shellcommands.pm2
-rw-r--r--FS/FS/part_pkg.pm12
-rw-r--r--FS/FS/part_pkg/flat.pm21
-rw-r--r--FS/FS/part_pkg/sql_external.pm35
-rw-r--r--FS/FS/part_pkg/voip_cdr.pm10
-rw-r--r--FS/FS/part_svc.pm11
-rw-r--r--FS/FS/rate_detail.pm31
-rw-r--r--FS/FS/reason.pm54
-rw-r--r--FS/FS/svc_Common.pm207
-rw-r--r--FS/FS/svc_Domain_Mixin.pm134
-rw-r--r--FS/FS/svc_acct.pm321
-rw-r--r--FS/FS/svc_domain.pm97
-rw-r--r--FS/FS/svc_external.pm2
-rw-r--r--FS/FS/svc_mailinglist.pm330
-rw-r--r--FS/FS/svc_pbx.pm277
-rw-r--r--FS/FS/svc_phone.pm152
-rw-r--r--FS/FS/tax_rate.pm1146
-rw-r--r--FS/MANIFEST21
-rwxr-xr-xFS/bin/freeside-paymentech-upload17
-rwxr-xr-xFS/bin/freeside-upgrade7
-rw-r--r--FS/t/h_svc_mailinglist.t5
-rw-r--r--FS/t/h_svc_pbx.t5
-rw-r--r--FS/t/location_Mixin.t5
-rw-r--r--FS/t/mailinglist.t5
-rw-r--r--FS/t/mailinglistmember.t5
-rw-r--r--FS/t/svc_Domain_Mixin.t5
-rw-r--r--FS/t/svc_mailinglist.t5
-rw-r--r--FS/t/svc_pbx.t5
-rw-r--r--Makefile9
-rw-r--r--conf/invoice_from2
-rw-r--r--debian/changelog12
-rw-r--r--debian/control2
-rw-r--r--fs_selfservice/FS-SelfService/SelfService.pm1
-rw-r--r--fs_selfservice/FS-SelfService/cgi/ach_payment_results.html3
-rwxr-xr-xfs_selfservice/FS-SelfService/cgi/change_bill.html3
-rw-r--r--fs_selfservice/FS-SelfService/cgi/change_password.html4
-rw-r--r--fs_selfservice/FS-SelfService/cgi/change_pay.html3
-rwxr-xr-xfs_selfservice/FS-SelfService/cgi/change_ship.html3
-rw-r--r--fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html2
-rwxr-xr-xfs_selfservice/FS-SelfService/cgi/customer_order_pkg.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/delete_svc.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/header.html43
-rwxr-xr-xfs_selfservice/FS-SelfService/cgi/image.cgi20
-rw-r--r--fs_selfservice/FS-SelfService/cgi/make_ach_payment.html5
-rw-r--r--fs_selfservice/FS-SelfService/cgi/make_payment.html7
-rwxr-xr-xfs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html4
-rw-r--r--fs_selfservice/FS-SelfService/cgi/myaccount.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/myaccount_menu.html52
-rw-r--r--fs_selfservice/FS-SelfService/cgi/order_pkg.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/payment_results.html3
-rw-r--r--fs_selfservice/FS-SelfService/cgi/process_change_bill.html4
-rw-r--r--fs_selfservice/FS-SelfService/cgi/process_change_password.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/process_change_pay.html4
-rw-r--r--fs_selfservice/FS-SelfService/cgi/process_change_pkg.html4
-rw-r--r--fs_selfservice/FS-SelfService/cgi/process_change_ship.html4
-rwxr-xr-xfs_selfservice/FS-SelfService/cgi/process_order_pkg.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/process_order_recharge.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/process_svc_acct.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/process_svc_external.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/provision.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/recharge_prepay.html3
-rw-r--r--fs_selfservice/FS-SelfService/cgi/recharge_results.html3
-rw-r--r--fs_selfservice/FS-SelfService/cgi/selfservice.cgi5
-rw-r--r--fs_selfservice/FS-SelfService/cgi/view_cdr_details.html12
-rw-r--r--fs_selfservice/FS-SelfService/cgi/view_invoice.html2
-rw-r--r--fs_selfservice/FS-SelfService/cgi/view_usage.html5
-rw-r--r--fs_selfservice/FS-SelfService/cgi/view_usage_details.html12
-rwxr-xr-xfs_selfservice/java/freeside_create_ticket_example.java85
-rwxr-xr-xfs_selfservice/perl/xmlrpc-create_ticket.pl41
-rw-r--r--httemplate/browse/access_user.html24
-rw-r--r--httemplate/browse/part_pkg_taxclass.html2
-rw-r--r--httemplate/browse/rate_detail.html20
-rw-r--r--httemplate/config/config-view.cgi12
-rw-r--r--httemplate/docs/about.html4
-rw-r--r--httemplate/docs/credits.html4
-rw-r--r--httemplate/docs/man/FS/part_export/.cvs_is_on_crack0
-rwxr-xr-xhttemplate/edit/REAL_cust_pkg.cgi15
-rw-r--r--httemplate/edit/access_user.html16
-rwxr-xr-xhttemplate/edit/cust_credit.cgi8
-rw-r--r--httemplate/edit/cust_main/top_misc.html11
-rwxr-xr-xhttemplate/edit/cust_main_note.cgi12
-rwxr-xr-xhttemplate/edit/cust_pay.cgi7
-rwxr-xr-xhttemplate/edit/cust_refund.cgi8
-rw-r--r--httemplate/edit/elements/ApplicationCommon.html7
-rw-r--r--httemplate/edit/elements/edit.html20
-rw-r--r--httemplate/edit/elements/svc_Common.html73
-rw-r--r--httemplate/edit/mailinglistmember.html25
-rw-r--r--httemplate/edit/part_device.html29
-rwxr-xr-xhttemplate/edit/part_pkg.cgi11
-rwxr-xr-xhttemplate/edit/part_svc.cgi41
-rwxr-xr-xhttemplate/edit/process/REAL_cust_pkg.cgi5
-rw-r--r--httemplate/edit/process/mailinglistmember.html6
-rwxr-xr-xhttemplate/edit/process/rate_region.cgi2
-rwxr-xr-xhttemplate/edit/process/svc_acct.cgi33
-rwxr-xr-xhttemplate/edit/process/svc_domain.cgi30
-rw-r--r--httemplate/edit/process/svc_external.html10
-rw-r--r--httemplate/edit/process/svc_mailinglist.html11
-rw-r--r--httemplate/edit/process/svc_phone.html19
-rw-r--r--httemplate/edit/quick-charge.html3
-rw-r--r--httemplate/edit/rate_detail.html11
-rw-r--r--httemplate/edit/rate_region.cgi28
-rw-r--r--httemplate/edit/svc_Common.html2
-rwxr-xr-xhttemplate/edit/svc_acct.cgi156
-rw-r--r--httemplate/edit/svc_broadband.cgi7
-rwxr-xr-xhttemplate/edit/svc_domain.cgi185
-rw-r--r--httemplate/edit/svc_external.cgi103
-rwxr-xr-xhttemplate/edit/svc_forward.cgi45
-rw-r--r--httemplate/edit/svc_mailinglist.cgi25
-rw-r--r--httemplate/edit/svc_phone.cgi70
-rw-r--r--httemplate/elements/communigate_pro-accessmodes.html30
-rw-r--r--httemplate/elements/header.html4
-rw-r--r--httemplate/elements/location.html18
-rw-r--r--httemplate/elements/menu.html3
-rw-r--r--httemplate/elements/overlibmws.js103
-rw-r--r--httemplate/elements/overlibmws_crossframe.js13
-rw-r--r--httemplate/elements/overlibmws_draggable.js2
-rw-r--r--httemplate/elements/overlibmws_iframe.js2
-rw-r--r--httemplate/elements/phonenumber.html75
-rw-r--r--httemplate/elements/search-cust_main.html54
-rw-r--r--httemplate/elements/select-areacode.html7
-rw-r--r--httemplate/elements/select-did.html10
-rw-r--r--httemplate/elements/select-svc-domain.html50
-rw-r--r--httemplate/elements/select-svc_pbx.html57
-rw-r--r--httemplate/elements/select-table.html7
-rw-r--r--httemplate/elements/tr-input-beginning_ending.html8
-rw-r--r--httemplate/elements/tr-input-date-field.html7
-rw-r--r--httemplate/elements/tr-search-cust_main.html15
-rw-r--r--httemplate/elements/tr-select-cust_location.html10
-rw-r--r--httemplate/elements/tr-select-svc-domain.html34
-rw-r--r--httemplate/elements/tr-select-svc_pbx.html60
-rwxr-xr-xhttemplate/misc/bulk_pkg_increment_bill.cgi50
-rwxr-xr-xhttemplate/misc/cancel_pkg.html7
-rwxr-xr-xhttemplate/misc/delay_susp_pkg.html7
-rw-r--r--httemplate/misc/delete-mailinglistmember.html20
-rw-r--r--httemplate/misc/order_pkg.html3
-rw-r--r--httemplate/misc/process/copy-rate_detail.html2
-rw-r--r--httemplate/misc/rate_edit_excel.html9
-rw-r--r--httemplate/pref/pref-process.html4
-rw-r--r--httemplate/pref/pref.html30
-rwxr-xr-xhttemplate/search/cust_bill.html2
-rw-r--r--httemplate/search/cust_bill_pay.html50
-rw-r--r--httemplate/search/cust_bill_pkg.cgi92
-rw-r--r--httemplate/search/cust_main-zip.html11
-rwxr-xr-xhttemplate/search/cust_pkg.cgi41
-rwxr-xr-xhttemplate/search/elements/cust_pay_or_refund.html230
-rw-r--r--httemplate/search/elements/search-html.html5
-rwxr-xr-xhttemplate/search/h_cust_pay.html9
-rw-r--r--httemplate/search/inventory_item.html12
-rw-r--r--httemplate/search/mailinglistmember.html57
-rw-r--r--httemplate/search/part_pkg.html213
-rw-r--r--httemplate/search/report_cust_main-zip.html19
-rw-r--r--httemplate/search/report_employee_commission.html34
-rw-r--r--httemplate/search/report_h_cust_pay.html124
-rw-r--r--httemplate/search/report_prepaid_income.cgi288
-rw-r--r--httemplate/search/report_prepaid_income.html5
-rwxr-xr-xhttemplate/view/cust_main.cgi4
-rwxr-xr-xhttemplate/view/cust_main/notes.html10
-rw-r--r--httemplate/view/cust_main/payment_history.html9
-rw-r--r--httemplate/view/cust_main/payment_history/credit.html8
-rw-r--r--httemplate/view/cust_main/payment_history/payment.html8
-rw-r--r--httemplate/view/cust_main/payment_history/voided_payment.html4
-rw-r--r--httemplate/view/cust_main/tickets.html25
-rw-r--r--httemplate/view/cust_svc.cgi23
-rw-r--r--httemplate/view/elements/svc_export_settings.html34
-rw-r--r--httemplate/view/elements/tr.html9
-rwxr-xr-xhttemplate/view/svc_acct.cgi387
-rw-r--r--httemplate/view/svc_acct/basics.html158
-rw-r--r--httemplate/view/svc_acct/change_svc.html21
-rw-r--r--httemplate/view/svc_acct/change_svc_form.html23
-rw-r--r--httemplate/view/svc_acct/hosting.html38
-rw-r--r--httemplate/view/svc_acct/radius_usage.html77
-rw-r--r--httemplate/view/svc_acct/usage.html27
-rwxr-xr-xhttemplate/view/svc_domain.cgi198
-rw-r--r--httemplate/view/svc_domain/acct_defaults.html71
-rw-r--r--httemplate/view/svc_domain/basics.html134
-rw-r--r--httemplate/view/svc_domain/dns.html94
-rwxr-xr-xhttemplate/view/svc_forward.cgi32
-rw-r--r--httemplate/view/svc_mailinglist.cgi71
-rw-r--r--httemplate/view/svc_phone.cgi40
-rw-r--r--rpm/freeside.spec2
-rw-r--r--rt/etc/rt.spec137
-rw-r--r--rt/lib/RT/URI/freeside.pm16
240 files changed, 15109 insertions, 5499 deletions
diff --git a/ChangeLog b/ChangeLog
index 4114eed5c..f7a95cae6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,1496 @@
+2010-04-04 23:58 ivan
+
+ * conf/invoice_from: company email
+
+2010-04-04 23:57 ivan
+
+ * FS/bin/freeside-upgrade: require DBIx::DBSchema 0.39 for mysql
+
+2010-04-04 23:50 ivan
+
+ * FS/FS/part_export/thirdlane.pm: thirdlane deletion fix
+
+2010-04-04 22:20 ivan
+
+ * FS/FS/part_export/indosoft.pm: initial indosoft export, RT#4068
+
+2010-04-04 18:23 ivan
+
+ * httemplate/search/part_pkg.html: last fix for employee
+ commisssion report, RT#6991
+
+2010-04-04 17:59 ivan
+
+ * httemplate/elements/menu.html: add employee commission report to
+ menu, RT#6991
+
+2010-04-04 16:47 ivan
+
+ * FS/FS/Schema.pm: fix otaker upgrade
+
+2010-04-04 16:37 ivan
+
+ * FS/FS/cust_pay_void.pm: fix otaker upgrade
+
+2010-04-04 16:27 ivan
+
+ * FS/FS/: cust_attachment.pm, cust_main_note.pm: fix otaker upgrade
+ for cust_attachment & cust_main_note, hopefully
+
+2010-04-04 16:18 ivan
+
+ * FS/FS/: cust_attachment.pm, cust_main_note.pm: fix otaker upgrade
+ for cust_attachment & cust_main_note, hopefully
+
+2010-04-04 15:52 ivan
+
+ * FS/FS/: cust_main.pm: fix otaker upgrade for cust_main
+
+2010-04-04 15:44 ivan
+
+ * FS/FS/cust_main_note.pm: fix note editing of old notes until we
+ can fix the cust_main_note.otaker disaster, RT#7991
+
+2010-04-01 14:30 mark
+
+ * httemplate/search/elements/cust_main_dayranges.html: fix column
+ alignment
+
+2010-04-01 01:10 ivan
+
+ * FS/FS/part_pkg/: flat.pm, subscription.pm: fix nasty discount
+ fallout (i hope)
+
+2010-04-01 00:39 ivan
+
+ * FS/FS/part_pkg/flat.pm: fix nasty discount fallout (i hope)
+
+2010-03-31 21:43 mark
+
+ * FS/FS/UI/Web.pm, httemplate/search/report_receivables.cgi,
+ httemplate/search/elements/cust_main_dayranges.html,
+ httemplate/search/elements/search-html.html,
+ httemplate/search/elements/search.html: RT#866: links to process
+ payments from aging report
+
+2010-03-31 08:48 jeff
+
+ * FS/: MANIFEST, FS/part_export/dashcs_e911.pm: add dash carrier
+ services e911 support RT7103
+
+2010-03-31 00:41 mark
+
+ * httemplate/search/: report_receivables.cgi,
+ report_receivables.html, report_unapplied_cust_pay.html,
+ unapplied_cust_pay.html, elements/cust_main_dayranges.html:
+ RT#7266: aging reports as of a past date
+
+2010-03-31 00:35 ivan
+
+ * httemplate/: edit/process/cust_main_attach.cgi,
+ edit/process/cust_main_note.cgi, view/cust_main/attachments.html,
+ view/cust_main/notes.html: fix customer notes and attachments wrt
+ s/otaker/usernum/ changes; still need to look at the migration,
+ RT#7935
+
+2010-03-30 23:30 ivan
+
+ * FS/FS/Misc.pm: eliminate harmless "Use of uninitialized value
+ $enc in string eq" warnings
+
+2010-03-30 05:12 ivan
+
+ * httemplate/search/part_pkg.html, FS/FS/Schema.pm: employee
+ commission reporting, RT#6991
+
+2010-03-30 05:07 ivan
+
+ * httemplate/search/report_employee_commission.html,
+ FS/FS/cust_main.pm, FS/FS/cust_credit.pm, FS/FS/cust_event.pm,
+ FS/FS/part_event/Action/pkg_agent_credit.pm,
+ FS/FS/part_event/Action/pkg_employee_credit.pm,
+ FS/FS/part_event/Action/pkg_referral_credit.pm: employee
+ commission reporting, RT#6991
+
+2010-03-29 20:28 ivan
+
+ * FS/FS/Record.pm: regexp_sql
+
+2010-03-29 20:10 ivan
+
+ * FS/MANIFEST: employee (otaker / access_user) commissioning,
+ RT#6991
+
+2010-03-29 19:53 ivan
+
+ * httemplate/browse/access_user.html,
+ httemplate/edit/access_user.html, FS/FS/part_pkg.pm,
+ FS/FS/part_event/Action/pkg_agent_credit.pm,
+ FS/FS/part_event/Action/pkg_agent_credit_pkg.pm,
+ FS/FS/part_event/Action/pkg_employee_credit_pkg.pm,
+ FS/FS/part_event/Action/pkg_referral_credit.pm,
+ FS/FS/part_event/Action/pkg_referral_credit_pkg.pm,
+ FS/FS/part_event/Action/Mixin/credit_pkg.pm,
+ httemplate/elements/search-cust_main.html,
+ httemplate/elements/tr-search-cust_main.html: employee (otaker /
+ access_user) commissioning, RT#6991
+
+2010-03-29 19:52 ivan
+
+ * FS/FS/part_event/Action/pkg_employee_credit.pm: employee
+ commissions, RT#6991
+
+2010-03-29 19:04 ivan
+
+ * FS/FS/: part_event_condition.pm, part_event/Condition/balance.pm,
+ part_event/Condition/balance_age.pm,
+ part_event/Condition/balance_under.pm,
+ part_event/Condition/cust_bill_has_service.pm,
+ part_event/Condition/cust_bill_owed.pm,
+ part_event/Condition/cust_bill_owed_under.pm: fixes for MySQL
+ CAST drain bramage
+
+2010-03-29 02:18 mark
+
+ * FS/FS/Mason.pm, FS/FS/cust_main.pm,
+ httemplate/elements/select-user.html,
+ httemplate/elements/tr-select-user.html,
+ httemplate/graph/report_signupdate.html,
+ httemplate/graph/signupdate.cgi,
+ httemplate/graph/elements/monthly.html,
+ httemplate/graph/elements/report.html,
+ httemplate/search/cust_main.html: RT#884: search customers by
+ signup time of day
+
+2010-03-28 17:38 ivan
+
+ * FS/FS/cust_pay.pm: move from otaker to proper usernum FK
+
+2010-03-28 17:23 ivan
+
+ * FS/FS/: Schema.pm, Upgrade.pm, access_user.pm, banned_pay.pm,
+ cust_attachment.pm, cust_credit.pm, cust_main.pm,
+ cust_main_note.pm, cust_pay_void.pm, cust_pkg.pm,
+ cust_pkg_discount.pm, cust_pkg_reason.pm, cust_refund.pm,
+ otaker_Mixin.pm: move from otaker to proper usernum FK
+
+2010-03-26 23:21 ivan
+
+ * FS/FS/cust_bill_pkg_detail.pm: fix cust_bill_pkg_detail throwing
+ a fatal error w/MySQL
+
+2010-03-26 23:09 ivan
+
+ * httemplate/: view/cust_main.cgi, view/cust_main/notes.html,
+ edit/cust_main_note.cgi: resize customer not add popup, eliminate
+ needless <BR> in popup
+
+2010-03-26 21:37 ivan
+
+ * FS/FS/Upgrade.pm: these are now supported in supported in
+ DBIx-DBSchema and friends
+
+2010-03-26 20:43 ivan
+
+ * FS/FS/: reason.pm, tax_rate.pm: these are now supported in
+ supported in DBIx-DBSchema and friends
+
+2010-03-26 15:25 ivan
+
+ * httemplate/elements/: select-areacode.html, select-did.html: fix
+ E911 vs. DID selector on phone provision, RT#7819
+
+2010-03-26 14:43 ivan
+
+ * FS/FS/cust_pkg.pm: no DISTINCT ON in MySQL makes kittens cry
+
+2010-03-26 00:52 ivan
+
+ * httemplate/elements/: freeside-menu.css, freeside.css: that'll do
+ for now
+
+2010-03-25 22:02 ivan
+
+ * FS/FS/Schema.pm: kludge a fix for the MySQL statustext index
+ problem, fix s/serial/int/ for non-primary keys in
+ part_pkg_taxoverride, and s/TEXT/LONGTEXT/ ourselves until
+ DBIx::DBSchema 0.39
+
+2010-03-25 21:50 ivan
+
+ * FS/FS/UID.pm: don't warn about the configuration table during
+ setup
+
+2010-03-25 19:19 ivan
+
+ * bin/build_exten.php: adding build_exten.php since FreePBX won't
+ ship it
+
+2010-03-25 18:06 ivan
+
+ * rt/lib/RT/: Ticket_Overlay.pm: ticket auto-association in the
+ correct spot. how the hell did it get merged there? RT#7882
+
+2010-03-25 15:30 ivan
+
+ * httemplate/elements/header.html: fix new header in RT
+
+2010-03-25 15:21 ivan
+
+ * rt/lib/RT/User_Overlay.pm: fix user modification?
+
+2010-03-25 14:22 ivan
+
+ * rt/lib/RT/URI/freeside.pm: generate a stack backtrace for mystery
+ freeside link resolution problems
+
+2010-03-25 13:21 ivan
+
+ * httemplate/elements/: header.html, searchbar-address2.html,
+ searchbar-cust_bill.html, searchbar-cust_main.html,
+ searchbar-cust_svc.html, searchbar-prospect.html,
+ searchbar-ticket.html: when using a side menubar, put search
+ boxes on the side too
+
+2010-03-24 18:37 mark
+
+ * FS/FS/Mason.pm, httemplate/view/cust_main/notes.html: RT#6226:
+ security fix for customer notes
+
+2010-03-24 01:37 ivan
+
+ * FS/FS/Conf.pm, httemplate/search/cust_bill_pkg.cgi,
+ httemplate/search/report_prepaid_income.cgi: better prepaid
+ income reporting, with line item detail, RT#7776
+
+2010-03-23 02:13 ivan
+
+ * FS/FS/mailinglist.pm, FS/FS/mailinglistmember.pm,
+ FS/FS/svc_mailinglist.pm, FS/FS/part_export/communigate_pro.pm,
+ httemplate/elements/header.html,
+ httemplate/search/mailinglistmember.html: export svc_mailinglist
+ to CGP groups, RT#7514
+
+2010-03-23 01:27 ivan
+
+ * httemplate/images/: black-gray-side.png, gray-black-side.png:
+ goodbye and good riddance
+
+2010-03-22 20:53 ivan
+
+ * FS/: FS.pm, FS/h_svc_mailinglist.pm, t/h_svc_mailinglist.t,
+ FS/Mason.pm: adding svc_mailinglist for communigate "groups"
+ (mailing lists), RT#7514
+
+2010-03-22 20:47 ivan
+
+ * FS/MANIFEST, FS/FS/Schema.pm, FS/FS/mailinglist.pm,
+ FS/FS/mailinglistmember.pm, FS/FS/svc_mailinglist.pm,
+ FS/t/mailinglist.t, FS/t/mailinglistmember.t,
+ FS/t/svc_mailinglist.t, httemplate/edit/mailinglistmember.html,
+ httemplate/edit/part_svc.cgi,
+ httemplate/edit/svc_mailinglist.cgi,
+ httemplate/edit/process/mailinglistmember.html,
+ httemplate/edit/process/svc_mailinglist.html,
+ httemplate/misc/delete-mailinglistmember.html,
+ httemplate/search/mailinglistmember.html,
+ httemplate/view/svc_mailinglist.cgi: adding svc_mailinglist for
+ communigate "groups" (mailing lists), RT#7514
+
+2010-03-22 20:34 ivan
+
+ * httemplate/elements/freeside.css: little bit further, just a
+ little bit more
+
+2010-03-22 18:17 ivan
+
+ * httemplate/elements/menubar.html: don't like that <BR> after
+ all... for now
+
+2010-03-22 18:07 ivan
+
+ * httemplate/elements/freeside.css: wfm
+
+2010-03-22 18:04 ivan
+
+ * httemplate/elements/: xmenu.css, xmenu.top.css: purple on pink is
+ WAY too my little pony. man, its not easy being purple
+
+2010-03-22 12:46 ivan
+
+ * httemplate/elements/: freeside.css, menubar.html: 1.9-style
+ menubar was hurting my eyes
+
+2010-03-22 07:08 jeff
+
+ * FS/FS/tax_rate.pm: fix restore of setup and recur taxproducts on
+ tax data replacement
+
+2010-03-21 23:34 ivan
+
+ * httemplate/elements/freeside.css: fix link hover effect so it
+ doesn't underline A NAME tags
+
+2010-03-21 16:56 ivan
+
+ * httemplate/elements/freeside.css: fix inadvertant button styling
+
+2010-03-21 16:13 ivan
+
+ * FS/FS/Schema.pm, FS/FS/rate_detail.pm,
+ FS/FS/part_pkg/voip_cdr.pm, httemplate/browse/rate_detail.html,
+ httemplate/edit/rate_detail.html,
+ httemplate/edit/rate_region.cgi,
+ httemplate/edit/process/rate_region.cgi,
+ httemplate/misc/rate_edit_excel.html,
+ httemplate/misc/process/copy-rate_detail.html: connection fee for
+ initial N seconds support, RT#7018
+
+2010-03-21 12:34 ivan
+
+ * rt/etc/RT_SiteConfig.pm: make the fckeditor taller, way too small
+
+2010-03-20 22:18 ivan
+
+ * rt/FREESIDE_MODIFIED: think this fixes the "results box color
+ infects everything else" problem
+
+2010-03-20 16:30 ivan
+
+ * httemplate/docs/credits.html: more RT integration / reskin / 2.1,
+ RT#6640
+
+2010-03-20 16:22 ivan
+
+ * httemplate/: elements/menu.html,
+ elements/popup_link_onclick.html, images/cvv2.png,
+ images/cvv2_amex.png: more RT integration / reskin / 2.1, RT#6640
+
+2010-03-20 15:44 ivan
+
+ * httemplate/elements/: freeside-menu.css, header.html, xmenu.css,
+ xmenu.js, xmenu.top.css: more RT integration / reskin / 2.1,
+ RT#6640
+
+2010-03-20 15:11 ivan
+
+ * httemplate/elements/calendar-win2k-2.css,
+ httemplate/elements/freeside-menu.css,
+ httemplate/elements/header.html, httemplate/elements/menu.html,
+ httemplate/elements/xmenu.top.css,
+ httemplate/elements/xmenu.top.js,
+ httemplate/images/arrow.down.black.png,
+ httemplate/images/black-gradient.png,
+ httemplate/images/black-gray-gradient.png, rt/FREESIDE_MODIFIED,
+ httemplate/elements/freeside.css: more RT integration / reskin /
+ 2.1, RT#6640
+
+2010-03-19 01:27 ivan
+
+ * httemplate/: docs/cvv2.html, elements/header-minimal.html,
+ elements/header-popup.html, elements/header.html,
+ elements/tr-justtitle.html, elements/tr-title.html,
+ elements/freeside-menu.css, elements/menu.html,
+ elements/menubar.html, elements/xmenu.top.css: skin RT 3.8,
+ slight new look for 2.1, RT#6640
+
+2010-03-19 01:26 ivan
+
+ * rt/FREESIDE_MODIFIED: skin RT 3.8, RT#6640
+
+2010-03-19 01:20 mark
+
+ * httemplate/misc/batch-cust_pay.html: RT#7812: confirm before
+ closing quick payment entry
+
+2010-03-18 01:02 ivan
+
+ * httemplate/edit/cust_main/top_misc.html: signup date fix?
+
+2010-03-18 00:59 ivan
+
+ * FS/FS/Schema.pm, FS/FS/cust_bill.pm, FS/FS/cust_main.pm,
+ FS/FS/cust_pkg.pm, FS/FS/part_pkg.pm,
+ httemplate/edit/quick-charge.html,
+ FS/FS/part_event/Condition/cust_bill_has_noauto.pm,
+ FS/FS/part_event/Condition/cust_bill_hasnt_noauto.pm,
+ httemplate/edit/process/quick-charge.cgi,
+ httemplate/edit/process/quick-cust_pkg.cgi,
+ httemplate/misc/order_pkg.html,
+ httemplate/view/cust_main/one_time_charge_link.html,
+ httemplate/view/cust_main/order_pkg_link.html,
+ httemplate/view/cust_main/packages/status.html: disable
+ auto-billing of specific customer packages, RT#6378
+
+2010-03-16 01:05 mark
+
+ * httemplate/edit/cust_main_note.cgi: minor bugfix
+
+2010-03-16 00:49 mark
+
+ * httemplate/elements/fckeditor/: fckconfig.js, fckeditor.js,
+ fckpackager.xml, fckstyles.xml, fcktemplates.xml,
+ editor/fckdebug.html, editor/fckdialog.html,
+ editor/fckeditor.html, editor/fckeditor.original.html,
+ editor/css/fck_editorarea.css, editor/css/fck_internal.css,
+ editor/css/fck_showtableborders_gecko.css,
+ editor/css/images/block_address.png,
+ editor/css/images/block_blockquote.png,
+ editor/css/images/block_div.png, editor/css/images/block_h1.png,
+ editor/css/images/block_h2.png, editor/css/images/block_h3.png,
+ editor/css/images/block_h4.png, editor/css/images/block_h5.png,
+ editor/css/images/block_h6.png, editor/css/images/block_p.png,
+ editor/css/images/block_pre.png,
+ editor/css/images/fck_plugin.gif, editor/dialog/fck_about.html,
+ editor/dialog/fck_anchor.html, editor/dialog/fck_button.html,
+ editor/dialog/fck_checkbox.html,
+ editor/dialog/fck_colorselector.html, editor/dialog/fck_div.html,
+ editor/dialog/fck_docprops.html, editor/dialog/fck_flash.html,
+ editor/dialog/fck_form.html, editor/dialog/fck_hiddenfield.html,
+ editor/dialog/fck_image.html, editor/dialog/fck_link.html,
+ editor/dialog/fck_listprop.html, editor/dialog/fck_paste.html,
+ editor/dialog/fck_radiobutton.html,
+ editor/dialog/fck_replace.html, editor/dialog/fck_scayt.html,
+ editor/dialog/fck_select.html, editor/dialog/fck_smiley.html,
+ editor/dialog/fck_source.html,
+ editor/dialog/fck_specialchar.html,
+ editor/dialog/fck_spellerpages.html,
+ editor/dialog/fck_table.html, editor/dialog/fck_tablecell.html,
+ editor/dialog/fck_template.html, editor/dialog/fck_textarea.html,
+ editor/dialog/fck_textfield.html,
+ editor/dialog/common/fck_dialog_common.css,
+ editor/dialog/common/fck_dialog_common.js,
+ editor/dialog/fck_docprops/fck_document_preview.html,
+ editor/dialog/fck_flash/fck_flash.js,
+ editor/dialog/fck_flash/fck_flash_preview.html,
+ editor/dialog/fck_image/fck_image.js,
+ editor/dialog/fck_image/fck_image_preview.html,
+ editor/dialog/fck_link/fck_link.js,
+ editor/dialog/fck_select/fck_select.js,
+ editor/dialog/fck_spellerpages/spellerpages/spellChecker.js,
+ editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css,
+ editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl,
+ editor/filemanager/browser/default/browser.css,
+ editor/filemanager/browser/default/browser.html,
+ editor/filemanager/browser/default/frmactualfolder.html,
+ editor/filemanager/browser/default/frmcreatefolder.html,
+ editor/filemanager/browser/default/frmfolders.html,
+ editor/filemanager/browser/default/frmresourceslist.html,
+ editor/filemanager/browser/default/frmresourcetype.html,
+ editor/filemanager/browser/default/frmupload.html,
+ editor/filemanager/browser/default/js/common.js,
+ editor/filemanager/browser/default/js/fckxml.js,
+ editor/js/fckadobeair.js, editor/js/fckeditorcode_gecko.js,
+ editor/js/fckeditorcode_ie.js,
+ editor/lang/_translationstatus.txt, editor/lang/af.js,
+ editor/lang/ar.js, editor/lang/bg.js, editor/lang/bn.js,
+ editor/lang/bs.js, editor/lang/ca.js, editor/lang/cs.js,
+ editor/lang/da.js, editor/lang/de.js, editor/lang/el.js,
+ editor/lang/en-au.js, editor/lang/en-ca.js, editor/lang/en-uk.js,
+ editor/lang/en.js, editor/lang/eo.js, editor/lang/es.js,
+ editor/lang/et.js, editor/lang/eu.js, editor/lang/fa.js,
+ editor/lang/fi.js, editor/lang/fo.js, editor/lang/fr-ca.js,
+ editor/lang/fr.js, editor/lang/gl.js, editor/lang/gu.js,
+ editor/lang/he.js, editor/lang/hi.js, editor/lang/hr.js,
+ editor/lang/hu.js, editor/lang/is.js, editor/lang/it.js,
+ editor/lang/ja.js, editor/lang/km.js, editor/lang/ko.js,
+ editor/lang/lt.js, editor/lang/lv.js, editor/lang/mn.js,
+ editor/lang/ms.js, editor/lang/nb.js, editor/lang/nl.js,
+ editor/lang/no.js, editor/lang/pl.js, editor/lang/pt-br.js,
+ editor/lang/pt.js, editor/lang/ro.js, editor/lang/ru.js,
+ editor/lang/sk.js, editor/lang/sl.js, editor/lang/sr-latn.js,
+ editor/lang/sr.js, editor/lang/sv.js, editor/lang/th.js,
+ editor/lang/tr.js, editor/lang/uk.js, editor/lang/vi.js,
+ editor/lang/zh-cn.js, editor/lang/zh.js,
+ editor/plugins/autogrow/fckplugin.js,
+ editor/plugins/placeholder/fck_placeholder.html,
+ editor/plugins/placeholder/fckplugin.js,
+ editor/plugins/placeholder/lang/de.js,
+ editor/plugins/placeholder/lang/en.js,
+ editor/plugins/placeholder/lang/es.js,
+ editor/plugins/placeholder/lang/fr.js,
+ editor/plugins/placeholder/lang/it.js,
+ editor/plugins/placeholder/lang/pl.js,
+ editor/plugins/simplecommands/fckplugin.js,
+ editor/plugins/tablecommands/fckplugin.js,
+ editor/skins/_fckviewstrips.html,
+ editor/skins/default/fck_dialog.css,
+ editor/skins/default/fck_dialog_ie6.js,
+ editor/skins/default/fck_editor.css,
+ editor/skins/default/fck_strip.gif,
+ editor/skins/default/images/dialog.sides.gif,
+ editor/skins/default/images/dialog.sides.png,
+ editor/skins/default/images/dialog.sides.rtl.png,
+ editor/skins/default/images/sprites.gif,
+ editor/skins/default/images/sprites.png,
+ editor/skins/office2003/fck_dialog.css,
+ editor/skins/office2003/fck_dialog_ie6.js,
+ editor/skins/office2003/fck_editor.css,
+ editor/skins/office2003/fck_strip.gif,
+ editor/skins/office2003/images/dialog.sides.gif,
+ editor/skins/office2003/images/dialog.sides.png,
+ editor/skins/office2003/images/dialog.sides.rtl.png,
+ editor/skins/office2003/images/sprites.gif,
+ editor/skins/office2003/images/sprites.png,
+ editor/skins/silver/fck_dialog.css,
+ editor/skins/silver/fck_dialog_ie6.js,
+ editor/skins/silver/fck_editor.css,
+ editor/skins/silver/fck_strip.gif,
+ editor/skins/silver/images/dialog.sides.gif,
+ editor/skins/silver/images/dialog.sides.png,
+ editor/skins/silver/images/dialog.sides.rtl.png,
+ editor/skins/silver/images/sprites.gif,
+ editor/skins/silver/images/sprites.png: FCKeditor 2.6.6
+
+2010-03-15 19:51 mark
+
+ * httemplate/: edit/cust_main_note.cgi, view/cust_main/notes.html,
+ elements/htmlarea.html: RT#6226: fckeditor for customer notes
+
+2010-03-15 19:14 ivan
+
+ * rt/etc/rt.spec: remove rt.spec, borking our build somehow
+
+2010-03-15 18:00 ivan
+
+ * httemplate/search/: cust_main-zip.html,
+ report_cust_main-zip.html: w/svc_whatever option on zip code
+ distribution report, RT#7784
+
+2010-03-15 15:31 mark
+
+ * FS/bin/freeside-paymentech-upload: RT#7473: add -p option
+
+2010-03-15 00:13 ivan
+
+ * httemplate/edit/svc_broadband.cgi: fix editing svc_broadband
+ service w/no ip address, RT#7786
+
+2010-03-14 23:18 ivan
+
+ * httemplate/search/elements/cust_pay_or_refund.html: deleted
+ payment report, RT#7694
+
+2010-03-14 23:10 ivan
+
+ * httemplate/search/: h_cust_pay.html, report_h_cust_pay.html,
+ elements/cust_pay_or_refund.html: deleted payment report, RT#7694
+
+2010-03-14 19:06 ivan
+
+ * httemplate/edit/part_pkg.cgi: fix diabled package optional
+ reporting classes still selectable on package def edit, RT#7658
+
+2010-03-13 15:50 ivan
+
+ * FS/FS/cust_pkg.pm: quiet extraneous warnings from
+ expire_months/start_1st stuff, getting in the way of debugging
+ for ncic, RT#7780
+
+2010-03-12 13:56 ivan
+
+ * FS/FS/Conf.pm, FS/FS/svc_phone.pm, httemplate/edit/svc_phone.cgi:
+ add svc_phone-phone_name-max_length config, RT#7047
+
+2010-03-12 13:29 ivan
+
+ * FS/FS/cust_location.pm, FS/FS/cust_main.pm,
+ FS/FS/location_Mixin.pm, FS/FS/svc_phone.pm,
+ httemplate/edit/svc_phone.cgi,
+ httemplate/edit/elements/svc_Common.html,
+ httemplate/edit/process/svc_phone.html,
+ httemplate/elements/tr-select-cust_location.html,
+ httemplate/view/svc_phone.cgi: finishing e911/svc_phone location,
+ RT#7047
+
+2010-03-12 03:48 mark
+
+ * httemplate/edit/svc_broadband.cgi: RT#7765: sort broadband router
+ names
+
+2010-03-11 19:36 ivan
+
+ * FS/FS/Schema.pm, FS/FS/cust_pkg.pm, FS/FS/location_Mixin.pm,
+ FS/FS/svc_phone.pm, FS/t/location_Mixin.t,
+ httemplate/edit/svc_phone.cgi,
+ httemplate/edit/elements/edit.html,
+ httemplate/edit/elements/svc_Common.html,
+ httemplate/elements/location.html,
+ httemplate/elements/tr-select-cust_location.html,
+ httemplate/view/svc_phone.cgi: add location to svc_phone, RT#7047
+
+2010-03-11 19:30 ivan
+
+ * FS/MANIFEST: add location to svc_phone, RT#7047
+
+2010-03-10 19:27 ivan
+
+ * FS/FS/TicketSystem/RT_External.pm,
+ httemplate/view/cust_main/tickets.html: add queue selection to
+ customer ticket creation, RT#7656
+
+2010-03-10 18:15 ivan
+
+ * httemplate/docs/credits.html: Mark Wells is now a member of the
+ core team. Kristian Hoffman has been moved to the core emeritus
+
+2010-03-10 00:20 mark
+
+ * httemplate/edit/svc_acct.cgi: fix probably misplaced text field
+
+2010-03-09 23:50 mark
+
+ * httemplate/edit/svc_domain.cgi: fix probably misplaced text field
+
+2010-03-09 22:52 ivan
+
+ * FS/FS/cust_pkg.pm: oops, move start_1st and expire_months
+ handling from check to insert, so it doesn't get triggered on
+ edit, RT#7347
+
+2010-03-09 22:47 ivan
+
+ * httemplate/edit/process/REAL_cust_pkg.cgi: fix warning about
+ adding a start date to actually check its *added*, RT#7352
+
+2010-03-09 15:47 ivan
+
+ * httemplate/misc/delay_susp_pkg.html: tyop too
+
+2010-03-09 14:37 mark
+
+ * httemplate/misc/cancel_pkg.html: fix typo
+
+2010-03-09 13:57 mark
+
+ * FS/FS/prepay_credit.pm, httemplate/edit/prepay_credit.cgi,
+ httemplate/edit/process/prepay_credit.cgi: RT#7407, variable
+ length prepaid card codes
+
+2010-03-09 00:37 ivan
+
+ * FS/FS/part_pkg/sql_external.pm: move sql_external to use
+ recur_Common, RT#7212
+
+2010-03-09 00:05 ivan
+
+ * httemplate/edit/REAL_cust_pkg.cgi: date editing fix, fallout from
+ date_format
+
+2010-03-08 18:43 ivan
+
+ * FS/FS/: cust_pkg.pm, part_pkg/flat.pm: a package that starts on
+ the 1st and expires after N months, RT#7738
+
+2010-03-08 18:39 ivan
+
+ * FS/FS/cust_main.pm: fix ACH refunds w/IPPay. B:OP 3.01 and IPPay
+ 0.05_02 required. RT#_7673
+
+2010-03-08 18:12 ivan
+
+ * FS/FS/cust_pkg.pm: init ticket system new-style
+
+2010-03-08 16:23 jeff
+
+ * FS/FS/Setup.pm: tyop broke populate_initial_data
+
+2010-03-08 16:18 jeff
+
+ * FS/FS/reason_type.pm: and this is not 1.7.x
+
+2010-03-08 15:07 jeff
+
+ * FS/FS/part_export/prizm.pm: try a delete before adding an element
+ to prizm
+
+2010-03-08 14:13 ivan
+
+ * FS/FS/cust_main.pm: fix ACH refunds w/IPPay. B:OP 3.01 and IPPay
+ 0.05_02 required. RT#_7673
+
+2010-03-08 02:57 ivan
+
+ * FS/FS/Conf.pm, FS/FS/cust_bill.pm,
+ httemplate/edit/REAL_cust_pkg.cgi,
+ httemplate/edit/cust_credit.cgi, httemplate/edit/cust_pay.cgi,
+ httemplate/edit/cust_refund.cgi,
+ httemplate/edit/quick-charge.html,
+ httemplate/edit/elements/ApplicationCommon.html,
+ httemplate/elements/tr-input-beginning_ending.html,
+ httemplate/elements/tr-input-date-field.html,
+ httemplate/misc/cancel_pkg.html,
+ httemplate/misc/delay_susp_pkg.html,
+ httemplate/misc/order_pkg.html,
+ httemplate/search/report_prepaid_income.html,
+ httemplate/view/cust_main/payment_history.html,
+ httemplate/view/cust_main/payment_history/credit.html,
+ httemplate/view/cust_main/payment_history/payment.html,
+ httemplate/view/cust_main/payment_history/voided_payment.html:
+ proper use of date_format config for international date formats,
+ RT#7009
+
+2010-03-07 23:02 ivan
+
+ * FS/FS/Conf.pm, FS/FS/Schema.pm, FS/FS/svc_Domain_Mixin.pm,
+ FS/FS/svc_acct.pm, FS/FS/svc_phone.pm, FS/MANIFEST,
+ FS/FS/part_export/netsapiens.pm, FS/t/svc_Domain_Mixin.t,
+ httemplate/edit/svc_phone.cgi,
+ httemplate/edit/elements/svc_Common.html,
+ httemplate/elements/select-svc-domain.html,
+ httemplate/elements/tr-select-svc-domain.html,
+ httemplate/view/svc_phone.cgi: domain names in netsapiens export
+ (domain name association w/svc_phone), RT#5864
+
+2010-03-07 10:07 jeff
+
+ * FS/FS/tax_rate.pm: pass format and correct filenames
+
+2010-03-05 11:09 ivan
+
+ * FS/FS/part_export/grandstream.pm: random nits for grandstream
+ provisioning :UI, docs, java path, s/system/IPC::Run/ for better
+ error handling. RT#7132
+
+2010-03-05 11:02 ivan
+
+ * httemplate/edit/part_device.html,
+ FS/FS/part_export/grandstream.pm: random nits for grandstream
+ provisioning :UI, docs, java path, s/system/IPC::Run/ for better
+ error handling. RT#7132
+
+2010-03-05 10:25 ivan
+
+ * httemplate/docs/ssh.html: moved to wiki
+
+2010-03-05 10:24 ivan
+
+ * FS/FS/part_export/: domain_shellcommands.pm,
+ forward_shellcommands.pm, phone_shellcommands.pm,
+ shellcommands.pm, shellcommands_withdomain.pm, textradius.pm,
+ vpopmail.pm, www_shellcommands.pm: point to wiki docs
+
+2010-03-05 10:10 ivan
+
+ * FS/FS/part_export/grandstream.pm,
+ httemplate/edit/part_device.html: random nits for grandstream
+ provisioning :UI, docs, java path, s/system/IPC::Run/ for better
+ error handling. RT#7132
+
+2010-03-03 21:31 jeff
+
+ * FS/FS/cust_bill.pm: always show the previous section when
+ previous_balance-summary_only is enabled
+
+2010-03-02 17:39 jeff
+
+ * FS/FS/tax_rate.pm, httemplate/misc/tax-import.cgi: tweak,
+ rearrange, and avoid the vacuum
+
+2010-03-02 17:00 jeff
+
+ * httemplate/edit/cust_main/bottomfixup.js: clear geocode when we
+ DO have plus four
+
+2010-03-02 09:18 ivan
+
+ * httemplate/: search/elements/search-html.html,
+ misc/bulk_pkg_increment_bill.cgi, search/cust_pkg.cgi: UI: get
+ rid of undocumented extra_choices_callback in search.html: a
+ terrible place to put action links from a UI perspective, move
+ package links to html_init, now consitent with customer links,
+ change label on popup from "increment bill date" to "increment
+ next bill date", RT#7132
+
+2010-03-01 14:18 ivan
+
+ * httemplate/edit/elements/svc_Common.html: fixup editing w/manual
+ inventory, RT#7010
+
+2010-03-01 14:00 ivan
+
+ * httemplate/elements/select-table.html: fix up editing services
+ w/manual select from inventory, RT#7010
+
+2010-03-01 13:56 ivan
+
+ * FS/FS/svc_Common.pm: fix up editing services w/manual select from
+ inventory, RT#7010
+
+2010-03-01 13:36 ivan
+
+ * httemplate/edit/elements/edit.html: fix up editing services
+ w/manual select from inventory, RT#7010
+
+2010-03-01 13:05 ivan
+
+ * httemplate/search/inventory_item.html: fix inventory item links
+ to non-svc_acct services, RT#7010
+
+2010-03-01 11:38 ivan
+
+ * FS/FS/svc_Common.pm: enable manual selection from inventory
+ dropdowns for svc_broadband, svc_external & svc_phone, RT#7010
+
+2010-03-01 11:29 ivan
+
+ * httemplate/: edit/part_svc.cgi, edit/elements/edit.html,
+ edit/elements/svc_Common.html, elements/select-table.html: enable
+ manual selection from inventory dropdowns for svc_broadband,
+ svc_external & svc_phone, RT#7010
+
+2010-03-01 11:10 jeff
+
+ * Makefile: get along better with RTless installs
+
+2010-02-26 19:15 ivan
+
+ * httemplate/edit/cust_refund.cgi: expiration date not meaningful
+ for non-CARD, RT#7419
+
+2010-02-26 18:59 ivan
+
+ * FS/FS/cust_bill_ApplicationCommon.pm: fix rare "Illegal division
+ by zero" error applying things when using weights, RT#7491
+
+2010-02-24 15:32 mark
+
+ * httemplate/: misc/bulk_pkg_increment_bill.cgi,
+ misc/process/bulk_pkg_increment_bill.cgi, search/cust_pkg.cgi:
+ RT#7132: bulk increment package bill dates
+
+2010-02-22 02:35 ivan
+
+ * FS/FS/part_export/communigate_pro.pm: communigate: domain account
+ defaults, RT#7083
+
+2010-02-22 01:18 ivan
+
+ * httemplate/edit/svc_domain.cgi: communigate: domain account
+ defaults, RT#7083
+
+2010-02-22 01:14 ivan
+
+ * FS/FS/Schema.pm, FS/FS/svc_acct.pm, FS/FS/svc_domain.pm,
+ httemplate/edit/part_svc.cgi,
+ httemplate/edit/process/svc_domain.cgi,
+ httemplate/view/svc_domain.cgi, httemplate/view/elements/tr.html,
+ httemplate/view/svc_acct/basics.html,
+ httemplate/view/svc_domain/acct_defaults.html,
+ httemplate/view/svc_domain/basics.html,
+ httemplate/view/svc_domain/dns.html,
+ httemplate/edit/svc_acct.cgi: communigate: domain account
+ defaults, RT#7083
+
+2010-02-21 23:13 ivan
+
+ * FS/FS/svc_domain.pm, FS/FS/part_export/communigate_pro.pm,
+ httemplate/edit/svc_domain.cgi, httemplate/view/svc_domain.cgi:
+ communigate: domain aliases, enabled services & administrator
+ domain, RT#7083
+
+2010-02-21 19:22 ivan
+
+ * FS/FS/Schema.pm, FS/FS/part_export/communigate_pro.pm,
+ FS/FS/svc_acct.pm, FS/FS/svc_domain.pm,
+ httemplate/edit/svc_domain.cgi,
+ httemplate/edit/process/svc_domain.cgi,
+ httemplate/view/svc_domain.cgi,
+ httemplate/edit/process/svc_acct.cgi: communigate: domain
+ aliases, enabled services, RT#7083
+
+2010-02-21 14:54 ivan
+
+ * FS/FS/part_export/communigate_pro.pm, FS/FS/Conf.pm,
+ httemplate/edit/svc_forward.cgi, httemplate/view/svc_forward.cgi:
+ communigate forwarders, RT#7083
+
+2010-02-21 01:19 ivan
+
+ * FS/FS/Schema.pm, FS/FS/svc_acct.pm,
+ FS/FS/part_export/communigate_pro.pm,
+ httemplate/edit/svc_acct.cgi,
+ httemplate/view/svc_acct/basics.html: communigate, RT#7083
+
+2010-02-20 23:32 ivan
+
+ * httemplate/view/svc_acct/basics.html: communigate, RT#7083
+
+2010-02-20 23:28 ivan
+
+ * FS/FS/Schema.pm, FS/FS/svc_acct.pm,
+ FS/FS/part_export/communigate_pro.pm,
+ httemplate/edit/svc_acct.cgi,
+ httemplate/view/elements/svc_export_settings.html,
+ httemplate/view/svc_acct/tr.html: communigate, RT#7083
+
+2010-02-20 19:16 ivan
+
+ * FS/FS/part_svc.pm, FS/FS/svc_acct.pm,
+ FS/FS/part_export/communigate_pro.pm,
+ httemplate/edit/part_svc.cgi, httemplate/edit/svc_acct.cgi,
+ httemplate/edit/process/svc_acct.cgi,
+ httemplate/elements/communigate_pro-accessmodes.html,
+ httemplate/pref/pref-process.html, httemplate/pref/pref.html,
+ httemplate/view/elements/svc_export_settings.html,
+ httemplate/view/svc_acct/basics.html: communigate, RT#7083
+
+2010-02-20 14:34 ivan
+
+ * FS/FS/Conf.pm: communigate pro provisioning, RT#7083
+
+2010-02-20 14:31 ivan
+
+ * httemplate/view/elements/svc_export_settings.html,
+ httemplate/view/svc_acct/basics.html,
+ httemplate/view/svc_acct/change_svc.html,
+ httemplate/view/svc_acct/change_svc_form.html,
+ httemplate/view/svc_acct/hosting.html,
+ httemplate/view/svc_acct/radius_usage.html,
+ httemplate/view/svc_acct/usage.html, FS/FS/Record.pm,
+ FS/FS/Schema.pm, FS/FS/svc_acct.pm,
+ FS/FS/part_export/communigate_pro.pm,
+ httemplate/edit/svc_acct.cgi, httemplate/view/svc_acct.cgi,
+ httemplate/view/svc_domain.cgi: communigate pro provisioning,
+ RT#7083
+
+2010-02-17 19:48 mark
+
+ * FS/bin/freeside-void-payments: Documentation cleanup
+
+2010-02-17 01:00 ivan
+
+ * httemplate/edit/svc_Common.html: fix svc_pbx provisioniing
+
+2010-02-17 00:30 ivan
+
+ * FS/FS/part_export.pm, FS/FS/part_export/communigate_pro.pm,
+ FS/FS/Conf.pm, FS/FS/Schema.pm, FS/FS/svc_Common.pm,
+ FS/FS/svc_domain.pm, httemplate/edit/svc_domain.cgi,
+ httemplate/edit/process/svc_domain.cgi,
+ httemplate/view/svc_domain.cgi, FS/FS/cust_svc.pm: communigate
+ pro provisioning, RT#7083
+
+2010-02-16 10:36 ivan
+
+ * FS/FS/Conf.pm,
+ fs_selfservice/FS-SelfService/cgi/make_ach_payment.html,
+ fs_selfservice/FS-SelfService/cgi/make_payment.html,
+ FS/FS/ClientAPI/MyAccount.pm: option to uncheck the save checkbox
+ in self-service by default, RT#6955
+
+2010-02-15 18:19 jeff
+
+ * FS/FS/tax_rate.pm, httemplate/misc/tax-import.cgi,
+ httemplate/misc/process/tax-import.cgi: refactor cch tax import
+ to remove tons of false laziness and improve flexibility; allow
+ reload from local files
+
+2010-02-15 08:34 jeff
+
+ * htetc/handler.pl: lexical instead of dynamic warnings
+
+2010-02-15 06:39 jeff
+
+ * htetc/handler.pl: get rid of some very annoying and pointless
+ noise
+
+2010-02-14 18:09 ivan
+
+ * FS/FS/Conf.pm, FS/FS/Misc.pm, debian/control: switch to
+ Email::Sender and add options for every kind of mail encryption &
+ authentication, RT#7285
+
+2010-02-12 18:53 ivan
+
+ * FS/FS/svc_external.pm, httemplate/edit/svc_Common.html,
+ httemplate/edit/svc_external.cgi,
+ httemplate/edit/elements/svc_Common.html,
+ httemplate/edit/process/svc_external.html: svc_external.title
+ from inventory, RT#7010
+
+2010-02-12 18:16 ivan
+
+ * httemplate/search/: inventory_item.html: fix inventory item
+ search w/customer classes
+
+2010-02-12 15:44 ivan
+
+ * FS/FS/ClientAPI/MyAccount.pm: don't return an error about
+ changing the cust_main record to the user as a payment processing
+ error, log a bunch of verbose stuff in this case so we can track
+ down wtf is going on, RT#6955
+
+2010-02-12 14:42 ivan
+
+ * httemplate/search/: svc_acct.cgi, elements/search-html.html:
+ totals time used on svc_acct report
+
+2010-02-12 13:49 ivan
+
+ * fs_selfservice/java/freeside_create_ticket_example.java: tyop,
+ RT#7007
+
+2010-02-12 11:28 ivan
+
+ * FS/FS/ClientAPI/MyAccount.pm, FS/FS/TicketSystem/RT_Internal.pm,
+ fs_selfservice/java/freeside_create_ticket_example.java,
+ fs_selfservice/perl/xmlrpc-create_ticket.pl: add mime_type option
+ to self-service ticket create, RT#7007
+
+2010-02-12 11:14 ivan
+
+ * fs_selfservice/perl/xmlrpc-create_ticket.pl,
+ FS/FS/ClientAPI/MyAccount.pm,
+ fs_selfservice/java/freeside_create_ticket_example.java: add
+ queue option to self-service ticket create, RT#7007
+
+2010-02-11 19:26 ivan
+
+ * FS/FS/part_export/thirdlane.pm: add omit_countrycode option,
+ RT#7379
+
+2010-02-11 17:35 ivan
+
+ * FS/FS/ClientAPI/MyAccount.pm, FS/FS/TicketSystem/RT_External.pm,
+ FS/FS/TicketSystem/RT_Internal.pm,
+ fs_selfservice/FS-SelfService/SelfService.pm, FS/FS/Conf.pm,
+ fs_selfservice/java/freeside_create_ticket_example.java,
+ fs_selfservice/perl/xmlrpc-create_ticket.pl,
+ httemplate/view/cust_svc.cgi, rt/lib/RT/URI/freeside.pm: add
+ ticket creation to self-service API, RT#7007
+
+2010-02-11 15:14 jeff
+
+ * FS/FS/part_export/grandstream.pm: fix quoting
+
+2010-02-09 18:12 mark
+
+ * FS/FS/: pay_batch.pm, pay_batch/RBC.pm: RT#7274: accept CR/LF in
+ RBC batch import
+
+2010-02-09 13:49 ivan
+
+ * rt/lib/: RT.pm, RT.pm.in: add NoSignalHandlers option to
+ RT::Init() so we can pull things up the way we want under
+ self-service, RT#7007
+
+2010-02-09 11:56 ivan
+
+ * httemplate/edit/process/discount.html: doh, fix for discounts
+ winding up with both amount and percent, RT#6679
+
+2010-02-08 19:37 ivan
+
+ * rt/lib/RT/Config.pm: fix RT wackiness when loaded concurrently
+ with Fcntl
+
+2010-02-08 11:01 ivan
+
+ * FS/: FS.pm, FS/h_svc_pbx.pm, t/h_svc_pbx.t, MANIFEST:
+ h_svc_pbx.pm, RT#7322
+
+2010-02-08 07:37 jeff
+
+ * FS/FS/Mason.pm, FS/FS/Schema.pm, FS/FS/export_device.pm,
+ FS/FS/part_device.pm, FS/FS/part_export.pm,
+ FS/FS/phone_device.pm, FS/FS/part_export/grandstream.pm,
+ FS/FS/part_export/netsapiens.pm, FS/t/export_device.t, Makefile,
+ FS/MANIFEST, httemplate/edit/part_device.html,
+ httemplate/edit/process/part_device.html,
+ httemplate/elements/checkboxes-table.html,
+ httemplate/misc/phone_device_config.html,
+ httemplate/view/svc_phone.cgi: grandstream device configuration
+ support #4220
+
+2010-02-05 18:57 ivan
+
+ * FS/FS/: cust_pkg_discount.pm, part_pkg/flat.pm: discount
+ reporting, RT#6679
+
+2010-02-05 18:54 ivan
+
+ * FS/FS/Schema.pm, FS/FS/Mason.pm, FS/FS/cust_bill_pkg.pm,
+ FS/FS/cust_bill_pkg_discount.pm, FS/FS/cust_main.pm,
+ FS/FS/cust_pkg.pm, FS/FS.pm, FS/MANIFEST,
+ FS/FS/Report/Table/Monthly.pm, FS/t/cust_bill_pkg_discount.t,
+ httemplate/elements/menu.html,
+ httemplate/misc/delete-cust_pkg_discount.html,
+ httemplate/search/cust_bill_pkg_discount.html,
+ httemplate/search/cust_pkg_discount.html,
+ httemplate/search/report_cust_bill_pkg_discount.html,
+ httemplate/search/report_cust_pkg_discount.html: discount
+ reporting, RT#6679
+
+2010-02-04 19:02 ivan
+
+ * httemplate/edit/process/cust_pkg_discount.html: discounts,
+ RT#6679
+
+2010-02-04 18:39 ivan
+
+ * httemplate/view/cust_main/order_pkg_link.html, FS/FS/cust_pkg.pm,
+ FS/FS/cust_pkg_discount.pm, FS/FS/discount.pm,
+ FS/FS/part_pkg/flat.pm, httemplate/edit/cust_pkg_discount.html,
+ httemplate/edit/discount.html,
+ httemplate/edit/process/discount.html,
+ httemplate/edit/process/quick-cust_pkg.cgi,
+ httemplate/elements/tr-select-discount.html,
+ httemplate/misc/order_pkg.html,
+ httemplate/view/cust_main/packages/status.html: discounts,
+ RT#6679
+
+2010-02-04 12:39 ivan
+
+ * FS/FS/discount.pm, httemplate/edit/discount.html,
+ httemplate/elements/select-discount.html,
+ httemplate/elements/select-table.html,
+ httemplate/elements/tr-input-text.html,
+ httemplate/elements/tr-select-discount.html,
+ httemplate/elements/tr-select.html: discounts, RT#6679
+
+2010-02-04 02:00 ivan
+
+ * httemplate/edit/cust_main/top_misc.html, FS/FS/AccessRight.pm,
+ httemplate/elements/search-cust_main.html: add ability to edit
+ referring customer, RT#7174
+
+2010-02-03 22:53 ivan
+
+ * httemplate/: elements/phonenumber.html, pref/pref-process.html,
+ pref/pref.html: snom autodial integration
+
+2010-02-03 20:48 ivan
+
+ * FS/FS/part_event/Condition/every.pm: fix SQL error with date
+ field when using this condition, RT#7218
+
+2010-02-03 11:27 ivan
+
+ * FS/FS/cust_main.pm: better error msg for profiling
+
+2010-02-02 18:16 ivan
+
+ * FS/FS/svc_acct.pm: fix time limits getting double added if the
+ service is provisioned before first billing
+
+2010-01-30 23:04 ivan
+
+ * FS/FS/discount.pm: discounts, RT#6679
+
+2010-01-30 19:00 ivan
+
+ * httemplate/browse/part_pkg_taxclass.html: fix header on report
+
+2010-01-30 18:57 ivan
+
+ * FS/FS/: part_pkg/agent.pm, part_pkg/bulk.pm,
+ cust_pkg_discount.pm, part_pkg/flat.pm,
+ part_pkg/flat_comission.pm, part_pkg/flat_comission_cust.pm,
+ part_pkg/flat_comission_pkg.pm, part_pkg/prorate.pm,
+ part_pkg/recur_Common.pm, part_pkg/rt_time.pm,
+ part_pkg/sesmon_hour.pm, part_pkg/sesmon_minute.pm,
+ part_pkg/sql_external.pm, part_pkg/sql_generic.pm,
+ part_pkg/sqlradacct_hour.pm, part_pkg/subscription.pm,
+ part_pkg/voip_sqlradacct.pm: discounts, RT#6679
+
+2010-01-30 15:00 ivan
+
+ * httemplate/: view/cust_main/packages/package.html,
+ edit/cust_pkg_discount.html, edit/process/cust_pkg_discount.html,
+ misc/delete-cust_pkg_discount.html,
+ view/cust_main/packages/status.html: discounts, RT#6679
+
+2010-01-30 12:05 ivan
+
+ * httemplate/: misc/cust-part_pkg.cgi, misc/order_pkg.html,
+ view/cust_main/packages.html, elements/select-part_pkg.html,
+ elements/select-table.html,
+ elements/tr-select-cust-part_pkg.html,
+ view/cust_main/order_pkg_link.html: discounts, RT#6679
+
+2010-01-30 00:55 ivan
+
+ * FS/FS/cust_pkg.pm, FS/FS/cust_pkg_discount.pm,
+ httemplate/edit/process/quick-cust_pkg.cgi,
+ httemplate/elements/select-discount.html,
+ httemplate/elements/tr-select-discount.html,
+ httemplate/misc/order_pkg.html,
+ httemplate/view/cust_main/packages/status.html,
+ httemplate/view/cust_main/packages/package.html: discounts,
+ RT#6679
+
+2010-01-29 23:55 ivan
+
+ * FS/FS/part_pkg/rt_time.pm: giving it a weight avoids weight use
+ of uninitialized value in sort messages in part_pkg.pm
+
+2010-01-29 23:38 ivan
+
+ * FS/FS.pm, FS/MANIFEST, FS/FS/AccessRight.pm, FS/FS/Mason.pm,
+ FS/FS/Schema.pm, FS/FS/cust_pkg_discount.pm, FS/FS/discount.pm,
+ FS/FS/part_pkg.pm, FS/FS/part_pkg/flat.pm,
+ FS/t/cust_pkg_discount.t, FS/t/discount.t,
+ httemplate/browse/discount.html, httemplate/edit/discount.html,
+ httemplate/edit/elements/edit.html,
+ httemplate/edit/process/discount.html,
+ httemplate/elements/menu.html,
+ httemplate/elements/tr-input-text.html: discounts, RT#6679
+
+2010-01-29 12:21 ivan
+
+ * FS/FS/Conf.pm: add Cleartext-Password to radius-password export
+ options, RT#7150
+
+2010-01-29 11:52 ivan
+
+ * FS/FS/part_export/thirdlane.pm: ssl option
+
+2010-01-26 21:27 ivan
+
+ * FS/FS/part_export/thirdlane.pm: URI escape pw, RT#7051
+
+2010-01-26 21:21 ivan
+
+ * FS/FS/part_export/thirdlane.pm: add port option, RT#7051
+
+2010-01-26 02:40 ivan
+
+ * FS/FS/svc_pbx.pm: deleting an svc_pbx unlinks svc_phones and
+ deletes svc_accts, RT#7051
+
+2010-01-26 02:34 ivan
+
+ * FS/FS/part_export/thirdlane.pm: admin operations from svc_acct
+ records
+
+2010-01-26 02:05 ivan
+
+ * FS/FS/svc_acct.pm, httemplate/edit/process/svc_acct.cgi: more
+ fallout from default pw encryption: fix error reporting when
+ entering a bad password
+
+2010-01-26 00:35 ivan
+
+ * FS/FS/: svc_pbx.pm, part_export/thirdlane.pm: svc_pbx.title
+ uniqueness (kludgy) and force to alphanumeric+space and 19 char
+ max when using thirdlane (conservative guess for 1st pass
+ implementation), RT#7051
+
+2010-01-26 00:18 ivan
+
+ * FS/FS/svc_pbx.pm: label isn't thirdlane-specific, RT#7051
+
+2010-01-25 23:15 ivan
+
+ * FS/FS/part_export/thirdlane.pm: figured out success/failure
+ reporting, and wrote DID creation/deletion/assign/unassign,
+ RT#7051
+
+2010-01-25 22:15 ivan
+
+ * FS/FS/part_export/thirdlane.pm: initial thirdlane export w/tenant
+ insert/delete/replace, RT#7051
+
+2010-01-25 22:14 ivan
+
+ * FS/FS/svc_pbx.pm: fix label method and doc work
+
+2010-01-25 22:14 ivan
+
+ * FS/FS/svc_Common.pm: remove debugging
+
+2010-01-25 20:47 jayce
+
+ * FS/FS/: part_pkg/rt_time.pm, TicketSystem/RT_External.pm: First
+ version of RT Billing pkg. Basic concept is if a customer has
+ this package, then any time added to ticket comments in RT will
+ be added up and multiplied by the base rate, with each entry
+ showing up as a lineitem on their next invoice.
+
+ This has not been used in production yet by anybody, it was just
+ a proposal done for a customer. Modified Files:
+ TicketSystem/RT_External.pm Added Files:
+ part_pkg/rt_time.pm
+
+2010-01-25 14:14 ivan
+
+ * httemplate/elements/select-svc_pbx.html,
+ httemplate/elements/tr-select-svc_pbx.html, FS/FS/Schema.pm,
+ FS/FS/svc_Common.pm, FS/FS/svc_acct.pm, FS/FS/svc_pbx.pm,
+ FS/FS/svc_phone.pm, httemplate/edit/part_svc.cgi,
+ httemplate/edit/svc_acct.cgi, httemplate/edit/svc_phone.cgi,
+ httemplate/edit/elements/edit.html,
+ httemplate/edit/elements/svc_Common.html,
+ httemplate/view/svc_acct.cgi, httemplate/view/svc_phone.cgi:
+ linking DIDs and users to PBXes, RT#7051
+
+2010-01-25 09:41 ivan
+
+ * httemplate/edit/part_svc.cgi, FS/MANIFEST, FS/FS/Mason.pm,
+ FS/FS/Schema.pm: initial svc_pbx implementation, RT#7051
+
+2010-01-25 09:35 ivan
+
+ * FS/: FS/svc_pbx.pm, t/svc_pbx.t: initial svc_pbx implementation,
+ RT#7051
+
+2010-01-24 16:31 ivan
+
+ * FS/FS/svc_acct.pm: fix password length checks from applyhing to
+ already-crypted legacy passwords, RT#7139
+
+2010-01-24 14:38 ivan
+
+ * httemplate/elements/: overlibmws.js, overlibmws_crossframe.js,
+ overlibmws_draggable.js, overlibmws_iframe.js: update overlib to
+ upstream v281 (jan 20, 2010)
+
+2010-01-24 12:37 ivan
+
+ * FS/FS/UI/Web.pm: right-align customer # in reports
+
+2010-01-24 11:53 ivan
+
+ * httemplate/search/cust_bill.html: fix alignment of customer data
+
+2010-01-24 11:52 ivan
+
+ * httemplate/search/cust_bill_pay.html: separate out the invoice
+ and payment info into multiple columns, and fix application date
+ showing as payment date
+
+2010-01-21 00:54 ivan
+
+ * FS/FS/Conf.pm: correct description for selfservice-body_footer
+
+2010-01-21 00:38 ivan
+
+ * fs_selfservice/FS-SelfService/cgi/selfservice.cgi: more
+ self-service skinning config options, and start taking a stab at
+ reorganizing config sections, RT#6893
+
+2010-01-21 00:34 ivan
+
+ * fs_selfservice/FS-SelfService/cgi/ach_payment_results.html,
+ fs_selfservice/FS-SelfService/cgi/change_bill.html,
+ fs_selfservice/FS-SelfService/cgi/change_password.html,
+ fs_selfservice/FS-SelfService/cgi/change_pay.html,
+ fs_selfservice/FS-SelfService/cgi/change_ship.html,
+ fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html,
+ fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html,
+ fs_selfservice/FS-SelfService/cgi/delete_svc.html,
+ fs_selfservice/FS-SelfService/cgi/header.html,
+ fs_selfservice/FS-SelfService/cgi/make_ach_payment.html,
+ fs_selfservice/FS-SelfService/cgi/make_payment.html,
+ fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html,
+ fs_selfservice/FS-SelfService/cgi/myaccount.html,
+ fs_selfservice/FS-SelfService/cgi/myaccount_menu.html,
+ fs_selfservice/FS-SelfService/cgi/order_pkg.html,
+ fs_selfservice/FS-SelfService/cgi/payment_results.html,
+ fs_selfservice/FS-SelfService/cgi/process_change_bill.html,
+ fs_selfservice/FS-SelfService/cgi/process_change_password.html,
+ fs_selfservice/FS-SelfService/cgi/process_change_pay.html,
+ fs_selfservice/FS-SelfService/cgi/process_change_pkg.html,
+ fs_selfservice/FS-SelfService/cgi/process_change_ship.html,
+ fs_selfservice/FS-SelfService/cgi/process_order_pkg.html,
+ fs_selfservice/FS-SelfService/cgi/process_order_recharge.html,
+ fs_selfservice/FS-SelfService/cgi/process_svc_acct.html,
+ fs_selfservice/FS-SelfService/cgi/process_svc_external.html,
+ fs_selfservice/FS-SelfService/cgi/provision.html,
+ fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html,
+ fs_selfservice/FS-SelfService/cgi/recharge_prepay.html,
+ fs_selfservice/FS-SelfService/cgi/recharge_results.html,
+ fs_selfservice/FS-SelfService/cgi/view_cdr_details.html,
+ fs_selfservice/FS-SelfService/cgi/view_invoice.html,
+ fs_selfservice/FS-SelfService/cgi/view_usage.html,
+ fs_selfservice/FS-SelfService/cgi/view_usage_details.html,
+ fs_selfservice/FS-SelfService/cgi/image.cgi,
+ FS/FS/ClientAPI/MyAccount.pm, httemplate/config/config-view.cgi,
+ FS/FS/Conf.pm: more self-service skinning config options, and
+ start taking a stab at reorganizing config sections, RT#6893
+
+2010-01-20 17:25 ivan
+
+ * FS/: FS/ClientAPI.pm, FS/Mason.pm,
+ bin/freeside-selfservice-server: fix self-service fallout from RT
+ 3.8, RT#6640
+
+2010-01-19 15:11 jeff
+
+ * FS/FS/part_export/prizm.pm: SM in new window
+
+2010-01-19 09:48 jeff
+
+ * FS/FS/cust_main.pm: eliminate harmless uninitialized value noise
+
+2010-01-18 20:54 ivan
+
+ * FS/FS/pay_batch/paymentech.pm: patch from Peter Loeppky to make
+ sure some xml fields don't get larger than what paymentech wants
+
+2010-01-18 19:24 mark
+
+ * httemplate/search/elements/search-csv.html: Fix mime type for CSV
+ files, RT#1526
+
+2010-01-18 18:09 jeff
+
+ * FS/FS/part_export/domreg_opensrs.pm: don't really need debugging
+ on
+
+2010-01-18 18:03 jeff
+
+ * FS/FS/: cust_bill_ApplicationCommon.pm,
+ part_export/domreg_opensrs.pm: debugged and tested opensrs export
+
+2010-01-18 16:13 ivan
+
+ * httemplate/search/cust_bill_pkg.cgi: fix color/style after
+ removal of billpkgnum display
+
+2010-01-16 22:40 ivan
+
+ * FS/FS/ClientAPI/MasonComponent.pm: fix for
+ selfservice_server-base_url without a trailing /
+
+2010-01-16 19:31 ivan
+
+ * FS/FS/cust_main.pm: return an error for 0 amount payments to
+ avoid a $0 payment getting stuck in declined or captured status,
+ RT#6993
+
+2010-01-16 18:34 ivan
+
+ * FS/FS/svc_phone.pm: strip non-digits and 1- when searching for
+ phone numbers, RT#7000
+
+2010-01-16 18:22 ivan
+
+ * FS/FS/: svc_acct.pm: remove svcnum from searchable fields for
+ svc_acct... custnum and invnum are user-visible, other database
+ ids, not so much. also, breaks phone number search w/current Pg,
+ RT#7000
+
+2010-01-16 17:20 ivan
+
+ * ChangeLog: preparing for 2.1.0
+
+2010-01-16 16:22 jeff
+
+ * FS/FS/cust_pkg.pm: work around bug in pre-perl5.10 which is at
+ best noisy and at worst missorting
+
+2010-01-16 15:39 ivan
+
+ * FS/FS/part_pkg/: cdr_termination.pm: add usage_mandate option to
+ termination price plan, RT#6932
+
+2010-01-16 15:06 ivan
+
+ * httemplate/search/cust_svc.html: fix searching for unlinked
+ services? RT#7059
+
2010-01-14 19:59 ivan
* httemplate/edit/process/part_pkg.cgi: remove extraneous debugging
@@ -7,15 +1500,41 @@
* FS/FS/tax_rate.pm: if ignore_icalculable_taxes is on, don't call
the errors fatal
-2010-01-12 09:17 jeff
+2010-01-12 09:08 jeff
* FS/FS/part_export/prizm.pm: add some debugging
-2010-01-12 09:16 jeff
+2010-01-12 08:40 jeff
* FS/FS/part_export/prizm.pm: eliminate harmless argument isn't
numeric messages
+2010-01-09 15:41 ivan
+
+ * rt/etc/RT_SiteConfig.pm: QuickCreateLong obsolete with the better
+ quick create in 3.8
+
+2010-01-09 15:36 ivan
+
+ * rt/: etc/RT_SiteConfig.pm, lib/RT/Config.pm, FREESIDE_MODIFIED,
+ etc/RT_Config.pm, etc/RT_Config.pm.in: add a "freeside2.1"
+ stylesheet to isolate our skinning changes
+
+2010-01-09 15:03 ivan
+
+ * rt/html/NoAuth/images/small-logo.png: removing HTML files in old
+ location wrt RT 3.8
+
+2010-01-09 14:53 ivan
+
+ * rt/html/NoAuth/css/3.5-default/freeside.css: removing HTML files
+ in old location wrt RT 3.8
+
+2010-01-09 14:48 ivan
+
+ * Makefile, rt/FREESIDE_MODIFIED, rt/sbin/rt-setup-database.in:
+ fixup initial RT setup for 3.8
+
2010-01-09 02:03 ivan
* FS/FS/Record.pm: need DBIx::DBSchema w/quoted_default to make
@@ -25,6 +1544,16 @@
* FS/bin/freeside-upgrade: undo damage from DBIx::DBSchema 0.37_03
+2010-01-08 08:05 jeff
+
+ * Makefile, htetc/freeside-base1.99.conf,
+ htetc/freeside-base1.conf, htetc/freeside-base2.conf,
+ htetc/htpasswd.logout, httemplate/elements/header.html,
+ httemplate/elements/logout.html,
+ httemplate/elements/rs_init_object.html,
+ httemplate/elements/xmlhttp.html: add a logout link (RT 1330 &
+ 5518)
+
2010-01-07 01:48 mark
* FS/FS/: pay_batch.pm, pay_batch/RBC.pm: Fix problems with RBC
@@ -44,18 +1573,463 @@
* FS/FS/cust_main.pm: doc
+2010-01-03 20:13 jeff
+
+ * FS/FS/Conf.pm, FS/FS/cust_bill_ApplicationCommon.pm,
+ FS/FS/part_export/domreg_opensrs.pm, bin/opensrs_domain_pkgs:
+ untested triggering of export on payments, requires config enable
+ (RT5825)
+
2010-01-03 19:23 jeff
* bin/monitor: add some debugging
-2010-01-02 18:54 ivan
+2010-01-03 00:04 ivan
+
+ * rt/: html/Elements/AddCustomers, html/Elements/EditCustomers,
+ html/Ticket/ModifyCustomers.html,
+ html/Elements/FreesideInvoiceSearch,
+ html/Elements/FreesideNewCust, html/Elements/FreesideSearch,
+ html/Elements/FreesideSvcSearch, FREESIDE_MODIFIED: port
+ skinning, customer display/edit from RT 3.6 integration to RT 3.8
+ integration
+
+2010-01-02 23:40 ivan
+
+ * htetc/: freeside-base1.99.conf, freeside-base1.conf,
+ freeside-base2.conf, handler.pl: port skinning, customer
+ display/edit from RT 3.6 integration to RT 3.8 integration
+
+2010-01-02 22:42 ivan
+
+ * rt/html/Ticket/Elements/: AddCustomers, EditCustomers,
+ ShowCustomers: moved to new location in RT 3.8
+
+2010-01-02 22:24 ivan
- * Makefile: fix RT_SiteConfig.pm substitution
+ * FS/FS/TicketSystem/RT_Internal.pm: attempt to get more
+ information on errors using an RT-instansiated session??
+
+2010-01-02 19:07 ivan
+
+ * Makefile, FS/FS/Mason.pm, FS/FS/Mason/Request.pm,
+ rt/etc/RT_SiteConfig.pm: can't we all just get along (with RT
+ 3.8.7)?
2009-12-31 15:03 mark
* FS/FS/pay_batch/RBC.pm: Add pre-header line
+2009-12-31 06:31 ivan
+
+ * rt/: Makefile, Makefile.in: prevent fatality
+
+2009-12-31 06:11 ivan
+
+ * rt/Makefile: otherwise it aborts bitchinga bout missing
+ schema.Oracle
+
+2009-12-31 06:08 ivan
+
+ * rt/: Makefile, config.status: install-sh????
+
+2009-12-31 05:59 ivan
+
+ * rt/: .gitignore, Makefile, config.status, bin/mason_handler.fcgi,
+ bin/mason_handler.scgi, bin/mason_handler.svc, bin/rt-crontool,
+ bin/rt-mailgate, etc/RT_Config.pm, etc/RT_Config.pm.in,
+ etc/RT_SiteConfig.pm, etc/schema.Pg, etc/schema.mysql,
+ html/autohandler, html/index.html, html/l,
+ html/Admin/autohandler, html/Admin/index.html,
+ html/Admin/CustomFields/GroupRights.html,
+ html/Admin/CustomFields/Modify.html,
+ html/Admin/CustomFields/Objects.html,
+ html/Admin/CustomFields/UserRights.html,
+ html/Admin/CustomFields/index.html,
+ html/Admin/Elements/AddCustomFieldValue,
+ html/Admin/Elements/ConfigureMyRT,
+ html/Admin/Elements/CreateUserCalled,
+ html/Admin/Elements/CustomFieldTabs,
+ html/Admin/Elements/EditCustomField,
+ html/Admin/Elements/EditCustomFieldValues,
+ html/Admin/Elements/EditCustomFields,
+ html/Admin/Elements/EditQueueWatchers,
+ html/Admin/Elements/EditScrip, html/Admin/Elements/EditScrips,
+ html/Admin/Elements/EditTemplates,
+ html/Admin/Elements/EditUserComments,
+ html/Admin/Elements/GlobalCustomFieldTabs,
+ html/Admin/Elements/GroupTabs, html/Admin/Elements/Header,
+ html/Admin/Elements/ListGlobalCustomFields,
+ html/Admin/Elements/ListGlobalScrips,
+ html/Admin/Elements/ModifyTemplate,
+ html/Admin/Elements/ObjectCustomFields,
+ html/Admin/Elements/PickCustomFields,
+ html/Admin/Elements/PickObjects,
+ html/Admin/Elements/QueueRightsForUser,
+ html/Admin/Elements/QueueTabs,
+ html/Admin/Elements/SelectCustomFieldLookupType,
+ html/Admin/Elements/SelectCustomFieldType,
+ html/Admin/Elements/SelectGroups,
+ html/Admin/Elements/SelectModifyGroup,
+ html/Admin/Elements/SelectModifyQueue,
+ html/Admin/Elements/SelectModifyUser,
+ html/Admin/Elements/SelectNewGroupMembers,
+ html/Admin/Elements/SelectRights,
+ html/Admin/Elements/SelectScrip,
+ html/Admin/Elements/SelectScripAction,
+ html/Admin/Elements/SelectScripCondition,
+ html/Admin/Elements/SelectSingleOrMultiple,
+ html/Admin/Elements/SelectStage,
+ html/Admin/Elements/SelectTemplate,
+ html/Admin/Elements/SelectUsers, html/Admin/Elements/SystemTabs,
+ html/Admin/Elements/Tabs, html/Admin/Elements/ToolTabs,
+ html/Admin/Elements/UserTabs, html/Admin/Global/GroupRights.html,
+ html/Admin/Global/MyRT.html, html/Admin/Global/Scrip.html,
+ html/Admin/Global/Scrips.html, html/Admin/Global/Template.html,
+ html/Admin/Global/Templates.html,
+ html/Admin/Global/UserRights.html, html/Admin/Global/index.html,
+ html/Admin/Global/CustomFields/Groups.html,
+ html/Admin/Global/CustomFields/Queue-Tickets.html,
+ html/Admin/Global/CustomFields/Queue-Transactions.html,
+ html/Admin/Global/CustomFields/Users.html,
+ html/Admin/Global/CustomFields/index.html,
+ html/Admin/Groups/CustomFields.html,
+ html/Admin/Groups/GroupRights.html,
+ html/Admin/Groups/History.html, html/Admin/Groups/Members.html,
+ html/Admin/Groups/Modify.html, html/Admin/Groups/UserRights.html,
+ html/Admin/Groups/index.html, html/Admin/Queues/CustomField.html,
+ html/Admin/Queues/CustomFields.html,
+ html/Admin/Queues/GroupRights.html,
+ html/Admin/Queues/Modify.html, html/Admin/Queues/People.html,
+ html/Admin/Queues/Scrip.html, html/Admin/Queues/Scrips.html,
+ html/Admin/Queues/Template.html,
+ html/Admin/Queues/Templates.html,
+ html/Admin/Queues/UserRights.html, html/Admin/Queues/index.html,
+ html/Admin/Tools/Configuration.html, html/Admin/Tools/index.html,
+ html/Admin/Users/CustomFields.html,
+ html/Admin/Users/History.html, html/Admin/Users/Memberships.html,
+ html/Admin/Users/Modify.html, html/Admin/Users/MyRT.html,
+ html/Admin/Users/index.html, html/Approvals/Display.html,
+ html/Approvals/index.html, html/Approvals/Elements/Approve,
+ html/Approvals/Elements/PendingMyApproval,
+ html/Approvals/Elements/ShowDependency,
+ html/Approvals/Elements/Tabs,
+ html/Download/CustomFieldValue/dhandler,
+ html/Download/Tabular/dhandler, html/Elements/BevelBoxRaisedEnd,
+ html/Elements/BevelBoxRaisedStart, html/Elements/Callback,
+ html/Elements/Checkbox, html/Elements/CreateTicket,
+ html/Elements/EditCustomField,
+ html/Elements/EditCustomFieldBinary,
+ html/Elements/EditCustomFieldCombobox,
+ html/Elements/EditCustomFieldFreeform,
+ html/Elements/EditCustomFieldImage,
+ html/Elements/EditCustomFieldSelect,
+ html/Elements/EditCustomFieldText,
+ html/Elements/EditCustomFieldWikitext, html/Elements/EditLinks,
+ html/Elements/EmailInput, html/Elements/Error,
+ html/Elements/Footer, html/Elements/GotoTicket,
+ html/Elements/Header, html/Elements/ListActions,
+ html/Elements/Login, html/Elements/Logo, html/Elements/Menu,
+ html/Elements/MessageBox, html/Elements/MyAdminQueues,
+ html/Elements/MyRT, html/Elements/MyReminders,
+ html/Elements/MyRequests, html/Elements/MySupportQueues,
+ html/Elements/MyTickets, html/Elements/PageLayout,
+ html/Elements/QueryString, html/Elements/QueueSummary,
+ html/Elements/QuickCreate, html/Elements/Quicksearch,
+ html/Elements/Refresh, html/Elements/RefreshHomepage,
+ html/Elements/ScrubHTML, html/Elements/Section,
+ html/Elements/SelectAttachmentField, html/Elements/SelectBoolean,
+ html/Elements/SelectCustomFieldOperator,
+ html/Elements/SelectCustomFieldValue, html/Elements/SelectDate,
+ html/Elements/SelectDateRelation, html/Elements/SelectDateType,
+ html/Elements/SelectEqualityOperator, html/Elements/SelectGroups,
+ html/Elements/SelectLang, html/Elements/SelectLinkType,
+ html/Elements/SelectMatch, html/Elements/SelectNewTicketQueue,
+ html/Elements/SelectOwner, html/Elements/SelectQueue,
+ html/Elements/SelectResultsPerPage,
+ html/Elements/SelectSortOrder, html/Elements/SelectStatus,
+ html/Elements/SelectTicketSortBy,
+ html/Elements/SelectTicketTypes, html/Elements/SelectTimeUnits,
+ html/Elements/SelectUsers, html/Elements/SelectWatcherType,
+ html/Elements/SetupSessionCookie,
+ html/Elements/ShowCustomFieldBinary,
+ html/Elements/ShowCustomFieldImage,
+ html/Elements/ShowCustomFieldWikitext,
+ html/Elements/ShowCustomFields, html/Elements/ShowLink,
+ html/Elements/ShowLinks, html/Elements/ShowMemberships,
+ html/Elements/ShowSearch, html/Elements/SimpleSearch,
+ html/Elements/Submit, html/Elements/Tabs,
+ html/Elements/TicketList, html/Elements/TitleBox,
+ html/Elements/TitleBoxEnd, html/Elements/TitleBoxStart,
+ html/Elements/ValidateCustomFields,
+ html/Elements/CollectionAsTable/Header,
+ html/Elements/CollectionAsTable/ParseFormat,
+ html/Elements/CollectionAsTable/Row,
+ html/Elements/RT__Ticket/ColumnMap, html/Helpers/CalPopup.html,
+ html/Helpers/EmailAutocomplete, html/NoAuth/Logout.html,
+ html/NoAuth/Reminder.html, html/NoAuth/css/autohandler,
+ html/NoAuth/css/dhandler, html/NoAuth/css/print.css,
+ html/NoAuth/css/3.4-compat/body.css,
+ html/NoAuth/css/3.4-compat/footer.css,
+ html/NoAuth/css/3.4-compat/forms.css,
+ html/NoAuth/css/3.4-compat/header.css,
+ html/NoAuth/css/3.4-compat/login.css,
+ html/NoAuth/css/3.4-compat/main.css,
+ html/NoAuth/css/3.4-compat/misc.css,
+ html/NoAuth/css/3.4-compat/nav.css,
+ html/NoAuth/css/3.4-compat/quickbar.css,
+ html/NoAuth/css/3.4-compat/ticket.css,
+ html/NoAuth/css/3.4-compat/titlebox.css,
+ html/NoAuth/css/3.4-compat/transactions.css,
+ html/NoAuth/css/3.5-default/approvals.css,
+ html/NoAuth/css/3.5-default/body.css,
+ html/NoAuth/css/3.5-default/footer.css,
+ html/NoAuth/css/3.5-default/forms.css,
+ html/NoAuth/css/3.5-default/header.css,
+ html/NoAuth/css/3.5-default/login.css,
+ html/NoAuth/css/3.5-default/logo.css,
+ html/NoAuth/css/3.5-default/main.css,
+ html/NoAuth/css/3.5-default/misc.css,
+ html/NoAuth/css/3.5-default/nav.css,
+ html/NoAuth/css/3.5-default/quickbar.css,
+ html/NoAuth/css/3.5-default/ticket.css,
+ html/NoAuth/css/3.5-default/titlebox.css,
+ html/NoAuth/css/3.5-default/transactions.css,
+ html/NoAuth/images/autohandler, html/NoAuth/images/bplogo.gif,
+ html/NoAuth/images/favicon.png,
+ html/NoAuth/images/css/cb-light.gif,
+ html/NoAuth/images/css/cb.gif,
+ html/NoAuth/images/css/cbr-b2g.gif,
+ html/NoAuth/images/css/cbr-b2lb.gif,
+ html/NoAuth/images/css/cbr-gray.gif,
+ html/NoAuth/images/css/cbr-trans.gif,
+ html/NoAuth/images/css/cbr.gif,
+ html/NoAuth/images/css/ct-light.gif,
+ html/NoAuth/images/css/ct.gif,
+ html/NoAuth/images/css/ctr-b2g.gif,
+ html/NoAuth/images/css/ctr-b2lb.gif,
+ html/NoAuth/images/css/ctr-gray.gif,
+ html/NoAuth/images/css/ctr-trans.gif,
+ html/NoAuth/images/css/ctr.gif,
+ html/NoAuth/images/css/dark-arrow-up.png,
+ html/NoAuth/images/css/dark-arrow.png,
+ html/NoAuth/images/css/fieldbg-autocomplete.gif,
+ html/NoAuth/images/css/light-arrow-up.png,
+ html/NoAuth/images/css/light-arrow.png,
+ html/NoAuth/images/css/rolldown-arrow.gif,
+ html/NoAuth/images/css/rolldown-arrow.png,
+ html/NoAuth/images/css/rollup-arrow.gif, html/NoAuth/js/ahah.js,
+ html/NoAuth/js/autohandler, html/NoAuth/js/cascaded.js,
+ html/NoAuth/js/class.js, html/NoAuth/js/combobox.js,
+ html/NoAuth/js/list.js, html/NoAuth/js/titlebox-state.js,
+ html/NoAuth/js/util.js, html/NoAuth/js/scriptaculous/controls.js,
+ html/NoAuth/js/scriptaculous/effects.js,
+ html/NoAuth/js/scriptaculous/prototype.js,
+ html/NoAuth/js/scriptaculous/scriptaculous.js,
+ html/Prefs/MyRT.html, html/Prefs/Quicksearch.html,
+ html/Prefs/Search.html, html/Prefs/SearchOptions.html,
+ html/Prefs/Elements/Tabs, html/REST/1.0/autohandler,
+ html/REST/1.0/dhandler, html/REST/1.0/logout,
+ html/REST/1.0/Forms/queue/default, html/REST/1.0/Forms/queue/ns,
+ html/REST/1.0/Forms/ticket/attachments,
+ html/REST/1.0/Forms/ticket/comment,
+ html/REST/1.0/Forms/ticket/default,
+ html/REST/1.0/Forms/ticket/history,
+ html/REST/1.0/Forms/ticket/links,
+ html/REST/1.0/Forms/ticket/merge,
+ html/REST/1.0/Forms/ticket/take,
+ html/REST/1.0/Forms/transaction/default,
+ html/REST/1.0/Forms/user/default, html/REST/1.0/Forms/user/ns,
+ html/REST/1.0/NoAuth/mail-gateway, html/REST/1.0/search/dhandler,
+ html/REST/1.0/search/ticket, html/REST/1.0/ticket/comment,
+ html/REST/1.0/ticket/link, html/REST/1.0/ticket/merge,
+ html/Search/Build.html, html/Search/Bulk.html, html/Search/Chart,
+ html/Search/Chart.html, html/Search/Edit.html,
+ html/Search/Results.html, html/Search/Results.rdf,
+ html/Search/Results.tsv, html/Search/Simple.html,
+ html/Search/Elements/BuildFormatString,
+ html/Search/Elements/Chart, html/Search/Elements/DisplayOptions,
+ html/Search/Elements/EditFormat, html/Search/Elements/EditQuery,
+ html/Search/Elements/EditSearches,
+ html/Search/Elements/NewListActions,
+ html/Search/Elements/PickBasics, html/Search/Elements/PickCFs,
+ html/Search/Elements/PickCriteria,
+ html/Search/Elements/SearchPrivacy,
+ html/Search/Elements/SearchesForObject,
+ html/Search/Elements/SelectAndOr,
+ html/Search/Elements/SelectChartType,
+ html/Search/Elements/SelectGroup,
+ html/Search/Elements/SelectGroupBy,
+ html/Search/Elements/SelectLinks,
+ html/Search/Elements/SelectPersonType,
+ html/Search/Elements/SelectSearchObject,
+ html/Search/Elements/SelectSearchesForObjects,
+ html/SelfService/Closed.html, html/SelfService/Create.html,
+ html/SelfService/CreateTicketInQueue.html,
+ html/SelfService/Display.html, html/SelfService/Error.html,
+ html/SelfService/Prefs.html, html/SelfService/Update.html,
+ html/SelfService/index.html,
+ html/SelfService/Attachment/dhandler,
+ html/SelfService/Elements/GotoTicket,
+ html/SelfService/Elements/Header,
+ html/SelfService/Elements/MyRequests,
+ html/SelfService/Elements/Tabs, html/Ticket/Create.html,
+ html/Ticket/Display.html, html/Ticket/History.html,
+ html/Ticket/Modify.html, html/Ticket/ModifyAll.html,
+ html/Ticket/ModifyDates.html, html/Ticket/ModifyLinks.html,
+ html/Ticket/ModifyPeople.html, html/Ticket/Reminders.html,
+ html/Ticket/ShowEmailRecord.html, html/Ticket/Update.html,
+ html/Ticket/Attachment/dhandler,
+ html/Ticket/Elements/AddWatchers, html/Ticket/Elements/BulkLinks,
+ html/Ticket/Elements/EditBasics,
+ html/Ticket/Elements/EditCustomField,
+ html/Ticket/Elements/EditCustomFields,
+ html/Ticket/Elements/EditDates, html/Ticket/Elements/EditPeople,
+ html/Ticket/Elements/EditWatchers,
+ html/Ticket/Elements/FindAttachments,
+ html/Ticket/Elements/LoadTextAttachments,
+ html/Ticket/Elements/PreviewScrips,
+ html/Ticket/Elements/Reminders,
+ html/Ticket/Elements/ShowAttachments,
+ html/Ticket/Elements/ShowBasics,
+ html/Ticket/Elements/ShowCustomFields,
+ html/Ticket/Elements/ShowDates,
+ html/Ticket/Elements/ShowDependencies,
+ html/Ticket/Elements/ShowGroupMembers,
+ html/Ticket/Elements/ShowHistory,
+ html/Ticket/Elements/ShowMembers,
+ html/Ticket/Elements/ShowMessageHeaders,
+ html/Ticket/Elements/ShowMessageStanza,
+ html/Ticket/Elements/ShowPeople, html/Ticket/Elements/ShowQueue,
+ html/Ticket/Elements/ShowRequestor,
+ html/Ticket/Elements/ShowSummary, html/Ticket/Elements/ShowTime,
+ html/Ticket/Elements/ShowTransaction,
+ html/Ticket/Elements/ShowTransactionAttachments,
+ html/Ticket/Elements/ShowUserEntry, html/Ticket/Elements/Tabs,
+ html/Tools/MyDay.html, html/Tools/Offline.html,
+ html/Tools/index.html, html/Tools/Elements/Tabs,
+ html/Tools/Reports/CreatedByDates.html,
+ html/Tools/Reports/ResolvedByDates.html,
+ html/Tools/Reports/ResolvedByOwner.html,
+ html/Tools/Reports/index.html, html/Tools/Reports/Elements/Tabs,
+ html/User/Delegation.html, html/User/Prefs.html,
+ html/User/Elements/DelegateRights, html/User/Elements/GroupTabs,
+ html/User/Elements/Tabs, html/User/Groups/Members.html,
+ html/User/Groups/Modify.html, html/User/Groups/index.html,
+ html/Widgets/ComboBox, html/Widgets/SavedSearch,
+ html/Widgets/SelectionBox, html/Widgets/TitleBox,
+ html/Widgets/TitleBoxEnd, html/Widgets/TitleBoxStart, lib/RT.pm,
+ lib/RT/Groups_Overlay.pm, lib/RT/Record.pm,
+ lib/RT/SearchBuilder.pm, lib/RT/Ticket_Overlay.pm,
+ lib/RT/Transaction_Overlay.pm, lib/RT/User_Overlay.pm,
+ lib/RT/Users_Overlay.pm, lib/RT/I18N/no.po, lib/RT/I18N/pt_br.po,
+ lib/RT/I18N/pt_pt.po, lib/RT/I18N/zh_cn.po, lib/RT/I18N/zh_tw.po,
+ lib/t/00smoke.t, lib/t/create_data.pl, lib/t/setup_regression.t,
+ lib/t/data/crashes-file-based-parser, lib/t/data/lorem-ipsum,
+ lib/t/data/multipart-alternative-with-umlaut,
+ lib/t/data/multipart-report, lib/t/data/nested-mime-sample,
+ lib/t/data/nested-rfc-822, lib/t/data/new-ticket-from-iso-8859-1,
+ lib/t/data/new-ticket-from-iso-8859-1-full,
+ lib/t/data/notes-uuencoded, lib/t/data/rt-send-cc,
+ lib/t/data/russian-subject-no-content-type,
+ lib/t/data/subject-with-folding-ws,
+ lib/t/data/text-html-in-russian,
+ lib/t/data/text-html-with-umlaut, lib/t/data/very-long-subject,
+ lib/t/data/8859-15-message-series/dir,
+ lib/t/data/8859-15-message-series/msg1,
+ lib/t/data/8859-15-message-series/msg2,
+ lib/t/data/8859-15-message-series/msg3,
+ lib/t/data/8859-15-message-series/msg4,
+ lib/t/data/8859-15-message-series/msg5,
+ lib/t/data/8859-15-message-series/msg6,
+ lib/t/data/8859-15-message-series/msg7,
+ lib/t/regression/00-mason-syntax.t,
+ lib/t/regression/01ticket_link_searching.t,
+ lib/t/regression/02basic_web.t,
+ lib/t/regression/03web_compiliation_errors.t,
+ lib/t/regression/04send_email.t,
+ lib/t/regression/05cronsupport.t,
+ lib/t/regression/06-mime_decoding.t,
+ lib/t/regression/06mailgateway.t, lib/t/regression/07acl.t,
+ lib/t/regression/07rights.t, lib/t/regression/08web_cf_access.t,
+ lib/t/regression/09record_cf_api.t, lib/t/regression/10merge.t,
+ lib/t/regression/11-template-insert.t,
+ lib/t/regression/12-search.t,
+ lib/t/regression/13-attribute-tests.t,
+ lib/t/regression/14linking.t, lib/t/regression/14merge.t,
+ lib/t/regression/15cf_combo_cascade.t,
+ lib/t/regression/15cf_pattern.t,
+ lib/t/regression/15cf_single_values_are_single.t,
+ lib/t/regression/16-transaction_cf_tests.t,
+ lib/t/regression/17custom_search.t,
+ lib/t/regression/17multiple_deleg_revocation.t,
+ lib/t/regression/18custom_frontpage.t,
+ lib/t/regression/18stale_delegations_cleanup.t,
+ lib/t/regression/19-rtname.t, lib/t/regression/19quicksearch.t,
+ lib/t/regression/20-sort-by-queue.t,
+ lib/t/regression/20-sort-by-requestor.t,
+ lib/t/regression/20-sort-by-user.t,
+ lib/t/regression/20savedsearch.t,
+ lib/t/regression/21query-builder.t,
+ lib/t/regression/22search_tix_by_txn.t,
+ lib/t/regression/22search_tix_by_watcher.t,
+ lib/t/regression/23-batch-upload-csv.t,
+ lib/t/regression/23-web_attachments.t,
+ lib/t/regression/23cfsort-freeform-multiple.t,
+ lib/t/regression/23cfsort-freeform-single.t,
+ lib/t/regression/23cfsort.t, lib/t/regression/24-watchers.t,
+ lib/t/regression/24pawsort.t, lib/t/regression/25scrip_order.t,
+ lib/t/regression/26command_line.t, lib/t/regression/27verp.t,
+ lib/t/regression/mime_tests, sbin/extract_pod_tests,
+ sbin/regression_harness, sbin/rt-setup-database.in: merging
+ 3.8.7!!!
+
+2009-12-31 05:16 ivan
+
+ * rt/etc/: schema.mysql-4.0, schema.mysql-4.1,
+ upgrade/shrink_cgm_table.pl, upgrade/split-out-cf-categories,
+ upgrade/split-out-cf-categories.in,
+ upgrade/upgrade-mysql-schema.pl,
+ upgrade/3.8-branded-queues-extension,
+ upgrade/3.8-branded-queues-extension.in,
+ upgrade/3.8-ical-extension, upgrade/3.8-ical-extension.in:
+ Initial revision
+
+2009-12-31 05:12 ivan
+
+ * rt/: lib/RT/I18N/pt_BR.po, lib/RT/I18N/nb.po,
+ lib/RT/I18N/zh_CN.po, lib/RT/I18N/ar.po, lib/RT/I18N/pt.po,
+ lib/RT/I18N/ru.pm, lib/RT/Condition/ReopenTicket.pm,
+ lib/RT/Condition/CloseTicket.pm,
+ docs/creating_external_custom_fields.pod,
+ docs/extending_clickable_links.pod, docs/gnupg_integration.pod,
+ docs/porting.windows, docs/queue_subject_tag.pod,
+ docs/templates.pod, docs/using_forms_widgets.pod,
+ docs/design_docs/gnupg_details_on_output_formats: Initial
+ revision
+
+2009-12-31 05:09 ivan
+
+ * rt/: UPGRADING.mysql, lib/RT/Test.pm, sbin/merge-rosetta.pl,
+ sbin/rt-attributes-viewer, sbin/rt-attributes-viewer.in,
+ sbin/rt-clean-sessions, sbin/rt-clean-sessions.in,
+ sbin/rt-email-dashboards, sbin/rt-email-dashboards.in,
+ sbin/rt-email-digest, sbin/rt-email-digest.in,
+ sbin/rt-email-group-admin, sbin/rt-email-group-admin.in,
+ sbin/rt-server, sbin/rt-server.in, sbin/rt-shredder,
+ sbin/rt-shredder.in, sbin/rt-validator, sbin/rt-validator.in,
+ sbin/tweak-template-locstring, lib/RT/Search.pm,
+ lib/RT/Config.pm, lib/RT/Dashboard.pm, lib/RT/Installer.pm,
+ lib/RT/Plugin.pm, lib/RT/Ruleset.pm, lib/RT/Shredder.pm,
+ lib/RT/Approval.pm, lib/RT/Action.pm, lib/RT/SharedSetting.pm,
+ lib/RT/Condition.pm, lib/RT/SQL.pm, lib/RT/Util.pm,
+ lib/RT/Rule.pm, lib/RT/Interface/Web/Request.pm,
+ lib/RT/Interface/Web/Session.pm, lib/RT/Action/LinearEscalate.pm,
+ lib/RT/Action/ExtractSubjectTag.pm, lib/RT/Action/NotifyGroup.pm,
+ lib/RT/Action/NotifyGroupAsComment.pm, lib/RT/I18N/bg.po,
+ lib/RT/I18N/rt.pot, lib/RT/I18N/hr.po, lib/RT/I18N/zh_TW.po:
+ Initial revision
+
2009-12-31 04:56 ivan
* rt/: Makefile, lib/RT.pm: rt 3.6.10
@@ -105,6 +2079,13 @@
* FS/FS/cust_main.pm: really reduce the noise
+2009-12-30 18:20 ivan
+
+ * httemplate/: edit/prospect_main.html, edit/elements/edit.html,
+ edit/process/elements/process.html, elements/contact.html,
+ elements/menu.html: prospecting: proper contact error handling
+ when you add a prospect
+
2009-12-29 22:41 jeff
* FS/FS/part_pkg/voip_cdr.pm: define all detail header list
@@ -144,15 +2125,43 @@
* FS/bin/freeside-daily: add -u option for vacuuming, RT#5258
+2009-12-28 17:30 ivan
+
+ * bin/: del-old-history, pg-sizer: some random utils for disk space
+ analysis and eliminating old history records, RT#6914
+
2009-12-28 17:00 mark
* FS/FS/AccessRight.pm, httemplate/browse/cust_attachment.html,
httemplate/elements/menu.html: Add Browse attachments ACL
(RT#4964)
-2009-12-28 16:33 mark
+2009-12-28 16:38 ivan
+
+ * FS/: FS/Conf.pm, bin/freeside-queued: add queued-sleep_time
- * FS/FS/Conf.pm: RT#6358
+2009-12-28 11:18 ivan
+
+ * FS/FS/AccessRight.pm, FS/FS/Mason.pm, FS/FS/Schema.pm,
+ FS/FS/Setup.pm, FS/FS/Upgrade.pm, FS/FS/contact.pm,
+ FS/FS/contact_email.pm, FS/FS/contact_phone.pm,
+ FS/FS/cust_location.pm, FS/FS/o2m_Common.pm, FS/FS/phone_type.pm,
+ FS/FS/prospect_main.pm, FS/MANIFEST, FS/t/contact.t,
+ FS/t/contact_email.t, FS/t/contact_phone.t, FS/t/phone_type.t,
+ FS/t/prospect_main.t, httemplate/edit/prospect_main.html,
+ httemplate/edit/process/prospect_main.html,
+ httemplate/elements/city.html, httemplate/elements/contact.html,
+ httemplate/elements/header.html, httemplate/elements/menu.html,
+ httemplate/elements/tr-contact.html,
+ httemplate/elements/tr-select-cust_location.html,
+ httemplate/search/prospect_main.html,
+ httemplate/search/report_prospect_main.html,
+ httemplate/view/prospect_main.html,
+ httemplate/edit/elements/edit.html,
+ httemplate/edit/process/elements/process.html,
+ httemplate/misc/location.cgi,
+ httemplate/view/cust_main/packages/location.html, FS/FS.pm:
+ beginning of prospect/CRM/contact work
2009-12-27 21:25 ivan
@@ -160,7 +2169,7 @@
2009-12-26 17:00 jeff
- * FS/FS/: cust_main.pm, cust_location.pm: improve spacing around
+ * FS/FS/: cust_location.pm, cust_main.pm: improve spacing around
county
2009-12-23 15:32 jeff
@@ -169,12 +2178,7 @@
2009-12-23 15:29 jeff
- * bin/: monitor: add non-forking one machine monitor program
-
-2009-12-23 15:29 jeff
-
- * bin/monitor: file monitor was added on branch FREESIDE_1_9_BRANCH
- on 2009-12-23 23:29:54 +0000
+ * bin/monitor: add non-forking one machine monitor program
2009-12-23 15:14 jeff
@@ -190,29 +2194,21 @@
2009-12-22 16:30 mark
* FS/FS/svc_acct.pm, httemplate/edit/svc_acct.cgi,
- httemplate/edit/process/svc_acct.cgi,
- httemplate/view/svc_acct.cgi: Tweak set_password per RT#6358
-
-2009-12-21 06:36 jeff
-
- * bin/fetch_and_expand_taxes: file fetch_and_expand_taxes was added
- on branch FREESIDE_1_9_BRANCH on 2009-12-21 14:37:22 +0000
+ httemplate/edit/process/svc_acct.cgi: Tweak set_password per
+ RT#6358
-2009-12-21 06:36 jeff
+2009-12-21 06:44 jeff
- * bin/reassemble_taxes: file reassemble_taxes was added on branch
- FREESIDE_1_9_BRANCH on 2009-12-21 14:37:22 +0000
+ * FS/FS/: Schema.pm, cust_bill_pkg.pm,
+ cust_bill_pkg_tax_location.pm, cust_credit_bill_pkg.pm,
+ cust_tax_exempt_pkg.pm: manage tax exemptions (texas-tax) on
+ credit application RT953
2009-12-21 06:36 jeff
- * bin/fetch_and_expand_taxes, bin/reassemble_taxes, FS/FS/Conf.pm,
- FS/FS/tax_rate.pm: move cch conf into database and add a couple
- small tools for processing updates more manually
-
-2009-12-20 18:56 mark
-
- * httemplate/search/elements/search-xls.html: Fix filename for
- Excel spreadsheet reports
+ * FS/FS/Conf.pm, FS/FS/tax_rate.pm, bin/fetch_and_expand_taxes,
+ bin/reassemble_taxes: move cch conf into database and add a
+ couple small tools for processing updates more manually
2009-12-20 18:00 ivan
@@ -252,6 +2248,23 @@
* httemplate/view/cust_main/: packages.html, payment_history.html:
fix cust_main-packages-years, RT#6798
+2009-12-19 15:52 ivan
+
+ * FS/FS/cust_bill_ApplicationCommon.pm: fix more
+ ->owed_setup/owed_recur clashing with
+ cust_bill->open_cust_bill_pkg separating line items, RT#4729
+
+2009-12-19 15:28 ivan
+
+ * FS/FS/cust_bill_ApplicationCommon.pm: fix credit application, at
+ least in vedeya's case on HEAD, RT#6819, fallout from tax
+ credits, RT#4729
+
+2009-12-19 14:52 ivan
+
+ * httemplate/edit/elements/ApplicationCommon.html: fix fill-in of
+ credit amount when there aren't tax buttons
+
2009-12-19 14:41 ivan
* httemplate/edit/cust_credit.cgi: add add'l info field as a
@@ -262,12 +2275,6 @@
* httemplate/view/cust_main/payment_history.html: make room for
credit reasons in popup
-2009-12-19 12:58 mark
-
- * FS/: bin/freeside-paymentech-upload, FS/pay_batch/paymentech.pm,
- bin/freeside-paymentech-download: Fix date format string and
- quoting of password
-
2009-12-19 12:29 ivan
* FS/FS/cust_main_Mixin.pm: fix event report w/ a customer status
@@ -282,12 +2289,33 @@
* httemplate/misc/cust-part_pkg.cgi: fix order of packages after
class selection changes
+2009-12-18 10:20 jeff
+
+ * FS/FS/cust_bill_pkg_tax_location.pm,
+ FS/FS/cust_bill_pkg_tax_rate_location.pm,
+ httemplate/edit/elements/ApplicationCommon.html,
+ httemplate/misc/xmlhttp-calculate_taxes.html: fix handling of tax
+ location records and add a 'clear' button for tax credits
+
+2009-12-17 16:41 ivan
+
+ * rt/bin/standalone_httpd: Initial revision
+
+2009-12-17 16:38 ivan
+
+ * rt/: .gitignore, sbin/rt-dump-database, lib/RT/I18N/pt_pt.po,
+ lib/t/regression/20-sort-by-user.t,
+ lib/t/regression/20-sort-by-queue.t,
+ lib/t/regression/23cfsort-freeform-multiple.t,
+ lib/t/regression/23cfsort-freeform-single.t,
+ lib/t/regression/24-watchers.t: Initial revision
+
2009-12-16 09:35 ivan
* httemplate/edit/cust_main_attach.cgi: tweak attachment adding UI:
table consistency, input sizes and maxlengths, RT#4964
-2009-12-16 07:07 jeff
+2009-12-16 07:03 jeff
* FS/FS/: Conf.pm, Record.pm, cust_bill.pm, cust_location.pm,
cust_main.pm, cust_pkg.pm: group invoice line items by location,
@@ -305,6 +2333,11 @@
overlimit_groups agent-specific config, overriding
export-specific overlimit_groups, RT#6622
+2009-12-13 19:36 mark
+
+ * httemplate/search/elements/search-xls.html: Fix filename for
+ Excel spreadsheet reports
+
2009-12-13 17:41 mark
* FS/FS/AccessRight.pm, httemplate/browse/cust_attachment.html,
@@ -313,9 +2346,17 @@
httemplate/view/cust_main/attachments.html: Add access right to
view attachments
-2009-12-12 18:10 ivan
+2009-12-12 15:53 ivan
+
+ * httemplate/search/cust_credit_bill_pkg.html,
+ FS/FS/cust_credit_bill_pkg.pm,
+ httemplate/search/cust_bill_pkg.cgi: better reporting for tax
+ credits, RT#4729
+
+2009-12-12 15:32 ivan
- * ChangeLog: 1.9.2ish
+ * httemplate/search/: cust_bill_pkg.cgi, cust_credit_bill_pkg.html,
+ report_tax.cgi: better reporting for tax credits, RT#4729
2009-12-12 14:35 ivan
@@ -325,11 +2366,18 @@
* Makefile: sync versioning with branches, sorry jeremy
+2009-12-12 13:38 ivan
+
+ * FS/FS/cust_pkg.pm, httemplate/search/cust_bill_pkg.cgi,
+ httemplate/search/report_tax.cgi,
+ httemplate/search/report_tax.html: reporting with city taxes,
+ RT#6776
+
2009-12-10 15:03 ivan
* FS/FS/cust_main.pm: fully fix bulk customer reports, RT#6778
-2009-12-07 22:29 mark
+2009-12-07 22:21 mark
* FS/FS/Schema.pm: Fix cust_attachment.disabled type
@@ -349,7 +2397,7 @@
* FS/FS/Schema.pm: more reasonable sizes for filename, mime type
and title, RT#6823
-2009-12-05 15:36 jeff
+2009-12-04 10:37 jeff
* FS/FS/cust_bill.pm: holy cow! correct sense of skip usage testing
@@ -362,19 +2410,25 @@
2009-12-03 20:40 ivan
* FS/FS/cust_bill.pm, FS/FS/cust_bill_event.pm,
- FS/FS/cust_event.pm, FS/FS/cust_main.pm,
httemplate/search/477.html, httemplate/search/cust_bill.html,
httemplate/search/cust_bill_event.cgi,
httemplate/search/cust_event.html,
httemplate/search/cust_main.html, httemplate/search/cust_pkg.cgi,
httemplate/search/report_svc_acct.html,
- httemplate/view/cust_main/packages.html, FS/FS/cust_pkg.pm,
+ httemplate/view/cust_main/packages.html, FS/FS/cust_event.pm,
+ FS/FS/cust_main.pm, FS/FS/cust_pkg.pm,
httemplate/misc/email-customers.html,
httemplate/misc/process/bulk_change_pkg.cgi,
httemplate/misc/process/email-customers.html: customer-specific
account report (and some small refactoring of method names to
clash less), RT#6180
+2009-12-03 19:23 ivan
+
+ * FS/FS/cust_pkg.pm: doh, 1.9 fix customer package search (fallout
+ from customer classes) and add "not yet billed" status to
+ customer package report
+
2009-12-03 11:22 ivan
* httemplate/graph/cust_bill_pkg.cgi: average per cust_pkg option
@@ -492,32 +2546,24 @@
2009-11-23 23:23 ivan
- * httemplate/search/: report_timeworked.html: add date constratint
- on time worked search
-
-2009-11-23 23:23 ivan
-
- * httemplate/search/report_timeworked.html: file
- report_timeworked.html was added on branch FREESIDE_1_9_BRANCH on
- 2009-11-24 07:23:47 +0000
+ * httemplate/: search/report_timeworked.html, elements/menu.html,
+ search/timeworked.html: add date constratint on time worked
+ search
2009-11-23 22:04 ivan
* FS/FS/cust_main.pm: send card number with void transactions for
B:OP:IPPay, RT#5690
-2009-11-23 17:11 mark
+2009-11-23 14:09 mark
- * FS/FS/Schema.pm, httemplate/browse/cust_attachment.html,
- httemplate/edit/cust_main_attach.cgi,
- httemplate/edit/process/cust_main_attach.cgi,
- httemplate/elements/menu.html,
- httemplate/misc/cust_attachment.cgi,
- httemplate/search/elements/search-html.html,
- httemplate/view/cust_main/attachments.html: cust_attachment
- improvement, RT#4964 and #6225
+ * FS/FS/Schema.pm: Add title field to cust_attachment
+
+2009-11-22 16:25 jeff
-2009-11-20 09:39 jeff
+ * FS/FS/cust_bill_ApplicationCommon.pm: apply to taxes last
+
+2009-11-20 09:33 jeff
* FS/FS/Conf.pm, FS/FS/Schema.pm, FS/FS/cust_bill.pm,
FS/FS/cust_bill_pkg.pm, FS/FS/cust_bill_pkg_detail.pm,
@@ -550,16 +2596,6 @@
2009-11-19 01:32 ivan
- * FS/FS/cdr_batch.pm: file cdr_batch.pm was added on branch
- FREESIDE_1_9_BRANCH on 2009-11-19 09:35:13 +0000
-
-2009-11-19 01:32 ivan
-
- * FS/t/cdr_batch.t: file cdr_batch.t was added on branch
- FREESIDE_1_9_BRANCH on 2009-11-19 09:35:13 +0000
-
-2009-11-19 01:32 ivan
-
* FS/: FS/cdr_batch.pm, t/cdr_batch.t: proper cdr_batch table,
RT#6386
@@ -575,17 +2611,12 @@
2009-11-18 01:39 mark
- * FS/FS/Conf.pm, FS/FS/pay_batch/RBC.pm,
- httemplate/search/cust_pay_batch.cgi: RT#4786, RBC batch format
-
-2009-11-18 01:27 mark
-
- * FS/FS/pay_batch/RBC.pm: RT#4768, RBC batch format
+ * httemplate/search/cust_pay_batch.cgi: RT#4786, RBC batch format
2009-11-18 01:27 mark
- * FS/FS/pay_batch/RBC.pm: file RBC.pm was added on branch
- FREESIDE_1_9_BRANCH on 2009-11-18 09:40:04 +0000
+ * FS/FS/Conf.pm, FS/FS/pay_batch/RBC.pm,
+ httemplate/search/cust_pay_batch.cgi: RT#4768, RBC batch format
2009-11-18 01:09 mark
@@ -593,17 +2624,6 @@
misc/cust_attachment.cgi: cust_attachment improvement, RT#4964
and #6225
-2009-11-18 01:09 mark
-
- * httemplate/misc/cust_attachment.cgi: file cust_attachment.cgi was
- added on branch FREESIDE_1_9_BRANCH on 2009-11-24 01:11:22 +0000
-
-2009-11-18 01:09 mark
-
- * httemplate/browse/cust_attachment.html: file cust_attachment.html
- was added on branch FREESIDE_1_9_BRANCH on 2009-11-24 01:11:21
- +0000
-
2009-11-17 14:06 ivan
* FS/FS/cust_main.pm: do a case-insensive search on
@@ -611,6 +2631,11 @@
(which UPPERCASES everything) doesn't invalidate everything your
browser remembered in quick payment entry
+2009-11-17 12:56 jeff
+
+ * httemplate/edit/elements/ApplicationCommon.html: work around ie7
+ javascript issues
+
2009-11-16 23:42 ivan
* httemplate/search/: report_cust_pay.html,
@@ -622,6 +2647,14 @@
* httemplate/: elements/menu.html, search/report_cust_refund.html:
add refund report, RT#6407
+2009-11-16 16:06 mark
+
+ * httemplate/: edit/cust_main_attach.cgi,
+ edit/process/cust_main_attach.cgi, elements/menu.html,
+ search/elements/search-html.html, view/cust_main.cgi,
+ view/cust_main/attachments.html: cust_attachment improvement,
+ RT#4964 and #6225
+
2009-11-15 19:55 ivan
* FS/FS/cust_bill.pm, FS/FS/cust_main.pm,
@@ -641,11 +2674,41 @@
httemplate/search/report_cust_main.html: add invoice terms to
advanced customer report. dogfood.
+2009-11-12 23:12 ivan
+
+ * FS/FS/cust_pkg.pm: fix advanced package report fallout from
+ customer classes, RT#6677
+
+2009-11-12 13:45 mark
+
+ * FS/FS/Conf.pm, FS/FS/svc_acct.pm, httemplate/view/svc_acct.cgi,
+ httemplate/edit/svc_acct.cgi,
+ httemplate/edit/process/svc_acct.cgi: Add default password
+ encoding option
+
2009-11-12 08:56 jeff
- * FS/FS/: tax_rate.pm, Schema.pm: correct bugs in tax replacement
+ * FS/FS/: Schema.pm, tax_rate.pm: correct bugs in tax replacement
routine and allow updates to function
+2009-11-11 18:05 mark
+
+ * FS/FS/pay_batch/paymentech.pm: Fix date format string
+
+2009-11-11 18:03 mark
+
+ * FS/bin/: freeside-paymentech-upload,
+ freeside-paymentech-download: Fix zip password
+
+2009-11-11 08:38 jeff
+
+ * httemplate/edit/cust_credit.cgi: cruft removal
+
+2009-11-06 14:25 jeff
+
+ * httemplate/misc/xmlhttp-calculate_taxes.html: oops! forgot an
+ important file for applying tax credits #4729
+
2009-11-06 14:07 ivan
* FS/FS/cust_main.pm: use business-onlinepayment-description in
@@ -681,10 +2744,6 @@
freeside-paymentech-upload: back to old host name, info from
customer/paymentech was bogus, RT#5650
-2009-11-05 11:40 ivan
-
- * FS/FS/pkg_category.pm: fix pkg_category upgrade on 1.9 too
-
2009-11-04 17:47 ivan
* FS/bin/: freeside-paymentech-download,
@@ -695,6 +2754,20 @@
* FS/FS/pkg_category.pm: fix pkg_category upgrades
+2009-11-04 16:48 ivan
+
+ * FS/FS/cust_main.pm: fix bad interaction between new city tax code
+ & using taxclasses without cities, RT#6637
+
+2009-11-04 16:29 ivan
+
+ * FS/FS/Mason.pm: oops, for customer categories
+
+2009-11-04 16:04 ivan
+
+ * httemplate/browse/cust_main_county.cgi: fix county filter on tax
+ config, fallout from city tax changes, RT#5852
+
2009-11-03 17:40 ivan
* FS/bin/: freeside-paymentech-download,
@@ -712,21 +2785,15 @@
* FS/FS/part_pkg.pm: silence "use of uninitialized value in split"
warning
-2009-11-03 16:53 ivan
-
- * FS/FS/cust_pkg.pm, httemplate/browse/part_pkg.cgi: fix customer
- package search (fallout from customer classes) & add "not yet
- billed" status to customer package report
-
2009-11-03 12:44 ivan
* FS/FS/pay_batch.pm: fix warning replacing pay_batch, RT#5650
2009-11-03 11:56 ivan
- * FS/bin/: freeside-paymentech-download,
- freeside-paymentech-upload: check for zip and unzip commands, use
- multi-arg version of system to prevent the shell getting its
+ * FS/bin/: freeside-paymentech-upload,
+ freeside-paymentech-download: check for zip and unzip commands,
+ use multi-arg version of system to prevent the shell getting its
hands on things (metacharacters in pw or whatnot), RT#5650
2009-11-03 11:11 ivan
@@ -741,18 +2808,6 @@
freeside-paymentech-upload: fix usage of File::Temp->newdir, not
in 0.18 File::Temp on perl 5.10.0, RT#5650
-2009-11-03 10:54 ivan
-
- * FS/bin/freeside-paymentech-download: file
- freeside-paymentech-download was added on branch
- FREESIDE_1_9_BRANCH on 2009-11-03 18:54:19 +0000
-
-2009-11-03 10:54 ivan
-
- * FS/bin/freeside-paymentech-upload: file
- freeside-paymentech-upload was added on branch
- FREESIDE_1_9_BRANCH on 2009-11-03 18:54:19 +0000
-
2009-11-03 10:53 ivan
* bin/paymentech-download, bin/paymentech-upload,
@@ -762,14 +2817,9 @@
2009-11-02 19:13 ivan
- * FS/FS/Cron/breakage.pm: file breakage.pm was added on branch
- FREESIDE_1_9_BRANCH on 2009-11-03 03:13:47 +0000
-
-2009-11-02 19:13 ivan
-
- * FS/FS/Conf.pm, FS/bin/freeside-daily,
- httemplate/config/config-process.cgi,
- httemplate/config/config-view.cgi, httemplate/config/config.cgi,
+ * httemplate/config/config.cgi, FS/FS/Conf.pm,
+ FS/bin/freeside-daily, httemplate/config/config-process.cgi,
+ httemplate/config/config-view.cgi,
httemplate/elements/tr-select-part_pkg.html,
FS/FS/Cron/breakage.pm: (start of) reconcile breakage from stale
accounts, RT#6407
@@ -792,47 +2842,25 @@
* httemplate/edit/payment_gateway.html: add Elavon, SagePay,
WorldPay, fix extra space on PlugnPay, PPIPayMover, Protx
-2009-11-01 15:03 jeff
+2009-11-01 14:12 jeff
* httemplate/search/: 477.html, elements/search-csv.html: form 477
improvements #6499
-2009-10-31 14:22 jeff
+2009-10-31 13:09 jeff
* FS/FS/cust_bill.pm: unbork summary page invoices
2009-10-30 16:29 ivan
- * httemplate/elements/select-part_event.html: file
- select-part_event.html was added on branch FREESIDE_1_9_BRANCH on
- 2009-10-30 23:30:13 +0000
-
-2009-10-30 16:29 ivan
-
- * httemplate/elements/tr-select-part_event.html: file
- tr-select-part_event.html was added on branch FREESIDE_1_9_BRANCH
- on 2009-10-30 23:30:12 +0000
-
-2009-10-30 16:29 ivan
-
- * httemplate/elements/select-part_event.html,
- httemplate/elements/tr-select-part_event.html,
- FS/FS/cust_event.pm, FS/FS/cust_main_Mixin.pm,
+ * FS/FS/cust_event.pm, FS/FS/cust_main_Mixin.pm,
+ httemplate/elements/select-part_event.html,
httemplate/elements/select-payby.html,
+ httemplate/elements/tr-select-part_event.html,
httemplate/search/cust_event.html,
httemplate/search/report_cust_event.html: more reporting options
for failed billing events, RT#6447
-2009-10-30 11:55 ivan
-
- * FS/FS/: pay_batch.pm, pay_batch/paymentech.pm: backporting recent
- paymentech changes to _1_9_BRANCH
-
-2009-10-30 11:51 ivan
-
- * bin/: paymentech-download, paymentech-upload: adding paymentech-*
- on _1_9_BRANCH
-
2009-10-30 11:37 ivan
* FS/FS/: Conf.pm: add paymentech to batch config options
@@ -844,14 +2872,14 @@
edit/process/bulk-cust_main_county.html: bulk tax changes,
RT#6445
-2009-10-29 16:42 mark
+2009-10-29 16:43 mark
- * bin/paymentech-upload: add option to upload all open batches
+ * FS/FS/pay_batch/paymentech.pm: use XML::Writer for tighter
+ compliance with spec
-2009-10-29 16:42 ivan
+2009-10-29 16:42 mark
- * bin/paymentech-upload: file paymentech-upload was added on branch
- FREESIDE_1_9_BRANCH on 2009-10-30 18:51:05 +0000
+ * bin/paymentech-upload: add option to upload all open batches
2009-10-29 16:37 ivan
@@ -868,9 +2896,48 @@
* FS/bin/freeside-queued: have freeside-queued be more resillient
in the face of a database that's gone away, RT#6428
-2009-10-29 15:18 mark
+2009-10-29 12:10 ivan
- * httemplate/edit/payment_gateway.html: add Jety to the list
+ * FS/FS/cust_bill_pkg.pm: turn off debugging
+
+2009-10-29 12:08 ivan
+
+ * httemplate/search/cust_main.html,
+ httemplate/search/report_cust_main.html, FS/FS/cust_main.pm,
+ httemplate/elements/select-table.html: customer classification,
+ RT#6376
+
+2009-10-29 11:38 ivan
+
+ * FS/MANIFEST, FS/FS/cust_main.pm, FS/t/category_Common.t,
+ FS/t/class_Common.t, httemplate/browse/pkg_category.html,
+ httemplate/edit/cust_main/top_misc.html,
+ httemplate/view/cust_main/misc.html,
+ httemplate/elements/select-cust_class.html,
+ httemplate/elements/tr-select-cust_class.html: customer
+ classification, RT#6376
+
+2009-10-28 18:08 ivan
+
+ * FS/FS.pm, FS/MANIFEST, FS/FS/Schema.pm, FS/FS/category_Common.pm,
+ FS/FS/class_Common.pm, FS/FS/cust_category.pm,
+ FS/FS/cust_class.pm, FS/FS/cust_main.pm, FS/FS/pkg_category.pm,
+ FS/FS/pkg_class.pm, FS/t/cust_category.t, FS/t/cust_class.t,
+ httemplate/elements/menu.html,
+ httemplate/browse/cust_category.html,
+ httemplate/browse/cust_class.html,
+ httemplate/browse/part_pkg_report_option.html,
+ httemplate/browse/pkg_category.html,
+ httemplate/browse/pkg_class.html,
+ httemplate/edit/cust_category.html,
+ httemplate/edit/cust_class.html,
+ httemplate/edit/pkg_category.html,
+ httemplate/edit/pkg_class.html,
+ httemplate/edit/elements/category_Common.html,
+ httemplate/edit/elements/class_Common.html,
+ httemplate/edit/process/cust_category.html,
+ httemplate/edit/process/cust_class.html: customer classification,
+ RT#6376
2009-10-28 12:04 ivan
@@ -879,6 +2946,15 @@
(and other fields controlled by check in svc_acct and also
svc_www, svc_domain and svc_forward), RT#6366
+2009-10-28 12:01 jeff
+
+ * FS/FS/cust_bill_pkg.pm, FS/FS/cust_credit.pm, FS/FS/cust_main.pm,
+ httemplate/edit/elements/ApplicationCommon.html,
+ httemplate/edit/process/cust_credit_bill.cgi,
+ httemplate/edit/process/elements/ApplicationCommon.html: UI
+ changes for credit applications include on the fly tax
+ calculations #4729
+
2009-10-28 11:16 ivan
* FS/FS/part_svc.pm: fix removing a flag from a service definition
@@ -902,6 +2978,10 @@
* FS/FS/Conf.pm, FS/FS/cust_main.pm,
httemplate/elements/header.html: address1 search, RT#5060
+2009-10-26 18:26 mark
+
+ * httemplate/edit/payment_gateway.html: add Jety to the list
+
2009-10-26 16:20 ivan
* httemplate/elements/tr-select-pkg_class.html: didn't want to
@@ -912,9 +2992,22 @@
* httemplate/elements/tr-select-pkg_class.html: better fix for
ignoring disabled package classes that doesn't search them twice
-2009-10-26 14:55 ivan
+2009-10-26 00:12 jeff
- * FS/FS/cust_bill_pkg.pm: turn off debugging
+ * FS/FS/Conf.pm, FS/FS/Schema.pm,
+ FS/FS/cust_bill_ApplicationCommon.pm, FS/FS/cust_bill_pay_pkg.pm,
+ FS/FS/cust_bill_pkg.pm, FS/FS/cust_bill_pkg_tax_location.pm,
+ FS/FS/cust_bill_pkg_tax_rate_location.pm,
+ FS/FS/cust_credit_bill_pkg.pm, httemplate/edit/cust_credit.cgi,
+ httemplate/edit/elements/ApplicationCommon.html,
+ httemplate/edit/process/elements/ApplicationCommon.html,
+ httemplate/search/cust_bill_pkg.cgi,
+ httemplate/search/report_newtax.cgi,
+ httemplate/search/report_tax.cgi,
+ httemplate/view/cust_main/payment_history/credit.html,
+ httemplate/view/cust_main/payment_history/payment.html: credits
+ return taxes, but the magic calculation button does not yet work
+ properly (grrr - more sleep required) RT#4729
2009-10-25 18:11 ivan
@@ -926,14 +3019,15 @@
* FS/FS/: cust_main.pm, ClientAPI/MyAccount.pm: add apply option to
realtime_collect, RT#5071
-2009-10-24 16:37 ivan
+2009-10-24 17:29 ivan
- * bin/paymentech-download: file paymentech-download was added on
- branch FREESIDE_1_9_BRANCH on 2009-10-30 18:51:05 +0000
+ * httemplate/search/cust_bill.html: import legacy invoice numbers
+ to cust_bill.agent_invid, RT#5351
2009-10-24 16:37 mark
- * bin/: paymentech-download, paymentech-upload: Scripts for
+ * FS/FS/pay_batch.pm, FS/FS/Conf.pm, FS/FS/pay_batch/paymentech.pm,
+ bin/paymentech-download, bin/paymentech-upload: Scripts for
paymentech batch transfer
2009-10-23 19:04 ivan
@@ -964,6 +3058,11 @@
* FS/FS/Record.pm: fix cause of harmless 'Premature end of base64
data' warning
+2009-10-23 01:21 ivan
+
+ * bin/move-unlinked: adding unlinked account migration script,
+ RT#6126
+
2009-10-22 18:41 ivan
* FS/FS/: Conf.pm, cust_pkg.pm: add cust_bill-consolidate_services
@@ -974,6 +3073,35 @@
* FS/FS/cust_bill.pm: fix invoice sub-totals, RT#6489
+2009-10-22 12:56 ivan
+
+ * FS/FS/ClientAPI/MasonComponent.pm: make sure that in the case
+ where there's no uncancelled active packages, the filter doesn't
+ reduce the package list to nothing, RT#6029
+
+2009-10-22 12:53 ivan
+
+ * FS/FS/ClientAPI/MasonComponent.pm: acciendtally left debugging
+ in, RT#6029
+
+2009-10-22 05:50 ivan
+
+ * FS/FS/Conf.pm, FS/FS/Schema.pm, FS/FS/part_pkg.pm,
+ FS/FS/ClientAPI/MasonComponent.pm,
+ httemplate/browse/part_pkg.cgi, httemplate/edit/part_pkg.cgi:
+ restrict additinal package order option, RT#6029
+
+2009-10-22 02:34 ivan
+
+ * httemplate/elements/city.html: yay, found blank city problem
+ w/new citytax foo, RT#5852
+
+2009-10-22 01:58 ivan
+
+ * httemplate/elements/select-county.html: fix all location selects
+ hidden on new customer add, fallout from city tax stuff, yay for
+ this not being on _1_9_BRANCH, RT#5852
+
2009-10-22 01:08 ivan
* httemplate/search/svc_phone.cgi: should at least run under pg 8.3
@@ -1052,11 +3180,46 @@
inadvertant "unknown package" error, fallout from pkg-balance
work, RT#6125
-2009-10-11 23:43 ivan
+2009-10-11 19:34 ivan
+
+ * FS/FS/cust_main.pm: using the per-city taxes sure was a lot
+ easier than the UI... RT#5852
+
+2009-10-11 19:30 ivan
* FS/FS/part_event/Action/: cust_bill_fee_percent.pm, fee.pm: fix
for no finance_pkgclass set
+2009-10-11 19:14 ivan
+
+ * httemplate/edit/cust_main_county.html: UI for per-city taxes
+ (setup and assigning to customers/package locations), RT#5852
+
+2009-10-11 18:58 ivan
+
+ * httemplate/: edit/cust_main/contact.html,
+ elements/select-country.html: UI for per-city taxes (setup and
+ assigning to customers/package locations), RT#5852
+
+2009-10-11 18:45 ivan
+
+ * FS/FS/Mason.pm, FS/FS/Misc.pm, FS/FS/Schema.pm,
+ FS/FS/cust_main_county.pm,
+ httemplate/browse/cust_main_county.cgi,
+ httemplate/edit/cust_main.cgi,
+ httemplate/edit/cust_main_county-expand.cgi,
+ httemplate/edit/process/cust_main_county-collapse.cgi,
+ httemplate/edit/process/cust_main_county-expand.cgi,
+ httemplate/elements/city.html, httemplate/elements/location.html,
+ httemplate/elements/select-county.html,
+ httemplate/elements/tr-select-cust_location.html,
+ httemplate/misc/cities.cgi: UI for per-city taxes (setup and
+ assigning to customers/package locations), RT#5852
+
+2009-10-11 00:44 ivan
+
+ * conf/ticket_system-default_queueid: default to 1
+
2009-10-10 19:41 ivan
* ChangeLog, debian/changelog: Updated for 1.9.1
@@ -1181,7 +3344,8 @@
2009-10-07 16:44 ivan
- * FS/FS/cust_bill.pm, httemplate/misc/send-invoice.cgi,
+ * FS/FS/cust_bill.pm, httemplate/misc/email-statement.cgi,
+ httemplate/misc/send-invoice.cgi,
httemplate/misc/send-statement.cgi,
httemplate/search/cust_event.html,
FS/FS/part_event/Action/cust_bill_send_reminder.pm,
@@ -1739,6 +3903,7 @@
FS/FS/part_event/Condition/has_pkg_class.pm,
FS/FS/part_event/Condition/has_pkgpart.pm,
FS/FS/part_event/Condition/hasnt_pkgpart.pm,
+ httemplate/misc/email-statement.cgi,
httemplate/view/cust_statement-pdf.cgi,
httemplate/view/cust_statement.html: email statements, RT#4860
@@ -1844,7 +4009,7 @@
2009-08-12 07:58 jeff
- * Makefile, FS/FS/Conf.pm, FS/FS/Cron/upload.pm,
+ * bin/billco-upload, Makefile, FS/FS/Conf.pm, FS/FS/Cron/upload.pm,
FS/bin/freeside-daily, FS/bin/freeside-monthly,
httemplate/config/config-view.cgi: internalize billco-upload and
automate the transfer to the provider RT#5902
@@ -2339,6 +4504,11 @@
* FS/: FS/cust_main.pm, FS/Cron/bill.pm, bin/freeside-daily: commit
pkgpart exclusion for billing run, RT#5495
+2009-07-17 07:58 jeff
+
+ * bin/billco-upload: add mutex and commit changes found on
+ installed system
+
2009-07-16 19:29 jeff
* httemplate/search/cust_pkg.cgi: FSM, another missed file for 477
@@ -2365,9 +4535,9 @@
2009-07-16 17:10 ivan
- * FS/: FS/Schema.pm, FS/cdr.pm, FS/part_pkg/voip_cdr.pm, FS.pm: get
- rid of cdr_upstream_rate table and some other old convergent
- cruft
+ * FS/: FS/Schema.pm, FS/cdr.pm, FS/cdr_upstream_rate.pm,
+ FS/part_pkg/voip_cdr.pm, FS.pm, t/cdr_upstream_rate.t: get rid of
+ cdr_upstream_rate table and some other old convergent cruft
2009-07-16 15:16 jeff
@@ -2791,6 +4961,11 @@
* FS/MANIFEST: remove freeside-expiration-alerter
+2009-06-26 17:55 ivan
+
+ * FS/bin/freeside-expiration-alerter: replaced by
+ FS::Cron::alert_expiration
+
2009-06-26 16:21 ivan
* FS/bin/freeside-queued: doh, brainfart, RT#5572
@@ -3481,8 +5656,8 @@
2009-05-09 16:54 ivan
- * FS/bin/freeside-cdr-sftp_and_import: move cdr-sftp_and_import
- script to FS/bin, add -p option, RT#4081
+ * FS/bin/freeside-cdr-sftp_and_import, bin/cdr.sftp_and_import:
+ move cdr-sftp_and_import script to FS/bin, add -p option, RT#4081
2009-05-09 00:56 ivan
@@ -3890,6 +6065,7 @@
httemplate/edit/cust_main/top_misc.html,
httemplate/edit/cust_main/billing.html,
httemplate/edit/cust_main/choose_tax_location.html,
+ httemplate/edit/cust_main/select-domain.html,
httemplate/edit/cust_main/first_pkg/select-part_pkg.html,
httemplate/edit/cust_main/first_pkg/svc_acct.html,
httemplate/edit/cust_main/first_pkg/svc_phone.html,
@@ -4538,6 +6714,10 @@
* FS/FS/Setup.pm: be quiet
+2009-02-24 02:09 ivan
+
+ * conf/report_template: more bootstrapping bs
+
2009-02-24 02:06 ivan
* FS/FS/part_referral.pm: bootstrapping issues
@@ -4811,8 +6991,9 @@
2009-02-09 06:05 ivan
* FS/FS/Conf.pm, FS/FS/cust_bill.pm, FS/FS/cust_credit.pm,
- FS/FS/cust_pay.pm, conf/invoice_html,
- conf/invoice_html_statement, httemplate/config/config-image.cgi,
+ FS/FS/cust_pay.pm, FS/bin/freeside-expiration-alerter,
+ conf/invoice_html, conf/invoice_html_statement,
+ httemplate/config/config-image.cgi,
httemplate/config/config-process.cgi,
httemplate/config/config-view.cgi, httemplate/config/config.cgi,
httemplate/elements/header.html, httemplate/view/REAL_logo.cgi,
@@ -5332,13 +7513,15 @@
2009-01-02 17:52 ivan
- * bin/cdr.http_and_import, bin/cdr.import, FS/FS/Record.pm,
- FS/FS/cdr.pm, FS/FS/cdr/indosoft.pm: indosoft CDR format, RT#4425
+ * bin/cdr.http_and_import, bin/cdr.import, bin/cdr.sftp_and_import,
+ FS/FS/Record.pm, FS/FS/cdr.pm, FS/FS/cdr/indosoft.pm: indosoft
+ CDR format, RT#4425
2009-01-02 14:03 ivan
* FS/FS/Record.pm, FS/FS/cdr.pm, FS/FS/cdr/bell_west.pm,
- FS/FS/cdr/troop.pm, bin/cdr.import: add troop CDRs, RT#4413
+ FS/FS/cdr/troop.pm, bin/cdr.import, bin/cdr.sftp_and_import: add
+ troop CDRs, RT#4413
2009-01-02 10:01 ivan
@@ -5394,8 +7577,8 @@
2008-12-29 10:06 jeff
- * Makefile, conf/invoice_latex, etc/fslongtable.sty: ease
- deployment of patched longtable
+ * Makefile, conf/invoice_latex, conf/longtable.sty.patch,
+ etc/fslongtable.sty: ease deployment of patched longtable
2008-12-28 11:10 ivan
@@ -5428,9 +7611,11 @@
* httemplate/: browse/cust_main_county.cgi,
edit/cust_main/contact.html, edit/cust_main/billing.html,
- misc/payment.cgi: fix browse results for selecting counties
- (resulting from separating tax classes), also add dropdowns to
- browse by state and county, RT#4496
+ misc/payment.cgi, edit/cust_main/select-country.html,
+ edit/cust_main/select-county.html,
+ edit/cust_main/select-state.html: fix browse results for
+ selecting counties (resulting from separating tax classes), also
+ add dropdowns to browse by state and county, RT#4496
2008-12-24 16:45 jeff
@@ -6212,6 +8397,11 @@
* conf/invoice_latex: better value for non-broken tetex
+2008-10-12 12:43 jeff
+
+ * conf/longtable.sty.patch: check not just for fit, but move the
+ goalposts as well
+
2008-10-11 17:58 ivan
* httemplate/browse/cust_main_county.cgi: fix link
@@ -6239,7 +8429,8 @@
2008-10-10 14:30 jeff
- * conf/invoice_latex: avoid overprinting remittance coupons
+ * conf/: invoice_latex, longtable.sty.patch: avoid overprinting
+ remittance coupons
2008-10-10 12:25 ivan
@@ -6681,7 +8872,7 @@
2008-08-28 18:09 ivan
- * FS/FS/Schema.pm, FS/FS/cdr.pm,
+ * FS/FS/Schema.pm, FS/FS/cdr.pm, bin/cdr.sftp_and_import,
httemplate/elements/select-cdrbatch.html,
httemplate/elements/tr-select-cdrbatch.html,
httemplate/search/cdr.html, httemplate/search/report_cdr.html:
@@ -7014,7 +9205,7 @@
2008-07-30 15:10 ivan
- * FS/FS/cdr/nextone.pm: rename nt to nextone
+ * FS/FS/cdr/: nextone.pm, nt.pm: rename nt to nextone
2008-07-29 13:00 jeff
@@ -7126,7 +9317,7 @@
2008-07-17 16:55 ivan
* FS/FS/: cdr.pm, cdr/asterisk.pm, cdr/genband.pm,
- cdr/genband_meetme.pm, cdr/openser.pm, cdr/simple.pm,
+ cdr/genband_meetme.pm, cdr/nt.pm, cdr/openser.pm, cdr/simple.pm,
cdr/taqua.pm, cdr/unitel.pm: CDR updates; modularize CDR import
formats; add formats for OpenSER, Genband/Tekelec, and "NT"
@@ -7370,7 +9561,9 @@
httemplate/misc/areacodes.cgi, httemplate/misc/exchanges.cgi,
httemplate/misc/phonenums.cgi, FS/FS/Record.pm,
FS/FS/part_export/globalpops_voip.pm,
- httemplate/edit/svc_phone.cgi: get DIDs from globalpops
+ httemplate/edit/svc_phone.cgi,
+ httemplate/edit/cust_main/select-state.html: get DIDs from
+ globalpops
2008-06-28 12:25 jeff
@@ -8291,6 +10484,10 @@
(cancel/suspend) reason and possibly fix a lingering spurious
usergroup bug
+2008-04-16 04:54 jeff
+
+ * httemplate/edit/part_pkg_taxproduct.html: this no longer belongs
+
2008-04-15 21:42 ivan
* httemplate/: edit/part_pkg.cgi, browse/part_pkg.cgi: add plan &
@@ -8496,12 +10693,15 @@
2008-04-07 22:49 ivan
- * debian/: README.Debian, TODO, changelog, compat, config, control,
- copyright, cron.d, dbconfig-common.install,
- dbconfig-common.upgrade, freeside-webui.links,
- freeside.apache-alias.conf, freeside.default, freeside.docs,
- init.d.ex, init.d.lsb.ex, postinst, postrm, preinst, prerm,
- rules, templates: debian packages!
+ * debian/: README.Debian, TODO, changelog, compat, conffiles.ex,
+ config, control, copyright, cron.d, cron.d.ex,
+ dbconfig-common.install, dbconfig-common.upgrade, dirs, docs,
+ ex.doc-base.package, freeside-doc.docs, freeside-doc.files,
+ freeside-webui.links, freeside.apache-alias.conf,
+ freeside.default, freeside.docs, init.d.ex, init.d.lsb.ex,
+ manpage.1.ex, manpage.sgml.ex, menu.ex, postinst, postinst.ex,
+ postrm, postrm.ex, preinst, preinst.ex, prerm, prerm.ex, rules,
+ templates, watch.ex: debian packages!
2008-04-06 09:12 jeff
@@ -8604,6 +10804,14 @@
* httemplate/docs/: credits.html, license.html: adding license and
credits in app itself
+2008-04-01 16:24 ivan
+
+ * TODO: remove TODO
+
+2008-04-01 16:24 ivan
+
+ * SCHEMA_CHANGE: remove SCHEMA_CHANGE
+
2008-04-01 16:20 ivan
* README: welcome to the new world
@@ -8693,6 +10901,7 @@
FS/t/part_pkg_taxrate.t, FS/t/tax_class.t, FS/t/tax_rate.t,
httemplate/browse/tax_rate.cgi, httemplate/edit/part_pkg.cgi,
httemplate/edit/part_pkg_taxoverride.html,
+ httemplate/edit/part_pkg_taxproduct.html,
httemplate/edit/tax_class.html, httemplate/edit/tax_rate.html,
httemplate/edit/process/part_pkg.cgi,
httemplate/edit/process/tax_class.html,
@@ -8995,25 +11204,21 @@
2008-03-16 12:58 ivan
- * fs_selfservice/fri/: theme/page.tpl.php,
- modules/callmonitor.module, modules/settings.module,
- includes/main.conf.php, includes/common.php, includes/login.php,
- locale/ari.po: Initial revision
-
-2008-03-16 12:58 ivan
-
* fs_selfservice/fri/: CHANGE.log, LICENSE.txt, README.txt,
index.php, version.php, theme/global.css, theme/header.css,
theme/iefixes.css, theme/layout.css, theme/logo.gif,
- theme/main.css, theme/navigation.css, theme/spacer.gif,
- theme/text.css, theme/images/arrow-asc.gif,
- theme/images/arrow-desc.gif, modules/phonefeatures.module,
+ theme/main.css, theme/navigation.css, theme/page.tpl.php,
+ theme/spacer.gif, theme/text.css, theme/images/arrow-asc.gif,
+ theme/images/arrow-desc.gif, modules/callmonitor.module,
+ modules/phonefeatures.module, modules/settings.module,
modules/voicemail.module, modules/featurecodes.module,
modules/followme.module, includes/ajax.php, includes/crypt.php,
- misc/audio.php, misc/popup.css, misc/recording_popup.php,
- modules/VmX.module, includes/asi.php, includes/bootstrap.php,
+ includes/main.conf.php, misc/audio.php, misc/popup.css,
+ misc/recording_popup.php, modules/VmX.module, includes/asi.php,
+ includes/bootstrap.php, includes/common.php,
includes/database.php, includes/display.php, includes/lang.php,
- locale/readme.txt, locale/ari.utf-8.po, locale/locale.txt,
+ includes/login.php, locale/readme.txt, locale/ari.po,
+ locale/ari.utf-8.po, locale/locale.txt,
locale/de_DE/LC_MESSAGES/ari.mo, locale/hu_HU/LC_MESSAGES/ari.mo,
locale/hu_HU/LC_MESSAGES/ari.po, locale/pt_BR/LC_MESSAGES/ari.mo,
locale/pt_BR/LC_MESSAGES/ari.po, locale/de_DE/LC_MESSAGES/ari.po,
@@ -9023,7 +11228,7 @@
locale/it_IT/LC_MESSAGES/ari.mo, locale/fr_FR/LC_MESSAGES/ari.mo,
locale/fr_FR/LC_MESSAGES/ari.po, locale/he_IL/LC_MESSAGES/ari.mo,
locale/he_IL/LC_MESSAGES/ari.po, locale/it_IT/LC_MESSAGES/ari.po:
- [no log message]
+ Initial revision
2008-03-16 09:57 jeff
@@ -9201,594 +11406,16 @@
html/Widgets/TitleBoxStart, sbin/rt-setup-database.in: merge in
rt 3.6.6. *gulp*!
-2008-03-01 20:10 ivan
+2008-03-01 20:11 ivan
- * rt/: lib/t/regression/08web_cf_access.t,
- lib/t/regression/12-search.t, lib/t/regression/04send_email.t,
- lib/t/regression/21query-builder.t,
- lib/t/regression/22search_tix_by_txn.t,
- lib/t/regression/22search_tix_by_watcher.t,
- lib/t/regression/06-mime_decoding.t, lib/t/regression/23cfsort.t,
- lib/t/regression/00-mason-syntax.t,
- lib/t/regression/02basic_web.t, lib/t/regression/14linking.t,
- lib/t/regression/01ticket_link_searching.t,
- lib/t/regression/13-attribute-tests.t,
- lib/t/regression/26command_line.t,
- lib/t/regression/06mailgateway.t,
- lib/t/regression/03web_compiliation_errors.t,
- lib/t/regression/07acl.t, lib/t/regression/07rights.t,
- lib/t/regression/23-web_attachments.t, html/autohandler,
- html/index.html, html/l, html/Elements/SelectBoolean,
- html/Elements/SelectCustomFieldValue, html/Elements/SelectStatus,
- html/Elements/TitleBox, html/Elements/EditCustomFieldImage,
- html/Elements/EditCustomFieldSelect, html/Elements/ShowLinks,
- html/Elements/EditLinks, html/Elements/ListActions,
- html/Elements/MessageBox, html/Elements/SelectDateRelation,
- html/Elements/SelectNewTicketQueue,
- html/Elements/SelectWatcherType, html/Elements/Error,
- html/Elements/GotoTicket, html/Elements/MyTickets,
- html/Elements/QueryString, html/Elements/Section,
- html/Elements/SelectLinkType, html/Elements/SelectMatch,
- html/Elements/ShowCustomFieldBinary, html/Elements/ShowLink,
- html/Elements/ShowMemberships, html/Elements/BevelBoxRaisedEnd,
- html/Elements/Callback, html/Elements/EmailInput,
- html/Elements/Login, html/Elements/Refresh,
- html/Elements/SelectOwner, html/Elements/SelectQueue,
- html/Elements/SelectTicketTypes, html/Elements/SelectUsers,
- html/Elements/Checkbox, html/Elements/EditCustomField,
- html/Elements/ScrubHTML, html/Elements/MyRT,
- html/Elements/SelectCustomFieldOperator,
- html/Elements/SelectEqualityOperator,
- html/Elements/SelectResultsPerPage,
- html/Elements/SelectTicketSortBy,
- html/Elements/ShowCustomFieldImage,
- html/Elements/ShowCustomFieldWikitext,
- html/Elements/BevelBoxRaisedStart, html/Elements/CreateTicket,
- html/Elements/MyRequests, html/Elements/SelectGroups,
- html/Elements/SelectLang, html/Elements/SelectSortOrder,
- html/Elements/SetupSessionCookie, html/Elements/ShowCustomFields,
- html/Elements/Submit, html/Elements/TitleBoxEnd,
- html/Elements/EditCustomFieldBinary,
- html/Elements/EditCustomFieldFreeform,
- html/Elements/EditCustomFieldText,
- html/Elements/EditCustomFieldWikitext, html/Elements/Quicksearch,
- html/Elements/SelectAttachmentField,
- html/Elements/SelectDateType,
- html/Elements/CollectionAsTable/ParseFormat,
- html/Elements/CollectionAsTable/Header,
- html/Elements/RT__Ticket/ColumnMap, html/User/Delegation.html,
- html/Search/Results.html, html/Search/Simple.html,
- html/User/Elements/DelegateRights, html/User/Elements/GroupTabs,
- html/User/Elements/Tabs, html/User/Groups/Members.html,
- html/User/Groups/Modify.html, html/User/Groups/index.html,
- html/Search/Chart, html/Search/Edit.html,
- html/Search/Results.rdf, html/Search/Results.tsv,
- html/Search/Build.html, html/Search/Elements/SelectAndOr,
- html/Search/Elements/SelectPersonType,
- html/Search/Elements/PickBasics, html/Search/Elements/PickCFs,
- html/Search/Elements/SelectSearchObject,
- html/Search/Elements/SelectSearchesForObjects,
- html/REST/1.0/logout, html/Search/Elements/BuildFormatString,
- html/Search/Elements/DisplayOptions,
- html/Search/Elements/EditFormat, html/Search/Elements/EditQuery,
- html/Search/Elements/EditSearches,
- html/Search/Elements/NewListActions,
- html/Search/Elements/PickCriteria,
- html/Search/Elements/SearchPrivacy,
- html/Search/Elements/SelectGroup,
- html/Search/Elements/SelectLinks, html/REST/1.0/autohandler,
- html/REST/1.0/dhandler, html/REST/1.0/Forms/queue/default,
- html/REST/1.0/Forms/queue/ns,
- html/REST/1.0/Forms/ticket/attachments,
- html/REST/1.0/Forms/ticket/default,
- html/REST/1.0/Forms/ticket/history,
- html/REST/1.0/Forms/ticket/links,
- html/REST/1.0/Forms/user/default, html/REST/1.0/Forms/user/ns,
- html/REST/1.0/NoAuth/mail-gateway, html/REST/1.0/search/dhandler,
- html/REST/1.0/search/ticket, html/REST/1.0/ticket/merge,
- html/NoAuth/Logout.html, html/NoAuth/Reminder.html,
- html/NoAuth/css/dhandler, html/REST/1.0/ticket/comment,
- html/REST/1.0/ticket/link, html/NoAuth/images/autohandler,
- html/NoAuth/images/bplogo.gif,
- html/NoAuth/images/css/fieldbg-autocomplete.gif,
- html/NoAuth/js/scriptaculous/controls.js,
- html/NoAuth/js/scriptaculous/effects.js,
- html/NoAuth/js/scriptaculous/prototype.js,
- html/NoAuth/js/scriptaculous/scriptaculous.js,
- html/Widgets/SavedSearch, html/Widgets/SelectionBox,
- html/Helpers/EmailAutocomplete, html/Tools/MyDay.html,
- html/Tools/Offline.html, html/Tools/Elements/Tabs,
- html/Admin/autohandler, html/Admin/index.html,
- html/Admin/Queues/CustomField.html,
- html/Admin/Queues/GroupRights.html,
- html/Admin/Queues/People.html,
- html/Download/CustomFieldValue/dhandler,
- html/Download/Tabular/dhandler,
- html/Admin/Elements/EditUserComments,
- html/Admin/Elements/GroupTabs,
- html/Admin/Elements/ObjectCustomFields,
- html/Admin/Elements/SelectCustomFieldType,
- html/Admin/Elements/SelectScrip,
- html/Admin/Elements/SelectScripCondition,
- html/Admin/Queues/CustomFields.html,
- html/Admin/Queues/Modify.html, html/Admin/Queues/Scrip.html,
- html/Admin/Queues/Scrips.html, html/Admin/Queues/Template.html,
- html/Admin/Queues/Templates.html,
- html/Admin/Queues/UserRights.html, html/Admin/Queues/index.html,
- html/Admin/Elements/CustomFieldTabs,
- html/Admin/Elements/EditCustomFieldValues,
- html/Admin/Elements/EditCustomFields,
- html/Admin/Elements/QueueTabs,
- html/Admin/Elements/SelectModifyQueue,
- html/Admin/Elements/SelectScripAction,
- html/Admin/Elements/SelectStage,
- html/Admin/Elements/SelectTemplate, html/Admin/Elements/Tabs,
- html/Admin/Elements/CreateUserCalled,
- html/Admin/Elements/EditScrip,
- html/Admin/Elements/GlobalCustomFieldTabs,
- html/Admin/Elements/ModifyTemplate,
- html/Admin/Elements/PickCustomFields,
- html/Admin/Elements/SelectModifyGroup,
- html/Admin/Elements/SelectModifyUser,
- html/Admin/Elements/SelectNewGroupMembers,
- html/Admin/Elements/SelectSingleOrMultiple,
- html/Admin/Elements/SystemTabs,
- html/Admin/Elements/AddCustomFieldValue,
- html/Admin/Elements/EditCustomField,
- html/Admin/Elements/EditQueueWatchers,
- html/Admin/Elements/EditScrips,
- html/Admin/Elements/ListGlobalCustomFields,
- html/Admin/Elements/ListGlobalScrips,
- html/Admin/Elements/SelectCustomFieldLookupType,
- html/Admin/Elements/SelectGroups,
- html/Admin/Elements/SelectUsers, html/Admin/Elements/UserTabs,
- html/Admin/Elements/EditTemplates, html/Admin/Elements/Header,
- html/Admin/Elements/PickObjects,
- html/Admin/Elements/QueueRightsForUser,
- html/Admin/Elements/SelectRights, html/Admin/Elements/ToolTabs,
- html/Admin/Global/GroupRights.html, html/Admin/Global/Scrip.html,
- html/Admin/Global/Scrips.html, html/Admin/Global/Template.html,
- html/Admin/Global/Templates.html,
- html/Admin/Global/UserRights.html, html/Admin/Global/index.html,
- html/Admin/Global/CustomFields/Queue-Transactions.html,
- html/Admin/Global/CustomFields/Groups.html,
- html/Admin/Global/CustomFields/Queue-Tickets.html,
- html/Admin/Global/CustomFields/Users.html,
- html/Admin/Global/CustomFields/index.html,
- html/Admin/Users/CustomFields.html,
- html/Admin/Users/Memberships.html,
- html/Admin/CustomFields/GroupRights.html,
- html/Admin/CustomFields/Modify.html,
- html/Admin/CustomFields/Objects.html,
- html/Admin/CustomFields/index.html,
- html/Admin/Users/History.html, html/Admin/Users/index.html,
- html/Admin/CustomFields/UserRights.html,
- html/Admin/Groups/CustomFields.html,
- html/Admin/Groups/GroupRights.html,
- html/Admin/Groups/History.html, html/Admin/Groups/Members.html,
- html/Admin/Groups/Modify.html, html/Admin/Groups/index.html,
- html/Admin/Tools/Configuration.html, html/Admin/Tools/index.html,
- html/Admin/Groups/UserRights.html, html/Ticket/Modify.html,
- html/Ticket/ShowEmailRecord.html, html/Ticket/History.html,
- html/Ticket/ModifyAll.html, html/Ticket/ModifyDates.html,
- html/Ticket/ModifyLinks.html, html/Ticket/ModifyPeople.html,
- html/Ticket/Update.html, html/Ticket/Elements/AddWatchers,
- html/Ticket/Elements/BulkLinks,
- html/Ticket/Elements/EditWatchers,
- html/Ticket/Elements/ShowDates,
- html/Ticket/Elements/EditCustomFields,
- html/Ticket/Elements/FindAttachments,
- html/Ticket/Elements/ShowMessageHeaders,
- html/Ticket/Elements/ShowRequestor,
- html/Ticket/Elements/ShowUserEntry,
- html/Ticket/Elements/EditBasics,
- html/Ticket/Elements/PreviewScrips,
- html/Ticket/Elements/ShowDependencies,
- html/Ticket/Elements/ShowGroupMembers,
- html/Ticket/Elements/ShowHistory,
- html/Ticket/Elements/ShowMembers,
- html/Ticket/Elements/ShowPeople, html/Ticket/Attachment/dhandler,
- html/Ticket/Elements/EditCustomField,
- html/Ticket/Elements/EditDates, html/Ticket/Elements/EditPeople,
- html/Ticket/Elements/LoadTextAttachments,
- html/Ticket/Elements/ShowAttachments,
- html/Ticket/Elements/ShowBasics,
- html/Ticket/Elements/ShowCustomFields,
- html/Ticket/Elements/ShowMessageStanza,
- html/Ticket/Elements/ShowQueue,
- html/Ticket/Elements/ShowTransaction,
- html/SelfService/Closed.html, html/SelfService/Create.html,
- html/SelfService/CreateTicketInQueue.html,
- html/SelfService/Display.html, html/SelfService/Error.html,
- html/SelfService/Prefs.html, html/SelfService/Update.html,
- html/SelfService/index.html,
- html/SelfService/Elements/GotoTicket,
- html/SelfService/Elements/Tabs, html/Approvals/Display.html,
- html/Approvals/index.html, html/Approvals/Elements/Approve,
- html/Approvals/Elements/PendingMyApproval,
- html/Approvals/Elements/ShowDependency,
- html/Approvals/Elements/Tabs,
- html/SelfService/Attachment/dhandler,
- html/SelfService/Elements/Header,
- html/SelfService/Elements/MyRequests, bin/mason_handler.fcgi.in,
- bin/mason_handler.scgi.in, bin/mason_handler.svc.in, bin/rt.in,
- bin/standalone_httpd.in, bin/rt-crontool.in, bin/rt-mailgate.in,
- bin/webmux.pl.in, etc/initialdata, etc/drop.Oracle: import rt
- 3.6.6
-
-2008-03-01 20:07 ivan
-
- * rt/: configure, aclocal.m4, Changelog, Makefile.in, README,
- UPGRADING, configure.ac, sbin/extract_pod_tests,
- sbin/rt-test-dependencies.in, sbin/extract-message-catalog,
- sbin/license_tag, sbin/regression_harness,
- sbin/rt-dump-database.in, lib/RT.pm.in,
- lib/RT/ObjectCustomFieldValues.pm,
- lib/RT/Transactions_Overlay.pm, lib/RT/URI.pm, sbin/factory,
- lib/RT/CustomFieldValues_Overlay.pm, lib/RT/Handle.pm,
- lib/RT/ObjectCustomField.pm, lib/RT/ObjectCustomFieldValue.pm,
- lib/RT/ScripCondition_Overlay.pm, lib/RT/ScripConditions.pm,
- lib/RT/Scrip_Overlay.pm, lib/RT/Tickets_Overlay.pm,
- lib/RT/CustomField_Overlay.pm, lib/RT/GroupMembers_Overlay.pm,
- lib/RT/I18N.pm, lib/RT/CachedGroupMember.pm,
- lib/RT/CustomFieldValues.pm, lib/RT/Links.pm, lib/RT/Queue.pm,
- lib/RT/ScripConditions_Overlay.pm, lib/RT/Scrips.pm,
- lib/RT/Scrips_Overlay.pm, lib/RT/System.pm,
- lib/RT/SavedSearch.pm, lib/RT/CustomFields_Overlay.pm,
- lib/RT/ObjectCustomFields.pm, lib/RT/ACE.pm,
- lib/RT/Attributes.pm, lib/RT/CurrentUser.pm,
- lib/RT/CustomFieldValue_Overlay.pm, lib/RT/User.pm,
- lib/RT/Base.pm, lib/RT/ScripAction_Overlay.pm,
- lib/RT/Attributes_Overlay.pm, lib/RT/CustomField.pm,
- lib/RT/Principal.pm, lib/RT/Principals_Overlay.pm,
- lib/RT/Queues.pm, lib/RT/ScripAction.pm, lib/RT/Attachments.pm,
- lib/RT/StyleGuide.pod, lib/RT/Attribute_Overlay.pm,
- lib/RT/CachedGroupMember_Overlay.pm,
- lib/RT/ObjectCustomFieldValues_Overlay.pm,
- lib/RT/SavedSearches.pm,
- lib/RT/ObjectCustomFieldValue_Overlay.pm,
- lib/RT/ScripCondition.pm, lib/RT/Templates.pm, lib/RT/Tickets.pm,
- lib/RT/Tickets_Overlay_SQL.pm, lib/RT/Users.pm,
- lib/RT/Attachments_Overlay.pm, lib/RT/CachedGroupMembers.pm,
- lib/RT/GroupMember_Overlay.pm, lib/RT/Link.pm,
- lib/RT/Transaction.pm, lib/RT/ScripActions_Overlay.pm,
- lib/RT/ACE_Overlay.pm, lib/RT/CachedGroupMembers_Overlay.pm,
- lib/RT/Scrip.pm, lib/RT/EmailParser.pm, lib/RT/Group.pm,
- lib/RT/ObjectCustomField_Overlay.pm, lib/RT/Template.pm,
- lib/RT/ACL_Overlay.pm, lib/RT/GroupMembers.pm,
- lib/RT/Principal_Overlay.pm, lib/RT/Transactions.pm,
- lib/RT/Attachment_Overlay.pm, lib/RT/Date.pm,
- lib/RT/Templates_Overlay.pm, lib/RT/ACL.pm,
- lib/RT/GroupMember.pm, lib/RT/Groups.pm, lib/RT/CustomFields.pm,
- lib/RT/Group_Overlay.pm, lib/RT/Links_Overlay.pm,
- lib/RT/ObjectCustomFields_Overlay.pm, lib/RT/Queues_Overlay.pm,
- lib/RT/Ticket.pm, lib/RT/Attribute.pm,
- lib/RT/CustomFieldValue.pm, lib/RT/Link_Overlay.pm,
- lib/RT/Principals.pm, lib/RT/ScripActions.pm,
- lib/RT/Attachment.pm, lib/RT/Queue_Overlay.pm,
- lib/RT/Template_Overlay.pm, lib/RT/URI/base.pm,
- lib/RT/URI/fsck_com_rt.pm, lib/RT/URI/t.pm,
- lib/RT/Interface/Email.pm, lib/RT/Interface/REST.pm,
- lib/RT/Interface/CLI.pm, lib/RT/Interface/Web.pm,
- lib/RT/Interface/Web/Handler.pm,
- lib/RT/Interface/Web/QueryBuilder.pm,
- lib/RT/Interface/Web/Standalone.pm,
- lib/RT/Interface/Web/QueryBuilder/Tree.pm,
- lib/RT/Action/Autoreply.pm, lib/RT/Action/Generic.pm,
- lib/RT/Action/RecordComment.pm,
- lib/RT/Action/RecordCorrespondence.pm,
- lib/RT/Interface/Email/Auth/GnuPG.pm,
- lib/RT/Interface/Email/Auth/MailFrom.pm,
- lib/RT/Interface/Email/Filter/SpamAssassin.pm,
- lib/RT/Action/Notify.pm, lib/RT/Action/AutoOpen.pm,
- lib/RT/Action/CreateTickets.pm,
- lib/RT/Action/EscalatePriority.pm,
- lib/RT/Action/NotifyAsComment.pm,
- lib/RT/Action/ResolveMembers.pm, lib/RT/Action/SetPriority.pm,
- lib/RT/Action/UserDefined.pm, lib/RT/Action/SendEmail.pm,
- lib/RT/Search/ActiveTicketsInQueue.pm, lib/RT/Search/FromSQL.pm,
- lib/RT/Search/Generic.pm, lib/RT/Search/Googleish.pm,
- lib/RT/I18N/cs.po, lib/RT/I18N/es.po, lib/RT/I18N/fi.po,
- lib/RT/I18N/zh_cn.po, lib/RT/I18N/hu.po, lib/RT/I18N/he.po,
- lib/RT/I18N/de.po, lib/RT/I18N/ru.po, lib/RT/I18N/nl.po,
- lib/RT/I18N/pl.po, lib/RT/I18N/da.po, lib/RT/I18N/fr.po,
- lib/RT/I18N/cs.pm, lib/RT/I18N/it.po, lib/RT/I18N/id.po,
- lib/RT/I18N/ja.po, lib/RT/I18N/zh_tw.po,
- lib/RT/I18N/i_default.pm, lib/RT/I18N/pt_br.po,
- lib/RT/I18N/en.po, lib/RT/Condition/AnyTransaction.pm,
- lib/RT/Condition/BeforeDue.pm, lib/RT/Condition/Generic.pm,
- lib/RT/Condition/Overdue.pm, lib/RT/Condition/OwnerChange.pm,
- lib/RT/Condition/PriorityChange.pm,
- lib/RT/Condition/PriorityExceeds.pm,
- lib/RT/Condition/StatusChange.pm,
- lib/RT/Condition/UserDefined.pm, lib/RT/I18N/no.po,
- lib/RT/Condition/QueueChange.pm, lib/RT/Report/Tickets.pm: import
- rt 3.6.6
-
-2008-03-01 20:05 ivan
-
- * rt/: html/SelfService/Create.html, html/SelfService/Error.html,
- html/Ticket/Attachment/dhandler, html/Ticket/Elements/EditBasics,
- html/Ticket/Elements/EditCustomField,
- html/Ticket/Elements/EditDates, html/Ticket/Elements/EditPeople,
- html/Ticket/Elements/LoadTextAttachments,
- html/Ticket/Elements/ShowAttachments,
- html/Ticket/Elements/ShowBasics,
- html/Ticket/Elements/ShowCustomFields,
- html/Ticket/Elements/ShowGroupMembers,
- html/Ticket/Elements/ShowMessageStanza,
- html/Ticket/Elements/ShowPeople,
- html/Ticket/Elements/ShowTransaction,
- html/SelfService/Closed.html,
- html/SelfService/CreateTicketInQueue.html,
- html/SelfService/Display.html, html/SelfService/Prefs.html,
- html/SelfService/Update.html, html/SelfService/index.html,
- html/SelfService/Attachment/dhandler,
- html/SelfService/Elements/GotoTicket,
- html/SelfService/Elements/Header,
- html/SelfService/Elements/MyRequests,
- html/SelfService/Elements/Tabs, html/Approvals/Display.html,
- html/Approvals/index.html, html/Approvals/Elements/Approve,
- html/Approvals/Elements/PendingMyApproval,
- html/Approvals/Elements/Tabs,
- html/Approvals/Elements/ShowDependency,
- bin/mason_handler.fcgi.in, bin/mason_handler.scgi.in,
- bin/mason_handler.svc.in, bin/rt.in, bin/standalone_httpd.in,
- bin/rt-crontool.in, bin/rt-mailgate.in, bin/webmux.pl.in,
- etc/initialdata, etc/drop.Oracle: import rt 3.4.6
-
-2008-03-01 20:02 ivan
-
- * rt/: configure, aclocal.m4, Changelog, Makefile.in, README,
- UPGRADING, configure.ac, sbin/extract_pod_tests,
- sbin/rt-test-dependencies.in, sbin/extract-message-catalog,
- sbin/license_tag, sbin/regression_harness,
- sbin/rt-dump-database.in, lib/RT.pm.in,
- lib/RT/Transactions_Overlay.pm, lib/RT/URI.pm, sbin/factory,
- lib/RT/Handle.pm, lib/RT/ObjectCustomField.pm,
- lib/RT/ObjectCustomFieldValues.pm,
- lib/RT/ScripCondition_Overlay.pm,
- lib/RT/CustomFieldValues_Overlay.pm,
- lib/RT/ObjectCustomFieldValue.pm, lib/RT/ScripConditions.pm,
- lib/RT/Scrip_Overlay.pm, lib/RT/Tickets_Overlay.pm,
- lib/RT/CustomField_Overlay.pm, lib/RT/GroupMembers_Overlay.pm,
- lib/RT/I18N.pm, lib/RT/CachedGroupMember.pm, lib/RT/Links.pm,
- lib/RT/Queue.pm, lib/RT/ScripConditions_Overlay.pm,
- lib/RT/Scrips.pm, lib/RT/System.pm, lib/RT/CustomFieldValues.pm,
- lib/RT/SavedSearch.pm, lib/RT/Scrips_Overlay.pm, lib/RT/ACE.pm,
- lib/RT/Attributes.pm, lib/RT/CurrentUser.pm,
- lib/RT/CustomFieldValue_Overlay.pm,
- lib/RT/CustomFields_Overlay.pm, lib/RT/ObjectCustomFields.pm,
- lib/RT/Base.pm, lib/RT/ScripAction_Overlay.pm, lib/RT/User.pm,
- lib/RT/Principal.pm, lib/RT/Principals_Overlay.pm,
- lib/RT/ScripAction.pm, lib/RT/Attributes_Overlay.pm,
- lib/RT/CustomField.pm, lib/RT/Queues.pm, lib/RT/Attachments.pm,
- lib/RT/Attribute_Overlay.pm, lib/RT/CachedGroupMember_Overlay.pm,
- lib/RT/ObjectCustomFieldValues_Overlay.pm,
- lib/RT/ObjectCustomFieldValue_Overlay.pm,
- lib/RT/SavedSearches.pm, lib/RT/ScripCondition.pm,
- lib/RT/Templates.pm, lib/RT/Tickets.pm,
- lib/RT/Tickets_Overlay_SQL.pm, lib/RT/Users.pm,
- lib/RT/Attachments_Overlay.pm, lib/RT/CachedGroupMembers.pm,
- lib/RT/GroupMember_Overlay.pm, lib/RT/Link.pm,
- lib/RT/Transaction.pm, lib/RT/ScripActions_Overlay.pm,
- lib/RT/ACE_Overlay.pm, lib/RT/CachedGroupMembers_Overlay.pm,
- lib/RT/Scrip.pm, lib/RT/EmailParser.pm, lib/RT/Group.pm,
- lib/RT/ObjectCustomField_Overlay.pm, lib/RT/Template.pm,
- lib/RT/ACL_Overlay.pm, lib/RT/GroupMembers.pm,
- lib/RT/Principal_Overlay.pm, lib/RT/Transactions.pm,
- lib/RT/ACL.pm, lib/RT/Attachment_Overlay.pm, lib/RT/Date.pm,
- lib/RT/GroupMember.pm, lib/RT/Groups.pm,
- lib/RT/Templates_Overlay.pm, lib/RT/Group_Overlay.pm,
- lib/RT/Links_Overlay.pm, lib/RT/CustomFieldValue.pm,
- lib/RT/CustomFields.pm, lib/RT/ObjectCustomFields_Overlay.pm,
- lib/RT/Principals.pm, lib/RT/Queues_Overlay.pm, lib/RT/Ticket.pm,
- lib/RT/Link_Overlay.pm, lib/RT/Attachment.pm,
- lib/RT/Attribute.pm, lib/RT/Queue_Overlay.pm,
- lib/RT/ScripActions.pm, lib/RT/Template_Overlay.pm,
- lib/RT/URI/base.pm, lib/RT/URI/fsck_com_rt.pm, lib/RT/URI/t.pm,
- lib/RT/Interface/Email.pm, lib/RT/Interface/REST.pm,
- lib/RT/Interface/CLI.pm, lib/RT/Interface/Web.pm,
- lib/RT/Interface/Web/Handler.pm,
- lib/RT/Interface/Web/QueryBuilder.pm,
- lib/RT/Interface/Web/Standalone.pm, lib/RT/Action/Autoreply.pm,
- lib/RT/Action/Generic.pm, lib/RT/Action/RecordCorrespondence.pm,
- lib/RT/Interface/Email/Auth/GnuPG.pm,
- lib/RT/Interface/Email/Auth/MailFrom.pm,
- lib/RT/Interface/Email/Filter/SpamAssassin.pm,
- lib/RT/Interface/Web/QueryBuilder/Tree.pm,
- lib/RT/Action/Notify.pm, lib/RT/Action/RecordComment.pm,
- lib/RT/Action/AutoOpen.pm, lib/RT/Action/CreateTickets.pm,
- lib/RT/Action/EscalatePriority.pm,
- lib/RT/Action/NotifyAsComment.pm,
- lib/RT/Action/ResolveMembers.pm, lib/RT/Action/SetPriority.pm,
- lib/RT/Action/UserDefined.pm, lib/RT/Action/SendEmail.pm,
- lib/RT/Search/ActiveTicketsInQueue.pm, lib/RT/Search/FromSQL.pm,
- lib/RT/Search/Generic.pm, lib/RT/I18N/cs.po, lib/RT/I18N/es.po,
- lib/RT/I18N/fi.po, lib/RT/I18N/zh_cn.po, lib/RT/I18N/hu.po,
- lib/RT/I18N/he.po, lib/RT/I18N/de.po, lib/RT/I18N/ru.po,
- lib/RT/I18N/nl.po, lib/RT/I18N/pl.po, lib/RT/I18N/da.po,
- lib/RT/I18N/fr.po, lib/RT/I18N/cs.pm, lib/RT/I18N/it.po,
- lib/RT/I18N/id.po, lib/RT/I18N/ja.po, lib/RT/I18N/zh_tw.po,
- lib/RT/I18N/en.po, lib/RT/I18N/i_default.pm,
- lib/RT/I18N/pt_br.po, lib/RT/Condition/Generic.pm,
- lib/RT/I18N/no.po, lib/RT/Condition/AnyTransaction.pm,
- lib/RT/Condition/BeforeDue.pm, lib/RT/Condition/Overdue.pm,
- lib/RT/Condition/OwnerChange.pm,
- lib/RT/Condition/PriorityChange.pm,
- lib/RT/Condition/PriorityExceeds.pm,
- lib/RT/Condition/QueueChange.pm,
- lib/RT/Condition/StatusChange.pm,
- lib/RT/Condition/UserDefined.pm,
- lib/t/regression/08web_cf_access.t, lib/t/regression/12-search.t,
- lib/t/regression/04send_email.t,
- lib/t/regression/06-mime_decoding.t,
- lib/t/regression/14linking.t, lib/t/regression/21query-builder.t,
- lib/t/regression/22search_tix_by_txn.t,
- lib/t/regression/22search_tix_by_watcher.t,
- lib/t/regression/01ticket_link_searching.t,
- lib/t/regression/02basic_web.t,
- lib/t/regression/13-attribute-tests.t,
- lib/t/regression/03web_compiliation_errors.t,
- lib/t/regression/06mailgateway.t, lib/t/regression/07acl.t,
- lib/t/regression/07rights.t,
- lib/t/regression/23-web_attachments.t, html/autohandler,
- html/index.html, html/l, html/Elements/EditCustomFieldImage,
- html/Elements/EditCustomFieldSelect, html/Elements/EditLinks,
- html/Elements/ListActions, html/Elements/MessageBox,
- html/Elements/SelectBoolean,
- html/Elements/SelectCustomFieldValue, html/Elements/SelectStatus,
- html/Elements/ShowLinks, html/Elements/TitleBox,
- html/Elements/Error, html/Elements/Section,
- html/Elements/SelectDateRelation,
- html/Elements/SelectNewTicketQueue,
- html/Elements/SelectWatcherType, html/Elements/BevelBoxRaisedEnd,
- html/Elements/Callback, html/Elements/GotoTicket,
- html/Elements/Login, html/Elements/MyTickets,
- html/Elements/QueryString, html/Elements/Refresh,
- html/Elements/SelectLinkType, html/Elements/SelectMatch,
- html/Elements/SelectOwner, html/Elements/SelectQueue,
- html/Elements/SelectTicketTypes, html/Elements/SelectUsers,
- html/Elements/ShowCustomFieldBinary, html/Elements/ShowLink,
- html/Elements/ShowMemberships, html/Elements/Checkbox,
- html/Elements/EditCustomField, html/Elements/ScrubHTML,
- html/Elements/SelectCustomFieldOperator,
- html/Elements/SelectEqualityOperator,
- html/Elements/SelectResultsPerPage,
- html/Elements/SelectSortOrder, html/Elements/SelectTicketSortBy,
- html/Elements/ShowCustomFieldImage,
- html/Elements/ShowCustomFieldWikitext, html/Elements/TitleBoxEnd,
- html/Elements/BevelBoxRaisedStart, html/Elements/CreateTicket,
- html/Elements/MyRequests, html/Elements/SelectAttachmentField,
- html/Elements/SelectDateType, html/Elements/SelectGroups,
- html/Elements/SelectLang, html/Elements/SetupSessionCookie,
- html/Elements/ShowCustomFields, html/Elements/Submit,
- html/Elements/EditCustomFieldBinary,
- html/Elements/EditCustomFieldFreeform,
- html/Elements/EditCustomFieldText,
- html/Elements/EditCustomFieldWikitext, html/Elements/Quicksearch,
- html/Elements/CollectionAsTable/Header,
- html/Elements/CollectionAsTable/ParseFormat,
- html/Elements/RT__Ticket/ColumnMap, html/User/Delegation.html,
- html/Search/Edit.html, html/Search/Results.html,
- html/Search/Results.rdf, html/User/Elements/DelegateRights,
- html/User/Elements/GroupTabs, html/User/Elements/Tabs,
- html/User/Groups/Members.html, html/User/Groups/Modify.html,
- html/User/Groups/index.html, html/Search/Results.tsv,
- html/Search/Build.html, html/Search/Elements/BuildFormatString,
- html/Search/Elements/PickBasics, html/Search/Elements/PickCFs,
- html/Search/Elements/SelectAndOr,
- html/Search/Elements/SelectLinks,
- html/Search/Elements/SelectPersonType,
- html/Search/Elements/SelectSearchObject,
- html/Search/Elements/SelectSearchesForObjects,
- html/REST/1.0/logout, html/Search/Elements/DisplayOptions,
- html/Search/Elements/EditFormat, html/Search/Elements/EditQuery,
- html/Search/Elements/EditSearches,
- html/Search/Elements/NewListActions,
- html/Search/Elements/PickCriteria,
- html/Search/Elements/SearchPrivacy,
- html/Search/Elements/SelectGroup, html/REST/1.0/autohandler,
- html/REST/1.0/dhandler, html/REST/1.0/Forms/queue/default,
- html/REST/1.0/Forms/queue/ns, html/NoAuth/Logout.html,
- html/NoAuth/Reminder.html,
- html/REST/1.0/Forms/ticket/attachments,
- html/REST/1.0/Forms/ticket/default,
- html/REST/1.0/Forms/ticket/history,
- html/REST/1.0/Forms/ticket/links,
- html/REST/1.0/Forms/user/default, html/REST/1.0/Forms/user/ns,
- html/REST/1.0/NoAuth/mail-gateway, html/REST/1.0/search/dhandler,
- html/REST/1.0/search/ticket, html/REST/1.0/ticket/comment,
- html/REST/1.0/ticket/link, html/REST/1.0/ticket/merge,
- html/Admin/autohandler, html/Admin/index.html,
- html/Download/CustomFieldValue/dhandler,
- html/Download/Tabular/dhandler, html/NoAuth/images/autohandler,
- html/NoAuth/images/bplogo.gif, html/Tools/MyDay.html,
- html/Tools/Offline.html, html/Tools/Elements/Tabs,
- html/Admin/Queues/CustomField.html,
- html/Admin/Queues/CustomFields.html,
- html/Admin/Queues/GroupRights.html,
- html/Admin/Queues/Modify.html, html/Admin/Queues/People.html,
- html/Admin/Queues/Scrip.html, html/Admin/Queues/Scrips.html,
- html/Admin/Queues/Template.html,
- html/Admin/Elements/EditCustomFieldValues,
- html/Admin/Elements/EditUserComments,
- html/Admin/Elements/GroupTabs,
- html/Admin/Elements/ObjectCustomFields,
- html/Admin/Elements/SelectCustomFieldType,
- html/Admin/Elements/SelectScrip,
- html/Admin/Elements/SelectScripCondition,
- html/Admin/Elements/SelectStage,
- html/Admin/Queues/Templates.html,
- html/Admin/Queues/UserRights.html, html/Admin/Queues/index.html,
- html/Admin/Elements/CustomFieldTabs,
- html/Admin/Elements/EditCustomFields,
- html/Admin/Elements/EditScrip,
- html/Admin/Elements/GlobalCustomFieldTabs,
- html/Admin/Elements/ModifyTemplate,
- html/Admin/Elements/QueueTabs,
- html/Admin/Elements/SelectModifyGroup,
- html/Admin/Elements/SelectModifyQueue,
- html/Admin/Elements/SelectNewGroupMembers,
- html/Admin/Elements/SelectScripAction,
- html/Admin/Elements/SelectSingleOrMultiple,
- html/Admin/Elements/SelectTemplate,
- html/Admin/Elements/SystemTabs, html/Admin/Elements/Tabs,
- html/Admin/Elements/AddCustomFieldValue,
- html/Admin/Elements/CreateUserCalled,
- html/Admin/Elements/EditCustomField,
- html/Admin/Elements/EditQueueWatchers,
- html/Admin/Elements/EditScrips,
- html/Admin/Elements/ListGlobalCustomFields,
- html/Admin/Elements/ListGlobalScrips,
- html/Admin/Elements/PickCustomFields,
- html/Admin/Elements/SelectModifyUser,
- html/Admin/Elements/SelectUsers, html/Admin/Elements/UserTabs,
- html/Admin/Elements/EditTemplates, html/Admin/Elements/Header,
- html/Admin/Elements/PickObjects,
- html/Admin/Elements/QueueRightsForUser,
- html/Admin/Elements/SelectCustomFieldLookupType,
- html/Admin/Elements/SelectGroups,
- html/Admin/Elements/SelectRights, html/Admin/Elements/ToolTabs,
- html/Admin/Global/GroupRights.html, html/Admin/Global/Scrip.html,
- html/Admin/Global/Scrips.html, html/Admin/Global/Template.html,
- html/Admin/Global/Templates.html,
- html/Admin/Global/UserRights.html, html/Admin/Global/index.html,
- html/Admin/Global/CustomFields/Groups.html,
- html/Admin/Global/CustomFields/Queue-Tickets.html,
- html/Admin/Global/CustomFields/Queue-Transactions.html,
- html/Admin/Global/CustomFields/Users.html,
- html/Admin/Global/CustomFields/index.html,
- html/Admin/Users/CustomFields.html,
- html/Admin/CustomFields/GroupRights.html,
- html/Admin/CustomFields/Modify.html,
- html/Admin/CustomFields/Objects.html,
- html/Admin/CustomFields/index.html,
- html/Admin/Users/History.html, html/Admin/Users/Memberships.html,
- html/Admin/Users/index.html,
- html/Admin/CustomFields/UserRights.html,
- html/Admin/Groups/CustomFields.html,
- html/Admin/Groups/GroupRights.html,
- html/Admin/Groups/History.html, html/Admin/Groups/Members.html,
- html/Admin/Groups/Modify.html, html/Admin/Groups/UserRights.html,
- html/Admin/Groups/index.html,
- html/Admin/Tools/Configuration.html, html/Admin/Tools/index.html,
- html/Ticket/Modify.html, html/Ticket/ShowEmailRecord.html,
- html/Ticket/History.html, html/Ticket/ModifyAll.html,
- html/Ticket/ModifyDates.html, html/Ticket/ModifyLinks.html,
- html/Ticket/ModifyPeople.html, html/Ticket/Update.html,
- html/Ticket/Elements/AddWatchers, html/Ticket/Elements/BulkLinks,
- html/Ticket/Elements/EditWatchers,
- html/Ticket/Elements/FindAttachments,
- html/Ticket/Elements/ShowDates,
- html/Ticket/Elements/EditCustomFields,
- html/Ticket/Elements/PreviewScrips,
- html/Ticket/Elements/ShowDependencies,
- html/Ticket/Elements/ShowHistory,
- html/Ticket/Elements/ShowMembers,
- html/Ticket/Elements/ShowMessageHeaders,
- html/Ticket/Elements/ShowRequestor,
- html/Ticket/Elements/ShowUserEntry: import rt 3.4.6
+ * rt/html/: Elements/EmailInput, NoAuth/css/dhandler,
+ NoAuth/images/css/fieldbg-autocomplete.gif,
+ NoAuth/js/scriptaculous/controls.js,
+ NoAuth/js/scriptaculous/effects.js,
+ NoAuth/js/scriptaculous/prototype.js,
+ NoAuth/js/scriptaculous/scriptaculous.js,
+ Helpers/EmailAutocomplete, Ticket/Elements/ShowQueue: Initial
+ revision
2008-03-01 19:07 ivan
@@ -10392,7 +12019,9 @@
2008-01-03 18:35 ivan
- * httemplate/browse/elements/browse.html: new tax rate editor
+ * httemplate/: edit/cust_main_county.cgi,
+ edit/process/cust_main_county.cgi, browse/elements/browse.html:
+ new tax rate editor
2008-01-03 18:27 ivan
@@ -10556,6 +12185,10 @@
setting maxLength (and other attributes?). hopefully that's all
it is.
+2007-12-17 15:57 jeff
+
+ * httemplate/view/cust_main/quick-charge.html: cruft removal
+
2007-12-17 14:57 jeff
* FS/FS/cust_credit.pm: stricter otaker rules
@@ -10603,8 +12236,8 @@
2007-12-16 12:48 ivan
- * httemplate/search/cust_main.html: more consistent naming:
- cust_main_ADV.cgi becomes cust_main.html
+ * httemplate/search/: cust_main.html, cust_main_ADV.cgi: more
+ consistent naming: cust_main_ADV.cgi becomes cust_main.html
2007-12-15 14:47 rsiddall
@@ -10867,6 +12500,7 @@
2007-11-28 10:49 jeff
* FS/FS/ConfDefaults.pm, FS/FS/UI/Web.pm,
+ httemplate/search/cust_main_ADV.cgi,
httemplate/search/report_cust_main.html: advanced customer report
rearrangement
@@ -10939,7 +12573,7 @@
2007-11-20 09:18 ivan
- * AGPL: it finally happened
+ * AGPL, GPL: it finally happened
2007-11-18 12:02 ivan
@@ -10988,12 +12622,14 @@
2007-11-07 16:59 ivan
* FS/FS/Conf.pm, FS/FS/cust_bill.pm, FS/FS/cust_main.pm,
- conf/alerter_template, conf/company_address, conf/company_name,
+ FS/bin/freeside-expiration-alerter, conf/alerter_template,
+ conf/company_address, conf/company_name,
conf/impending_recur_template, conf/invoice_latexfooter,
- conf/invoice_latexnotes, conf/invoice_latexsmallfooter,
- conf/invoice_template, conf/invoice_template_statement,
- conf/welcome_letter: for new installs, centralize some stuff that
- was spread around different config files.
+ conf/invoice_latexnotes, conf/invoice_latexreturnaddress,
+ conf/invoice_latexsmallfooter, conf/invoice_template,
+ conf/invoice_template_statement, conf/welcome_letter: for new
+ installs, centralize some stuff that was spread around different
+ config files.
2007-11-05 17:59 ivan
@@ -11011,6 +12647,11 @@
fs_selfservice/FS-SelfService/SelfService.pm: add
process_payment_order_pkg method
+2007-11-04 10:22 jeff
+
+ * httemplate/search/cust_main_ADV.cgi: comma is a bad delimiter
+ choice according to ut_text()
+
2007-11-03 10:38 ivan
* httemplate/elements/menu.html: move menu option for adv. customer
@@ -11019,8 +12660,9 @@
2007-11-02 17:55 jeff
- * httemplate/: elements/menu.html, search/report_cust_main.html:
- new customer report/flattened package report (ticket 1428)
+ * httemplate/: elements/menu.html, search/cust_main_ADV.cgi,
+ search/report_cust_main.html: new customer report/flattened
+ package report (ticket 1428)
2007-10-29 05:04 ivan
@@ -11376,6 +13018,10 @@
* FS/bin/freeside-sqlradius-seconds: fixing wrong POD NAME doc
+2007-10-03 18:29 ivan
+
+ * FS/t/cust_tax_exempt.pm: wtf!
+
2007-10-03 18:21 ivan
* FS/FS.pm: update FS base page for new stuff in 1.9
@@ -11683,7 +13329,8 @@
2007-09-13 15:35 ivan
* FS/MANIFEST, FS/FS/Schema.pm, FS/FS/acct_rt_transaction.pm,
- FS/t/acct_rt_transaction.t, htetc/handler.pl,
+ FS/FS/svc_acct_rt_transaction.pm, FS/t/acct_rt_transaction.t,
+ FS/t/svc_acct_rt_transaction.t, htetc/handler.pl,
httemplate/misc/process/timeworked.html,
httemplate/search/timeworked.html: rename svc_acct_rt_transaction
to acct_rt_transaction, as it is not a service, its something
@@ -11809,8 +13456,10 @@
2007-08-16 06:40 jeff
- * FS/FS/AccessRight.pm, FS/FS/Conf.pm, FS/FS/Schema.pm,
- FS/FS/cust_main.pm, httemplate/misc/batch-cust_pay.html,
+ * FS/FS/svc_acct_rt_transaction.pm, FS/FS/AccessRight.pm,
+ FS/FS/Conf.pm, FS/FS/Schema.pm, FS/FS/cust_main.pm,
+ FS/t/svc_acct_rt_transaction.t,
+ httemplate/misc/batch-cust_pay.html,
httemplate/misc/timeworked.html, FS/MANIFEST,
httemplate/misc/process/timeworked.html,
httemplate/search/timeworked.html, FS/FS/ClientAPI/MyAccount.pm,
@@ -11858,9 +13507,9 @@
2007-08-10 16:50 ivan
- * FS/bin/: freeside-dbdef-create: rename dbdef-create to
- freeside-dbdef-create and move it to FS/bin, so it gets
- %%%FREESIDE_CONF%%% substituted
+ * bin/dbdef-create, FS/bin/freeside-dbdef-create: rename
+ dbdef-create to freeside-dbdef-create and move it to FS/bin, so
+ it gets %%%FREESIDE_CONF%%% substituted
2007-08-10 15:48 ivan
@@ -11960,7 +13609,10 @@
html/Elements/PageLayout, html/Elements/QuickCreate,
html/Elements/SimpleSearch, html/Elements/Tabs,
html/Elements/TicketList, html/Elements/TitleBoxStart,
- html/Elements/CollectionAsTable/Row, html/Search/Bulk.html,
+ html/Elements/CollectionAsTable/Row, html/NoAuth/printrt.css,
+ html/NoAuth/webrt.css, html/NoAuth/images/space.gif,
+ html/Search/Bulk.html, html/Ticket/Elements/ShowMemberOf,
+ html/Ticket/Elements/ShowReferences,
html/Ticket/Elements/ShowSummary, html/Ticket/Elements/Tabs,
html/Widgets/TitleBoxStart, lib/RT/SearchBuilder.pm,
sbin/rt-setup-database.in: merging RT_3_6_4 to HEAD
@@ -11991,183 +13643,43 @@
* httemplate/view/cust_main/packages.html: line up package acitons
all on one line
-2007-08-02 12:56 ivan
-
- * rt/: html/Ticket/Elements/EditCustomFields,
- html/Ticket/Elements/PreviewScrips,
- html/Ticket/Elements/ShowDependencies,
- html/Ticket/Elements/ShowMessageHeaders,
- html/Ticket/Elements/ShowRequestor,
- html/Ticket/Elements/ShowUserEntry,
- html/Ticket/Elements/EditBasics,
- html/Ticket/Elements/EditCustomField,
- html/Ticket/Elements/Reminders,
- html/Ticket/Elements/ShowGroupMembers,
- html/Ticket/Elements/ShowHistory,
- html/Ticket/Elements/ShowMembers,
- html/Ticket/Elements/ShowPeople,
- html/Ticket/Elements/ShowTransaction,
- html/Ticket/Elements/EditDates, html/Ticket/Elements/EditPeople,
- html/Ticket/Elements/ShowAttachments,
- html/Ticket/Elements/ShowBasics,
- html/Ticket/Elements/ShowCustomFields,
- html/Ticket/Elements/ShowMessageStanza,
- html/SelfService/Closed.html, html/SelfService/Create.html,
- html/SelfService/CreateTicketInQueue.html,
- html/SelfService/Display.html, html/SelfService/Error.html,
- html/SelfService/Prefs.html, html/SelfService/Update.html,
- html/Ticket/Attachment/dhandler,
- html/Ticket/Elements/LoadTextAttachments,
- html/SelfService/index.html,
- html/SelfService/Attachment/dhandler,
- html/SelfService/Elements/GotoTicket,
- html/SelfService/Elements/Header,
- html/SelfService/Elements/MyRequests,
- html/SelfService/Elements/Tabs, html/Approvals/Display.html,
- html/Approvals/index.html,
- html/Approvals/Elements/PendingMyApproval,
- html/Approvals/Elements/Tabs, html/Approvals/Elements/Approve,
- html/Approvals/Elements/ShowDependency,
- bin/mason_handler.fcgi.in, bin/mason_handler.svc.in, bin/rt.in,
- bin/standalone_httpd.in, bin/mason_handler.scgi.in,
- bin/rt-crontool.in, bin/rt-mailgate.in, bin/webmux.pl.in,
- etc/initialdata, etc/drop.Oracle, etc/schema.mysql,
- etc/upgrade/3.5.1/content: import rt 3.6.4
-
2007-08-02 12:54 ivan
- * rt/html/: Prefs/SearchOptions.html,
- NoAuth/css/3.5-default/main.css, NoAuth/css/3.5-default/misc.css,
- NoAuth/css/3.5-default/titlebox.css,
- NoAuth/css/3.5-default/transactions.css,
- NoAuth/images/css/cb.gif, NoAuth/images/css/cbr.gif,
- NoAuth/images/css/ct.gif, NoAuth/images/css/ctr.gif,
- Widgets/TitleBoxStart: Initial revision
-
-2007-08-02 12:53 ivan
-
- * rt/: lib/RT/I18N/de.po, lib/RT/I18N/ru.po, lib/RT/I18N/nl.po,
- lib/RT/I18N/pl.po, lib/RT/I18N/da.po, lib/RT/I18N/fr.po,
- lib/RT/I18N/cs.pm, lib/RT/I18N/it.po, lib/RT/I18N/id.po,
- lib/RT/I18N/ja.po, lib/RT/I18N/zh_tw.po,
- lib/RT/I18N/i_default.pm, lib/RT/I18N/pt_br.po,
- lib/RT/I18N/en.po, lib/RT/I18N/tr.po,
- lib/RT/Condition/AnyTransaction.pm,
- lib/RT/Condition/BeforeDue.pm, lib/RT/Condition/Generic.pm,
- lib/RT/Condition/Overdue.pm, lib/RT/Condition/PriorityChange.pm,
- lib/RT/Condition/PriorityExceeds.pm,
- lib/RT/Condition/StatusChange.pm,
- lib/RT/Condition/UserDefined.pm, lib/RT/I18N/no.po,
- lib/RT/Condition/OwnerChange.pm, lib/RT/Condition/QueueChange.pm,
- lib/RT/Report/Tickets.pm, lib/RT/Report/Tickets/Entry.pm,
+ * rt/: lib/RT/I18N/tr.po, lib/RT/Report/Tickets.pm,
+ lib/RT/Report/Tickets/Entry.pm,
lib/t/data/subject-with-folding-ws, lib/t/data/lorem-ipsum,
- lib/t/data/very-long-subject, lib/t/regression/08web_cf_access.t,
- lib/t/regression/12-search.t, lib/t/regression/04send_email.t,
+ lib/t/data/very-long-subject,
lib/t/regression/06-mime_decoding.t,
lib/t/regression/15cf_pattern.t,
- lib/t/regression/21query-builder.t,
- lib/t/regression/22search_tix_by_txn.t,
- lib/t/regression/22search_tix_by_watcher.t,
lib/t/regression/23-batch-upload-csv.t,
lib/t/regression/25scrip_order.t, lib/t/regression/27verp.t,
- lib/t/regression/14linking.t, lib/t/regression/17custom_search.t,
+ lib/t/regression/17custom_search.t,
lib/t/regression/19quicksearch.t, lib/t/regression/23cfsort.t,
lib/t/regression/00-mason-syntax.t,
- lib/t/regression/02basic_web.t,
- lib/t/regression/01ticket_link_searching.t,
- lib/t/regression/13-attribute-tests.t,
lib/t/regression/26command_line.t,
- lib/t/regression/03web_compiliation_errors.t,
- lib/t/regression/06mailgateway.t, lib/t/regression/07acl.t,
lib/t/regression/15cf_combo_cascade.t,
lib/t/regression/18custom_frontpage.t,
- lib/t/regression/24pawsort.t, lib/t/regression/07rights.t,
+ lib/t/regression/24pawsort.t,
lib/t/regression/20-sort-by-requestor.t,
lib/t/regression/23-web_attachments.t,
- docs/design_docs/ruleset-workflow.txt, html/autohandler,
- html/index.html, html/l, html/Elements/SelectBoolean,
- html/Elements/SelectCustomFieldValue, html/Elements/SelectStatus,
- html/Elements/TitleBox, html/Elements/EditCustomFieldImage,
- html/Elements/EditCustomFieldSelect, html/Elements/ShowLinks,
- html/Elements/EditLinks, html/Elements/ListActions,
- html/Elements/MessageBox, html/Elements/SelectDateRelation,
- html/Elements/SelectNewTicketQueue,
- html/Elements/SelectTimeUnits, html/Elements/SelectWatcherType,
- html/Elements/Error, html/Elements/GotoTicket,
- html/Elements/MyTickets, html/Elements/QueryString,
- html/Elements/RefreshHomepage, html/Elements/Section,
- html/Elements/SelectLinkType, html/Elements/SelectMatch,
- html/Elements/ShowCustomFieldBinary, html/Elements/ShowLink,
- html/Elements/ShowMemberships, html/Elements/Login,
- html/Elements/Refresh, html/Elements/SelectOwner,
- html/Elements/SelectQueue, html/Elements/SelectUsers,
- html/Elements/BevelBoxRaisedEnd, html/Elements/Callback,
- html/Elements/SelectTicketTypes, html/Elements/Checkbox,
- html/Elements/EditCustomField, html/Elements/MyAdminQueues,
- html/Elements/MyRT, html/Elements/MyReminders,
- html/Elements/MySupportQueues, html/Elements/QueueSummary,
- html/Elements/ScrubHTML, html/Elements/SelectCustomFieldOperator,
- html/Elements/SelectEqualityOperator,
- html/Elements/SelectResultsPerPage,
- html/Elements/SelectTicketSortBy,
- html/Elements/ShowCustomFieldImage,
- html/Elements/ShowCustomFieldWikitext, html/Elements/ShowSearch,
+ docs/design_docs/ruleset-workflow.txt,
+ html/Elements/SelectTimeUnits, html/Elements/RefreshHomepage,
+ html/Elements/MyAdminQueues, html/Elements/MyRT,
+ html/Elements/MyReminders, html/Elements/MySupportQueues,
+ html/Elements/QueueSummary, html/Elements/ShowSearch,
html/Elements/ValidateCustomFields, html/Elements/Logo,
- html/Elements/SelectSortOrder, html/Elements/SetupSessionCookie,
- html/Elements/Submit, html/Elements/TitleBoxEnd,
- html/Elements/BevelBoxRaisedStart, html/Elements/CreateTicket,
- html/Elements/MyRequests, html/Elements/SelectGroups,
- html/Elements/SelectLang, html/Elements/ShowCustomFields,
- html/Elements/EditCustomFieldBinary,
- html/Elements/EditCustomFieldFreeform, html/Elements/Quicksearch,
- html/Elements/SelectAttachmentField,
- html/Elements/SelectDateType,
- html/Elements/EditCustomFieldCombobox,
- html/Elements/EditCustomFieldText,
- html/Elements/EditCustomFieldWikitext,
- html/Elements/CollectionAsTable/Header,
- html/Elements/CollectionAsTable/ParseFormat,
- html/Elements/RT__Ticket/ColumnMap, html/Prefs/MyRT.html,
+ html/Elements/EditCustomFieldCombobox, html/Prefs/MyRT.html,
html/Prefs/Quicksearch.html, html/Prefs/Search.html,
- html/Prefs/Elements/Tabs, html/User/Delegation.html,
- html/User/Elements/DelegateRights, html/User/Elements/GroupTabs,
- html/User/Elements/Tabs, html/User/Groups/Modify.html,
- html/Search/Chart.html, html/Search/Edit.html,
- html/Search/Results.html, html/Search/Results.rdf,
- html/Search/Simple.html, html/User/Groups/Members.html,
- html/User/Groups/index.html, html/Search/Chart,
- html/Search/Results.tsv, html/Search/Build.html,
- html/Search/Elements/SelectAndOr,
- html/Search/Elements/SelectGroupBy,
- html/Search/Elements/SelectPersonType,
- html/Search/Elements/BuildFormatString,
- html/Search/Elements/Chart, html/Search/Elements/PickBasics,
- html/Search/Elements/PickCFs, html/Search/Elements/SearchPrivacy,
+ html/Prefs/SearchOptions.html, html/Prefs/Elements/Tabs,
+ html/Search/Chart.html, html/Search/Simple.html,
+ html/Search/Chart, html/Search/Elements/SelectGroupBy,
+ html/Search/Elements/Chart,
html/Search/Elements/SearchesForObject,
- html/Search/Elements/SelectGroup,
- html/Search/Elements/SelectLinks,
- html/Search/Elements/SelectSearchObject,
- html/Search/Elements/SelectSearchesForObjects,
- html/Search/Elements/DisplayOptions,
- html/Search/Elements/EditFormat, html/Search/Elements/EditQuery,
- html/Search/Elements/PickCriteria,
- html/Search/Elements/SelectChartType, html/REST/1.0/autohandler,
- html/REST/1.0/dhandler, html/REST/1.0/logout,
- html/REST/1.0/Forms/queue/default, html/REST/1.0/Forms/queue/ns,
+ html/Search/Elements/SelectChartType,
html/REST/1.0/Forms/ticket/merge,
- html/Search/Elements/EditSearches,
- html/Search/Elements/NewListActions,
html/REST/1.0/Forms/ticket/comment,
html/REST/1.0/Forms/ticket/take,
- html/REST/1.0/Forms/ticket/attachments,
- html/REST/1.0/Forms/ticket/default,
- html/REST/1.0/Forms/ticket/history,
- html/REST/1.0/Forms/ticket/links,
html/REST/1.0/Forms/transaction/default,
- html/REST/1.0/Forms/user/default, html/REST/1.0/Forms/user/ns,
- html/REST/1.0/NoAuth/mail-gateway, html/REST/1.0/search/dhandler,
- html/REST/1.0/search/ticket, html/REST/1.0/ticket/merge,
- html/NoAuth/Logout.html, html/NoAuth/Reminder.html,
html/NoAuth/css/autohandler, html/NoAuth/css/print.css,
html/NoAuth/css/3.4-compat/footer.css,
html/NoAuth/css/3.4-compat/header.css,
@@ -12175,7 +13687,6 @@
html/NoAuth/css/3.4-compat/nav.css,
html/NoAuth/css/3.4-compat/ticket.css,
html/NoAuth/css/3.4-compat/transactions.css,
- html/REST/1.0/ticket/comment, html/REST/1.0/ticket/link,
html/NoAuth/css/3.4-compat/body.css,
html/NoAuth/css/3.4-compat/forms.css,
html/NoAuth/css/3.4-compat/main.css,
@@ -12191,18 +13702,25 @@
html/NoAuth/css/3.5-default/forms.css,
html/NoAuth/css/3.5-default/header.css,
html/NoAuth/css/3.5-default/logo.css,
+ html/NoAuth/css/3.5-default/main.css,
+ html/NoAuth/css/3.5-default/misc.css,
html/NoAuth/css/3.5-default/quickbar.css,
- html/NoAuth/images/autohandler, html/NoAuth/images/bplogo.gif,
+ html/NoAuth/css/3.5-default/titlebox.css,
+ html/NoAuth/css/3.5-default/transactions.css,
html/NoAuth/images/css/cb-light.gif,
+ html/NoAuth/images/css/cb.gif,
html/NoAuth/images/css/cbr-b2g.gif,
html/NoAuth/images/css/cbr-b2lb.gif,
html/NoAuth/images/css/cbr-gray.gif,
html/NoAuth/images/css/cbr-trans.gif,
+ html/NoAuth/images/css/cbr.gif,
html/NoAuth/images/css/ct-light.gif,
+ html/NoAuth/images/css/ct.gif,
html/NoAuth/images/css/ctr-b2g.gif,
html/NoAuth/images/css/ctr-b2lb.gif,
html/NoAuth/images/css/ctr-gray.gif,
html/NoAuth/images/css/ctr-trans.gif,
+ html/NoAuth/images/css/ctr.gif,
html/NoAuth/images/css/dark-arrow-up.png,
html/NoAuth/images/css/dark-arrow.png,
html/NoAuth/images/css/light-arrow-up.png,
@@ -12216,168 +13734,22 @@
html/NoAuth/js/class.js, html/NoAuth/js/titlebox-state.js,
html/Widgets/ComboBox, html/Widgets/SavedSearch,
html/Widgets/SelectionBox, html/Widgets/TitleBox,
- html/Widgets/TitleBoxEnd, html/Helpers/CalPopup.html,
- html/Tools/MyDay.html, html/Tools/Offline.html,
- html/Tools/index.html, html/Tools/Elements/Tabs,
+ html/Widgets/TitleBoxEnd, html/Widgets/TitleBoxStart,
+ html/Helpers/CalPopup.html, html/Tools/index.html,
html/Tools/Reports/CreatedByDates.html,
html/Tools/Reports/ResolvedByDates.html,
html/Tools/Reports/ResolvedByOwner.html,
- html/Tools/Reports/index.html, html/Admin/autohandler,
- html/Admin/index.html, html/Admin/Queues/CustomField.html,
- html/Admin/Queues/CustomFields.html,
- html/Admin/Queues/GroupRights.html,
- html/Admin/Queues/People.html,
- html/Download/CustomFieldValue/dhandler,
- html/Download/Tabular/dhandler, html/Tools/Reports/Elements/Tabs,
- html/Admin/Queues/Modify.html, html/Admin/Queues/Scrip.html,
- html/Admin/Queues/Scrips.html, html/Admin/Queues/Template.html,
- html/Admin/Elements/ObjectCustomFields,
- html/Admin/Elements/SelectCustomFieldType,
- html/Admin/Elements/SelectScripCondition,
- html/Admin/Queues/Templates.html,
- html/Admin/Queues/UserRights.html, html/Admin/Queues/index.html,
- html/Admin/Elements/CustomFieldTabs,
- html/Admin/Elements/EditCustomFieldValues,
- html/Admin/Elements/EditUserComments,
- html/Admin/Elements/GroupTabs,
- html/Admin/Elements/SelectModifyQueue,
- html/Admin/Elements/SelectScrip,
- html/Admin/Elements/SelectScripAction,
- html/Admin/Elements/SelectStage,
- html/Admin/Elements/SelectTemplate, html/Admin/Elements/Tabs,
- html/Admin/Elements/ConfigureMyRT,
- html/Admin/Elements/EditCustomFields,
- html/Admin/Elements/QueueTabs, html/Admin/Elements/EditScrip,
- html/Admin/Elements/GlobalCustomFieldTabs,
- html/Admin/Elements/ModifyTemplate,
- html/Admin/Elements/SelectModifyGroup,
- html/Admin/Elements/SelectSingleOrMultiple,
- html/Admin/Elements/SystemTabs,
- html/Admin/Elements/AddCustomFieldValue,
- html/Admin/Elements/CreateUserCalled,
- html/Admin/Elements/EditQueueWatchers,
- html/Admin/Elements/EditScrips,
- html/Admin/Elements/PickCustomFields,
- html/Admin/Elements/SelectModifyUser,
- html/Admin/Elements/SelectNewGroupMembers,
- html/Admin/Elements/SelectUsers, html/Admin/Elements/UserTabs,
- html/Admin/Elements/EditCustomField,
- html/Admin/Elements/ListGlobalCustomFields,
- html/Admin/Elements/ListGlobalScrips,
- html/Admin/Elements/PickObjects,
- html/Admin/Elements/SelectCustomFieldLookupType,
- html/Admin/Elements/SelectGroups,
- html/Admin/Elements/EditTemplates, html/Admin/Elements/Header,
- html/Admin/Elements/QueueRightsForUser,
- html/Admin/Elements/SelectRights, html/Admin/Elements/ToolTabs,
- html/Admin/Global/MyRT.html, html/Admin/Global/GroupRights.html,
- html/Admin/Global/Scrip.html, html/Admin/Global/Scrips.html,
- html/Admin/Global/Template.html,
- html/Admin/Global/Templates.html,
- html/Admin/Global/UserRights.html, html/Admin/Global/index.html,
- html/Admin/Global/CustomFields/Queue-Tickets.html,
- html/Admin/Global/CustomFields/Queue-Transactions.html,
- html/Admin/Global/CustomFields/Users.html,
- html/Admin/Global/CustomFields/Groups.html,
- html/Admin/Global/CustomFields/index.html,
- html/Admin/Users/CustomFields.html, html/Admin/Users/MyRT.html,
- html/Admin/Users/History.html, html/Admin/Users/Memberships.html,
- html/Admin/CustomFields/GroupRights.html,
- html/Admin/CustomFields/Modify.html,
- html/Admin/CustomFields/Objects.html,
- html/Admin/CustomFields/UserRights.html,
- html/Admin/CustomFields/index.html, html/Admin/Users/index.html,
- html/Admin/Groups/CustomFields.html,
- html/Admin/Groups/GroupRights.html,
- html/Admin/Groups/History.html, html/Admin/Groups/Modify.html,
- html/Admin/Tools/Configuration.html, html/Admin/Tools/index.html,
- html/Admin/Groups/Members.html,
- html/Admin/Groups/UserRights.html, html/Admin/Groups/index.html,
- html/Ticket/History.html, html/Ticket/Modify.html,
- html/Ticket/ModifyLinks.html, html/Ticket/Reminders.html,
- html/Ticket/ShowEmailRecord.html, html/Ticket/ModifyDates.html,
- html/Ticket/ModifyPeople.html, html/Ticket/Update.html,
- html/Ticket/ModifyAll.html, html/Ticket/Elements/AddWatchers,
- html/Ticket/Elements/BulkLinks,
- html/Ticket/Elements/EditWatchers,
- html/Ticket/Elements/FindAttachments,
- html/Ticket/Elements/ShowDates, html/Ticket/Elements/ShowTime:
- import rt 3.6.4
+ html/Tools/Reports/index.html, html/Tools/Reports/Elements/Tabs,
+ html/Admin/Elements/ConfigureMyRT, html/Admin/Global/MyRT.html,
+ html/Admin/Users/MyRT.html, html/Ticket/Reminders.html,
+ html/Ticket/Elements/ShowTime, html/Ticket/Elements/Reminders,
+ etc/upgrade/3.5.1/content: Initial revision
-2007-08-02 12:49 ivan
+2007-08-02 12:51 ivan
- * rt/: configure, aclocal.m4, Changelog, Makefile.in, README,
- UPGRADING, configure.ac, sbin/extract_pod_tests,
- sbin/rt-test-dependencies.in, sbin/extract-message-catalog,
- sbin/regression_harness, sbin/rt-dump-database.in, sbin/factory,
- sbin/license_tag, lib/RT.pm.in,
- lib/RT/ObjectCustomFieldValues.pm,
- lib/RT/Transactions_Overlay.pm, lib/RT/URI.pm, lib/RT/Handle.pm,
- lib/RT/ObjectCustomField.pm, lib/RT/ScripCondition_Overlay.pm,
- lib/RT/CustomFieldValues_Overlay.pm,
- lib/RT/ObjectCustomFieldValue.pm, lib/RT/ScripConditions.pm,
- lib/RT/Scrip_Overlay.pm, lib/RT/Tickets_Overlay.pm,
- lib/RT/CustomField_Overlay.pm, lib/RT/GroupMembers_Overlay.pm,
- lib/RT/I18N.pm, lib/RT/Queue.pm,
- lib/RT/ScripConditions_Overlay.pm, lib/RT/Scrips.pm,
- lib/RT/System.pm, lib/RT/CachedGroupMember.pm, lib/RT/Links.pm,
- lib/RT/CustomFieldValues.pm, lib/RT/SavedSearch.pm,
- lib/RT/Scrips_Overlay.pm, lib/RT/CustomFields_Overlay.pm,
- lib/RT/ObjectCustomFields.pm, lib/RT/Reminders.pm, lib/RT/ACE.pm,
- lib/RT/CurrentUser.pm, lib/RT/CustomFieldValue_Overlay.pm,
- lib/RT/Attributes.pm, lib/RT/Base.pm,
- lib/RT/ScripAction_Overlay.pm, lib/RT/User.pm,
- lib/RT/Principals_Overlay.pm, lib/RT/ScripAction.pm,
- lib/RT/CustomField.pm, lib/RT/Principal.pm,
- lib/RT/Attributes_Overlay.pm, lib/RT/Queues.pm,
- lib/RT/Attachments.pm, lib/RT/Attribute_Overlay.pm,
- lib/RT/CachedGroupMember_Overlay.pm,
- lib/RT/ObjectCustomFieldValues_Overlay.pm,
- lib/RT/SavedSearches.pm, lib/RT/ScripCondition.pm,
- lib/RT/Templates.pm, lib/RT/Tickets.pm,
- lib/RT/ObjectCustomFieldValue_Overlay.pm,
- lib/RT/Tickets_Overlay_SQL.pm, lib/RT/Users.pm,
- lib/RT/Attachments_Overlay.pm, lib/RT/CachedGroupMembers.pm,
- lib/RT/Link.pm, lib/RT/Transaction.pm,
- lib/RT/GroupMember_Overlay.pm, lib/RT/ScripActions_Overlay.pm,
- lib/RT/ACE_Overlay.pm, lib/RT/CachedGroupMembers_Overlay.pm,
- lib/RT/Scrip.pm, lib/RT/EmailParser.pm,
- lib/RT/ObjectCustomField_Overlay.pm, lib/RT/Group.pm,
- lib/RT/Template.pm, lib/RT/GroupMembers.pm,
- lib/RT/Principal_Overlay.pm, lib/RT/Transactions.pm,
- lib/RT/ACL_Overlay.pm, lib/RT/Attachment_Overlay.pm,
- lib/RT/ACL.pm, lib/RT/Date.pm, lib/RT/GroupMember.pm,
- lib/RT/Groups.pm, lib/RT/Templates_Overlay.pm,
- lib/RT/Group_Overlay.pm, lib/RT/Links_Overlay.pm,
- lib/RT/CustomFieldValue.pm, lib/RT/CustomFields.pm,
- lib/RT/Link_Overlay.pm, lib/RT/ObjectCustomFields_Overlay.pm,
- lib/RT/Principals.pm, lib/RT/Queues_Overlay.pm, lib/RT/Ticket.pm,
- lib/RT/Attribute.pm, lib/RT/ScripActions.pm,
- lib/RT/Attachment.pm, lib/RT/Queue_Overlay.pm,
- lib/RT/Template_Overlay.pm, lib/RT/URI/base.pm,
- lib/RT/URI/fsck_com_rt.pm, lib/RT/URI/t.pm,
- lib/RT/Interface/Email.pm, lib/RT/Interface/REST.pm,
- lib/RT/Interface/CLI.pm, lib/RT/Interface/Web.pm,
- lib/RT/Interface/Web/Handler.pm, lib/RT/Interface/Web/Menu.pm,
- lib/RT/Interface/Web/QueryBuilder.pm,
- lib/RT/Interface/Web/Standalone.pm,
- lib/RT/Interface/Email/Auth/GnuPG.pm,
- lib/RT/Interface/Email/Filter/SpamAssassin.pm,
- lib/RT/Interface/Web/Menu/Item.pm,
- lib/RT/Interface/Web/QueryBuilder/Tree.pm,
- lib/RT/Action/Autoreply.pm, lib/RT/Action/Generic.pm,
- lib/RT/Interface/Email/Auth/MailFrom.pm, lib/RT/Action/Notify.pm,
- lib/RT/Action/RecordComment.pm,
- lib/RT/Action/RecordCorrespondence.pm,
- lib/RT/Action/CreateTickets.pm, lib/RT/Action/NotifyAsComment.pm,
- lib/RT/Action/ResolveMembers.pm, lib/RT/Action/UserDefined.pm,
- lib/RT/Action/AutoOpen.pm, lib/RT/Action/EscalatePriority.pm,
- lib/RT/Action/SendEmail.pm, lib/RT/Action/SetPriority.pm,
- lib/RT/Search/ActiveTicketsInQueue.pm, lib/RT/Search/FromSQL.pm,
- lib/RT/Search/Generic.pm, lib/RT/Search/Googleish.pm,
- lib/RT/I18N/cs.po, lib/RT/I18N/es.po, lib/RT/I18N/sv.po,
- lib/RT/I18N/fi.po, lib/RT/I18N/zh_cn.po, lib/RT/I18N/hu.po,
- lib/RT/I18N/he.po: import rt 3.6.4
+ * rt/lib/RT/: Reminders.pm, Interface/Web/Menu.pm,
+ Interface/Web/Menu/Item.pm, Search/Googleish.pm, I18N/sv.po:
+ Initial revision
2007-08-01 15:33 ivan
@@ -12385,13 +13757,13 @@
2007-08-01 15:24 ivan
- * CREDITS, FS/MANIFEST, FS/FS/AccessRight.pm, FS/FS/Conf.pm,
- FS/FS/Record.pm, FS/FS/Schema.pm, FS/FS/Setup.pm,
- FS/FS/access_group.pm, FS/FS/access_user.pm,
- FS/FS/access_user_pref.pm, FS/FS/agent.pm, FS/FS/cust_bill.pm,
- FS/FS/cust_credit.pm, FS/FS/cust_event.pm, FS/FS/cust_main.pm,
- FS/FS/cust_pay.pm, FS/FS/cust_pay_batch.pm, FS/FS/cust_pkg.pm,
- FS/FS/cust_refund.pm, FS/FS/m2name_Common.pm,
+ * ANNOUNCE.1.5, CREDITS, FS/MANIFEST, FS/README,
+ FS/FS/AccessRight.pm, FS/FS/Conf.pm, FS/FS/Record.pm,
+ FS/FS/Schema.pm, FS/FS/Setup.pm, FS/FS/access_group.pm,
+ FS/FS/access_user.pm, FS/FS/access_user_pref.pm, FS/FS/agent.pm,
+ FS/FS/cust_bill.pm, FS/FS/cust_credit.pm, FS/FS/cust_event.pm,
+ FS/FS/cust_main.pm, FS/FS/cust_pay.pm, FS/FS/cust_pay_batch.pm,
+ FS/FS/cust_pkg.pm, FS/FS/cust_refund.pm, FS/FS/m2name_Common.pm,
FS/FS/option_Common.pm, FS/FS/part_bill_event.pm,
FS/FS/part_event.pm, FS/FS/part_event_condition.pm,
FS/FS/part_event_condition_option.pm,
@@ -12814,6 +14186,7 @@
httemplate/view/cust_bill-logo.cgi,
httemplate/view/cust_bill.cgi, httemplate/view/cust_main.cgi,
httemplate/view/logo.cgi, httemplate/view/svc_Common.html,
+ httemplate/view/cust_main/order_pkg.html,
httemplate/view/cust_main/packages.html,
httemplate/view/cust_main/payment_history.html, test/cgi-test:
event refactor, landing on HEAD!
@@ -12823,10 +14196,10 @@
* rt/: Makefile, config.log, config.status, bin/mason_handler.fcgi,
bin/mason_handler.scgi, bin/mason_handler.svc,
bin/rt-commit-handler, bin/rt-crontool, bin/rt-mailgate,
- etc/RT_Config.pm, lib/RT.pm, lib/RTx/WebCronTool.pm,
- lib/t/02regression.t, lib/t/03web.pl, lib/t/04_send_email.pl:
- commit these RT differences, seem to be mostly in autogen'ed
- stuff
+ bin/webmux.pl, etc/RT_Config.pm, lib/RT.pm,
+ lib/RTx/WebCronTool.pm, lib/t/02regression.t, lib/t/03web.pl,
+ lib/t/04_send_email.pl: commit these RT differences, seem to be
+ mostly in autogen'ed stuff
2007-08-01 15:13 ivan
@@ -12962,7 +14335,7 @@
2007-07-06 01:08 ivan
- * README: v3!
+ * GPL, README: v3!
2007-07-05 15:05 ivan
@@ -12973,6 +14346,11 @@
* FS/FS/cust_pkg.pm: missing method name in docs
+2007-07-01 11:09 ivan
+
+ * TODO: remove obsolete information and dollar sign Id dollar sign
+ from TODO
+
2007-06-30 17:36 ivan
* httemplate/edit/agent.cgi: separate agent interface is
@@ -12993,8 +14371,8 @@
2007-06-28 18:27 ivan
- * bin/strip-eps: removing create-history-tables, freeside-upgrade
- does this anyway
+ * bin/: create-history-tables, strip-eps: removing
+ create-history-tables, freeside-upgrade does this anyway
2007-06-28 18:23 ivan
@@ -13508,8 +14886,9 @@
* FS/FS/Schema.pm, FS/FS/cust_main.pm,
httemplate/edit/cust_main.cgi,
- httemplate/edit/cust_main/billing.html: ticket 1443 add account
- type and bank state for echeck processing
+ httemplate/edit/cust_main/billing.html,
+ httemplate/edit/cust_main/select-state.html: ticket 1443 add
+ account type and bank state for echeck processing
2007-04-05 17:37 ivan
@@ -13791,8 +15170,9 @@
2007-02-28 11:14 jeff
- * httemplate/misc/svc_acct-domains.cgi: restore (none) choice to
- first package select
+ * httemplate/: edit/cust_main/select-domain.html,
+ misc/svc_acct-domains.cgi: restore (none) choice to first package
+ select
2007-02-27 16:16 jayce
@@ -13886,6 +15266,10 @@
* FS/FS/cust_main.pm: *** ERROR: unterminated L<...> at line 4716
in file FS/cust_main.pm
+2007-02-14 17:09 ivan
+
+ * httemplate/docs/billing.html: removing docs moved to wiki
+
2007-02-14 16:49 ivan
* httemplate/edit/part_bill_event.cgi: add send_email event
@@ -13896,8 +15280,9 @@
2007-02-14 15:32 jeff
- * httemplate/: edit/cust_main.cgi, misc/svc_acct-domains.cgi:
- selectable domain on first package in edit/cust_main
+ * httemplate/: edit/cust_main/select-domain.html,
+ edit/cust_main.cgi, misc/svc_acct-domains.cgi: selectable domain
+ on first package in edit/cust_main
2007-02-14 14:43 ivan
@@ -13956,8 +15341,9 @@
2007-02-12 09:56 jeff
- * FS/FS/ClientAPI/Signup.pm: alpha sort packages in new package
- order SELECT (ticket 1446)
+ * FS/FS/ClientAPI/Signup.pm,
+ httemplate/view/cust_main/order_pkg.html: alpha sort packages in
+ new package order SELECT (ticket 1446)
2007-02-11 19:11 ivan
@@ -14086,6 +15472,10 @@
* FS/FS/pay_batch.pm: remove refactored code
+2007-02-05 05:11 ivan
+
+ * httemplate/search/svc_Smart.html: remove unused svc_Smart
+
2007-02-05 05:10 ivan
* httemplate/search/: report_receivables.cgi,
@@ -14097,8 +15487,9 @@
* FS/FS/AccessRight.pm, httemplate/view/cust_bill-logo.cgi,
httemplate/view/cust_bill-pdf.cgi,
httemplate/view/cust_bill-ps.cgi, httemplate/view/cust_bill.cgi,
- httemplate/view/cust_main.cgi, httemplate/view/svc_Common.html,
- httemplate/view/svc_acct.cgi, httemplate/view/svc_broadband.cgi,
+ httemplate/view/cust_main.cgi, httemplate/view/cust_pkg.cgi,
+ httemplate/view/svc_Common.html, httemplate/view/svc_acct.cgi,
+ httemplate/view/svc_broadband.cgi,
httemplate/view/svc_domain.cgi, httemplate/view/svc_external.cgi,
httemplate/view/svc_forward.cgi, httemplate/view/svc_www.cgi,
httemplate/view/cust_main/contacts.html,
@@ -14492,8 +15883,8 @@
2007-01-21 05:26 ivan
- * Makefile, htetc/freeside-base1.conf, htetc/freeside-base2.conf:
- mod_perl v2, it finally happened
+ * Makefile, htetc/freeside-base.conf, htetc/freeside-base1.conf,
+ htetc/freeside-base2.conf: mod_perl v2, it finally happened
2007-01-21 01:13 ivan
@@ -14785,6 +16176,11 @@
* httemplate/docs/index.html: link more docs to wiki
+2006-12-29 00:29 ivan
+
+ * httemplate/browse/pay_batch.cgi: this is unused, replaced by
+ search/pay_batch.cgi
+
2006-12-29 00:25 ivan
* FS/FS/part_export/vpopmail.pm: didn't get checked in with
@@ -14803,6 +16199,14 @@
* FS/FS/part_export.pm: use FS::queue for exports, though they
should probably just use it themselves
+2006-12-29 00:21 ivan
+
+ * Changelog, Changes.1.5.7, Changes.1.5.8: removing old changelogs
+
+2006-12-29 00:20 ivan
+
+ * Changes.1.7.0: changelog now in the wiki
+
2006-12-28 23:23 ivan
* httemplate/edit/elements/edit.html: document field types
@@ -14833,6 +16237,7 @@
* FS/FS/Misc.pm, htetc/handler.pl,
httemplate/edit/cust_main/contact.html,
+ httemplate/edit/cust_main/select-county.html,
httemplate/misc/counties.cgi: Add a (magically appearing and
disappearing) label on the county selector. confusing when
labeled "state"
@@ -14844,7 +16249,8 @@
2006-12-26 17:07 ivan
- * httemplate/: edit/cust_main.cgi, misc/counties.cgi: fix county
+ * httemplate/: edit/cust_main.cgi,
+ edit/cust_main/select-county.html, misc/counties.cgi: fix county
selector
2006-12-26 11:53 ivan
@@ -14981,8 +16387,8 @@
FS/bin/freeside-deluser, FS/bin/freeside-queued,
FS/bin/freeside-selfservice-server, FS/bin/freeside-setup,
FS/bin/freeside-sqlradius-radacctd, FS/bin/freeside-upgrade,
- bin/mapsecrets2access_user, htetc/handler.pl: make the config
- directory configurable
+ bin/dbdef-create, bin/mapsecrets2access_user, htetc/handler.pl:
+ make the config directory configurable
2006-12-13 22:00 ivan
@@ -15009,8 +16415,9 @@
2006-12-08 05:36 ivan
- * httemplate/edit/process/quick-charge.cgi: some javascript
- validation magic to give one-time charges better UI
+ * httemplate/: view/cust_main/quick-charge.html,
+ edit/process/quick-charge.cgi: some javascript validation magic
+ to give one-time charges better UI
2006-12-07 08:46 ivan
@@ -15064,6 +16471,11 @@
* FS/bin/freeside-queued: remove unnecessary service use (in an
awfully odd place)
+2006-11-30 17:35 ivan
+
+ * FS/bin/freeside-expiration-alerter: go away and never come back,
+ $Id$
+
2006-11-30 17:34 ivan
* FS/bin/freeside-email: begone $Id$ and your diff noise!
@@ -15273,6 +16685,10 @@
* FS/MANIFEST: removing freeside-daily
+2006-10-29 16:26 ivan
+
+ * FS/bin/freeside-bill: removing pre-1.4 freeside-bill
+
2006-10-27 12:10 ivan
* FS/FS/: Conf.pm, cust_pkg.pm: add
@@ -15419,14 +16835,18 @@
2006-10-19 07:26 jeff
* httemplate/elements/tr-select-reason.html,
- httemplate/misc/cancel_pkg.html,
- httemplate/misc/process/cancel_pkg.html, FS/t/cust_pkg_reason.t:
- suspension and cancellation reasons
+ httemplate/misc/cancel_pkg.cgi, httemplate/misc/cancel_pkg.html,
+ httemplate/misc/expire_pkg.cgi,
+ httemplate/misc/process/cancel_pkg.html,
+ httemplate/misc/process/expire_pkg.cgi,
+ httemplate/misc/susp_pkg.cgi, FS/t/cust_pkg_reason.t: suspension
+ and cancellation reasons
2006-10-19 07:23 jeff
- * FS/FS/reason.pm, FS/FS/reason_type.pm, FS/t/reason.t,
- FS/t/reason_type.t, httemplate/browse/reason.html,
+ * FS/FS/cancel_reason.pm, FS/FS/reason.pm, FS/FS/reason_type.pm,
+ FS/t/cancel_reason.t, FS/t/reason.t, FS/t/reason_type.t,
+ httemplate/browse/reason.html,
httemplate/browse/reason_type.html,
httemplate/edit/process/reason.html,
httemplate/edit/process/reason_type.html,
@@ -15449,6 +16869,11 @@
httemplate/view/cust_main/packages.html: suspension and
cancellation reasons
+2006-10-18 02:30 ivan
+
+ * httemplate/docs/: config.html, export.html: removing obsolete
+ config.html, moving info from export.html into wiki
+
2006-10-17 17:05 jeff
* httemplate/elements/tr-input-date-field.html: fix ugly null dates
@@ -15456,40 +16881,13 @@
2006-10-17 02:03 ivan
* rt/: html/Elements/Header, html/Elements/CollectionAsTable/Row,
- sbin/rt-setup-database.in: commiting rt 3.4.5 to HEAD
+ html/NoAuth/webrt.css, sbin/rt-setup-database.in: commiting rt
+ 3.4.5 to HEAD
2006-10-17 01:49 ivan
- * rt/: configure, configure.ac, README, Changelog,
- sbin/rt-test-dependencies.in,
- html/Ticket/Elements/EditCustomFields, html/Search/Build.html,
- html/Search/Results.rdf, html/Search/Results.tsv,
- html/Search/Elements/BuildFormatString,
- html/Approvals/Elements/PendingMyApproval,
- html/Elements/EditCustomField, html/Elements/QueryString,
- html/Elements/ScrubHTML, html/Elements/EditCustomFieldSelect,
- html/Elements/Callback, html/Elements/ShowCustomFields,
- html/Elements/RT__Ticket/ColumnMap, html/User/Elements/Tabs,
- lib/t/regression/22search_tix_by_txn.t,
- lib/t/regression/09record_cf_api.t, lib/t/regression/07acl.t,
- lib/t/regression/14linking.t,
- lib/t/regression/22search_tix_by_watcher.t,
- lib/t/regression/06mailgateway.t, lib/t/regression/07rights.t,
- lib/RT/CustomField_Overlay.pm, lib/RT/Tickets_Overlay_SQL.pm,
- lib/RT/EmailParser.pm, lib/RT/I18N.pm, lib/RT/Tickets_Overlay.pm,
- lib/RT/CustomFieldValues.pm, lib/RT/Transactions_Overlay.pm,
- lib/RT/Principal_Overlay.pm, lib/RT/Queue_Overlay.pm,
- lib/RT/Attachments_Overlay.pm,
- lib/RT/ObjectCustomFieldValues_Overlay.pm, lib/RT/ACE_Overlay.pm,
- lib/RT/Link_Overlay.pm, lib/RT/I18N/en.po, lib/RT/I18N/cs.po,
- lib/RT/I18N/pt_br.po, lib/RT/I18N/fr.po, lib/RT/I18N/es.po,
- lib/RT/I18N/nl.po, lib/RT/I18N/pl.po, lib/RT/I18N/no.po,
- lib/RT/I18N/it.po, lib/RT/I18N/hu.po, lib/RT/I18N/da.po,
- lib/RT/I18N/ru.po, lib/RT/I18N/de.po, lib/RT/I18N/ja.po,
- lib/RT/I18N/zh_tw.po, lib/RT/I18N/id.po, lib/RT/I18N/he.po,
- lib/RT/I18N/fi.po, lib/RT/I18N/zh_cn.po,
- lib/RT/Action/SendEmail.pm, lib/RT/Interface/Email.pm: import rt
- 3.4.5
+ * rt/: html/NoAuth/printrt.css, lib/t/regression/14linking.t,
+ lib/t/regression/22search_tix_by_watcher.t: Initial revision
2006-10-16 22:49 ivan
@@ -15544,8 +16942,8 @@
2006-10-14 02:55 ivan
- * httemplate/docs/index.html: move signup/self-service install to
- wiki
+ * httemplate/docs/: index.html, selfservice.html: move
+ signup/self-service install to wiki
2006-10-12 02:42 ivan
@@ -15646,7 +17044,8 @@
2006-09-26 11:55 ivan
- * httemplate/search/svc_acct.cgi: fix username@domain search
+ * httemplate/search/: svc_Smart.html, svc_acct.cgi: fix
+ username@domain search
2006-09-23 11:33 ivan
@@ -15805,6 +17204,16 @@
* FS/FS/AccessRight.pm, httemplate/elements/menu.html: add RADIUS
session search back to main menu
+2006-09-02 20:14 ivan
+
+ * bin/dbdef-create: REALLY don't error out trying to create a dbdef
+ file from scratch
+
+2006-09-02 20:12 ivan
+
+ * bin/dbdef-create: don't error out trying to create a dbdef file
+ from scratch
+
2006-09-02 13:38 ivan
* httemplate/search/: cust_bill_event.cgi, cust_bill_event.html:
@@ -15834,6 +17243,10 @@
* bin/: svc_acct.import, svc_domain.erase: BEGONE $Id$
+2006-08-31 13:44 ivan
+
+ * bin/svc_acct.export: removing obsolete file
+
2006-08-31 12:59 ivan
* bin/fs-migrate-svc_acct_sm: BEGONE $Id$
@@ -15908,7 +17321,8 @@
FS/FS/cust_main.pm, FS/FS/cust_pay_batch.pm,
FS/FS/part_bill_event.pm, FS/FS/payby.pm,
FS/FS/ClientAPI/MyAccount.pm, FS/FS/ClientAPI/Signup.pm,
- FS/t/cust_bill_pay_batch.t, httemplate/edit/cust_bill_pay.cgi,
+ FS/t/cust_bill_pay_batch.t, httemplate/browse/cust_pay_batch.cgi,
+ httemplate/edit/cust_bill_pay.cgi,
httemplate/edit/cust_credit.cgi,
httemplate/edit/cust_credit_bill.cgi,
httemplate/edit/part_bill_event.cgi,
@@ -15952,9 +17366,13 @@
2006-08-25 12:30 ivan
- * FS/FS/: Misc.pm, Record.pm: use GROUP BY instead of DISTINCT ON
- in the state and country queries for better cross-database
- compatibility, based on a preliminary patch from Jason Thomas
+ * FS/FS/Misc.pm, FS/FS/Record.pm,
+ httemplate/edit/cust_main/select-country.html,
+ httemplate/edit/cust_main/select-county.html,
+ httemplate/edit/cust_main/select-state.html: use GROUP BY instead
+ of DISTINCT ON in the state and country queries for better
+ cross-database compatibility, based on a preliminary patch from
+ Jason Thomas
2006-08-23 18:37 ivan
@@ -15969,6 +17387,7 @@
httemplate/browse/addr_block.cgi, httemplate/browse/agent.cgi,
httemplate/browse/agent_type.cgi,
httemplate/browse/cust_main_county.cgi,
+ httemplate/browse/cust_pay_batch.cgi,
httemplate/browse/inventory_class.html,
httemplate/browse/msgcat.cgi, httemplate/browse/nas.cgi,
httemplate/browse/part_bill_event.cgi,
@@ -15983,7 +17402,7 @@
httemplate/browse/elements/browse.html,
httemplate/config/config-process.cgi,
httemplate/config/config-view.cgi, httemplate/config/config.cgi,
- httemplate/edit/REAL_cust_pkg.cgi,
+ httemplate/docs/trouble.html, httemplate/edit/REAL_cust_pkg.cgi,
httemplate/edit/access_group.html,
httemplate/edit/access_user.html, httemplate/edit/agent.cgi,
httemplate/edit/agent_payment_gateway.html,
@@ -15994,6 +17413,7 @@
httemplate/edit/cust_credit_bill.cgi,
httemplate/edit/cust_main.cgi,
httemplate/edit/cust_main_county-expand.cgi,
+ httemplate/edit/cust_main_county.cgi,
httemplate/edit/cust_pay.cgi, httemplate/edit/cust_pkg.cgi,
httemplate/edit/cust_refund.cgi,
httemplate/edit/inventory_class.html, httemplate/edit/msgcat.cgi,
@@ -16013,6 +17433,9 @@
httemplate/edit/svc_www.cgi,
httemplate/edit/cust_main/billing.html,
httemplate/edit/cust_main/contact.html,
+ httemplate/edit/cust_main/select-country.html,
+ httemplate/edit/cust_main/select-county.html,
+ httemplate/edit/cust_main/select-state.html,
httemplate/edit/elements/edit.html,
httemplate/edit/elements/svc_Common.html,
httemplate/edit/process/REAL_cust_pkg.cgi,
@@ -16028,6 +17451,7 @@
httemplate/edit/process/cust_main.cgi,
httemplate/edit/process/cust_main_county-collapse.cgi,
httemplate/edit/process/cust_main_county-expand.cgi,
+ httemplate/edit/process/cust_main_county.cgi,
httemplate/edit/process/cust_pay.cgi,
httemplate/edit/process/cust_pkg.cgi,
httemplate/edit/process/cust_refund.cgi,
@@ -16102,8 +17526,9 @@
httemplate/graph/elements/monthly.html,
httemplate/misc/batch-cust_pay.html, httemplate/misc/bill.cgi,
httemplate/misc/cancel-unaudited.cgi,
- httemplate/misc/catchall.cgi, httemplate/misc/cdr-import.html,
- httemplate/misc/change_pkg.cgi, httemplate/misc/counties.cgi,
+ httemplate/misc/cancel_pkg.cgi, httemplate/misc/catchall.cgi,
+ httemplate/misc/cdr-import.html, httemplate/misc/change_pkg.cgi,
+ httemplate/misc/counties.cgi,
httemplate/misc/cust_main-cancel.cgi,
httemplate/misc/cust_main-import.cgi,
httemplate/misc/cust_main-import_charges.cgi,
@@ -16116,7 +17541,7 @@
httemplate/misc/email-invoice.cgi,
httemplate/misc/email_invoice_events.cgi,
httemplate/misc/email_invoices.cgi,
- httemplate/misc/fax-invoice.cgi,
+ httemplate/misc/expire_pkg.cgi, httemplate/misc/fax-invoice.cgi,
httemplate/misc/fax_invoice_events.cgi,
httemplate/misc/fax_invoices.cgi,
httemplate/misc/inventory_item-import.html,
@@ -16124,7 +17549,7 @@
httemplate/misc/payment.cgi, httemplate/misc/print-invoice.cgi,
httemplate/misc/print_invoice_events.cgi,
httemplate/misc/print_invoices.cgi, httemplate/misc/queue.cgi,
- httemplate/misc/states.cgi,
+ httemplate/misc/states.cgi, httemplate/misc/susp_pkg.cgi,
httemplate/misc/unapply-cust_credit.cgi,
httemplate/misc/unapply-cust_pay.cgi,
httemplate/misc/unprovision.cgi, httemplate/misc/unsusp_pkg.cgi,
@@ -16139,6 +17564,7 @@
httemplate/misc/process/cust_main-import.cgi,
httemplate/misc/process/cust_main-import_charges.cgi,
httemplate/misc/process/delete-customer.cgi,
+ httemplate/misc/process/expire_pkg.cgi,
httemplate/misc/process/inventory_item-import.html,
httemplate/misc/process/link.cgi,
httemplate/misc/process/meta-import.cgi,
@@ -16169,7 +17595,8 @@
httemplate/search/report_tax.cgi,
httemplate/search/report_tax.html, httemplate/search/sql.html,
httemplate/search/sqlradius.cgi,
- httemplate/search/sqlradius.html, httemplate/search/svc_acct.cgi,
+ httemplate/search/sqlradius.html,
+ httemplate/search/svc_Smart.html, httemplate/search/svc_acct.cgi,
httemplate/search/svc_broadband.cgi,
httemplate/search/svc_domain.cgi,
httemplate/search/svc_external.cgi,
@@ -16179,16 +17606,18 @@
httemplate/view/cust_bill-logo.cgi,
httemplate/view/cust_bill-pdf.cgi,
httemplate/view/cust_bill-ps.cgi, httemplate/view/cust_bill.cgi,
- httemplate/view/cust_main.cgi, httemplate/view/svc_acct.cgi,
- httemplate/view/svc_broadband.cgi,
+ httemplate/view/cust_main.cgi, httemplate/view/cust_pkg.cgi,
+ httemplate/view/svc_acct.cgi, httemplate/view/svc_broadband.cgi,
httemplate/view/svc_domain.cgi, httemplate/view/svc_external.cgi,
httemplate/view/svc_forward.cgi, httemplate/view/svc_phone.cgi,
httemplate/view/svc_www.cgi,
httemplate/view/cust_main/billing.html,
httemplate/view/cust_main/contacts.html,
httemplate/view/cust_main/misc.html,
+ httemplate/view/cust_main/order_pkg.html,
httemplate/view/cust_main/packages.html,
httemplate/view/cust_main/payment_history.html,
+ httemplate/view/cust_main/quick-charge.html,
httemplate/view/cust_main/tickets.html,
httemplate/view/elements/svc_Common.html: Will things ever be the
same again? It's the final masonize
@@ -16208,7 +17637,18 @@
2006-08-22 05:23 ivan
- * httemplate/docs/index.html: get rid of old upgrade instructions
+ * httemplate/docs/: index.html, upgrade-1.4.2.html, upgrade10.html,
+ upgrade9.html: get rid of old upgrade instructions
+
+2006-08-22 05:20 ivan
+
+ * README.1.7.0: wiki!
+
+2006-08-22 05:09 ivan
+
+ * README.1.5.0pre6, README.1.5.7, README.1.5.7.lastbit,
+ README.1.5.8: removing old upgrade instructions... can always
+ get the out of the Attic
2006-08-21 16:01 ivan
@@ -16233,8 +17673,8 @@
2006-08-21 02:46 ivan
- * httemplate/docs/index.html: we're off to see the wiki, the
- wonderful wiki of oz
+ * httemplate/docs/: install-rt.html, install.html, index.html:
+ we're off to see the wiki, the wonderful wiki of oz
2006-08-18 05:18 ivan
@@ -16317,6 +17757,10 @@
* FS/FS/cust_main.pm: pass email, phone and ip adderss to B:OP when
doing refunds, hopefully this will fix OpenECHO refunds
+2006-08-14 05:24 ivan
+
+ * Changes.1.7.0: there's more, but this will have to do
+
2006-08-14 05:13 ivan
* FS/FS/cust_main.pm, httemplate/edit/cust_main.cgi,
@@ -16326,10 +17770,10 @@
rt/html/Elements/FreesideNewCust,
rt/html/Elements/FreesideSearch,
rt/html/Elements/FreesideSvcSearch, rt/html/Elements/PageLayout,
- rt/html/Elements/SimpleSearch, rt/html/Elements/Tabs: sprinkle
- some magic ajax fairy dust on referring customer SELEKTAH.
- rewind! make smart search smarter, re-layout the top search bars
- and add an invoice one
+ rt/html/Elements/SimpleSearch, rt/html/Elements/Tabs,
+ rt/html/NoAuth/webrt.css: sprinkle some magic ajax fairy dust on
+ referring customer SELEKTAH. rewind! make smart search smarter,
+ re-layout the top search bars and add an invoice one
2006-08-14 01:38 ivan
@@ -16400,8 +17844,8 @@
2006-08-10 06:50 ivan
- * FS/FS/Schema.pm, FS/FS/cust_main.pm, FS/FS/part_referral.pm,
- httemplate/browse/part_referral.html,
+ * README.1.7.0, FS/FS/Schema.pm, FS/FS/cust_main.pm,
+ FS/FS/part_referral.pm, httemplate/browse/part_referral.html,
httemplate/view/cust_main/misc.html: add cust_main.agent_custid
(at least to schema and customer view, no manual editing yet)
@@ -16413,8 +17857,11 @@
* FS/FS/AccessRight.pm, FS/FS/Record.pm, FS/FS/Schema.pm,
FS/FS/access_user.pm, FS/FS/part_referral.pm,
+ httemplate/browse/part_referral.cgi,
httemplate/browse/part_referral.html,
+ httemplate/edit/part_referral.cgi,
httemplate/edit/part_referral.html,
+ httemplate/edit/process/part_referral.cgi,
httemplate/edit/process/part_referral.html,
httemplate/elements/menu.html: agent-virtualize advertising
sources
@@ -16461,11 +17908,12 @@
2006-08-08 23:43 jeff
- * FS/FS/Schema.pm, FS/FS/Setup.pm, FS/FS/cust_bill.pm,
- FS/FS/cust_main.pm, FS/FS/cust_pay_batch.pm,
+ * README.1.7.0, FS/FS/Schema.pm, FS/FS/Setup.pm,
+ FS/FS/cust_bill.pm, FS/FS/cust_main.pm, FS/FS/cust_pay_batch.pm,
FS/FS/part_bill_event.pm, FS/FS/pay_batch.pm, FS/FS/payby.pm,
- httemplate/docs/schema.html, httemplate/misc/download-batch.cgi:
- batch refactor
+ httemplate/browse/cust_pay_batch.cgi,
+ httemplate/browse/pay_batch.cgi, httemplate/docs/schema.html,
+ httemplate/misc/download-batch.cgi: batch refactor
2006-08-08 23:34 ivan
@@ -16606,10 +18054,11 @@
2006-07-15 17:55 ivan
- * FS/FS/Conf.pm, FS/FS/agent.pm, FS/FS/cust_bill.pm,
+ * SCHEMA_CHANGE, FS/FS/Conf.pm, FS/FS/agent.pm, FS/FS/cust_bill.pm,
FS/FS/inventory_item.pm,
fs_selfservice/FS-SelfService/freeside-selfservice-clientd,
- httemplate/autohandler, httemplate/edit/cust_credit.cgi,
+ httemplate/autohandler, httemplate/browse/cust_pay_batch.cgi,
+ httemplate/edit/cust_credit.cgi,
httemplate/elements/overlibmws.js,
httemplate/elements/overlibmws_draggable.js,
httemplate/elements/phonenumber.html,
@@ -16693,6 +18142,10 @@
* FS/FS/cust_main.pm: patch to fix fuzzy searching from Ryan Gunn
+2006-07-05 04:23 ivan
+
+ * README.1.7.0: hint about permissions and users
+
2006-07-04 05:01 ivan
* FS/: bin/freeside-addgroup, bin/freeside-adduser, MANIFEST:
@@ -16801,7 +18254,8 @@
2006-06-19 04:57 ivan
- * bin/mapsecrets2access_user: ACL bootstrapping/upgrade
+ * Changes.1.7.0, README.1.7.0, bin/mapsecrets2access_user: ACL
+ bootstrapping/upgrade
2006-06-19 04:25 ivan
@@ -16821,6 +18275,7 @@
httemplate/elements/tr-select-cust-fields.html,
httemplate/elements/tr-select-cust_pkg-status.html,
httemplate/graph/cust_bill_pkg.cgi,
+ httemplate/search/cust_pkg_report.cgi,
httemplate/search/report_cust_pkg.html,
httemplate/view/cust_main/contacts.html: add ability to select
specific package defs. and package status to package report for
@@ -16890,6 +18345,31 @@
* httemplate/elements/menu.html: fix link to prepaid card setup
+2006-06-06 04:16 ivan
+
+ * rt/html/NoAuth/webrt.css: whew, this can go back
+
+2006-06-06 04:08 ivan
+
+ * rt/html/NoAuth/webrt.css: yay this should finally fix the weird
+ black navigation links; hide the Mason stuff from browsers when
+ it doesn't get processed for some reason
+
+2006-06-06 03:57 ivan
+
+ * rt/html/NoAuth/webrt.css: yet another attempt to fix weird black
+ RT navigation links
+
+2006-06-06 03:54 ivan
+
+ * rt/html/NoAuth/webrt.css: another attempt to fix weird black RT
+ navigation links
+
+2006-06-06 03:46 ivan
+
+ * rt/html/NoAuth/webrt.css: attempt to fix weird black RT
+ navigation links
+
2006-06-06 03:30 ivan
* FS/FS/cdr.pm: fix unmatched =back somehow futzing things up with
@@ -16897,7 +18377,8 @@
2006-06-02 06:20 ivan
- * httemplate/elements/header.html, rt/FREESIDE_MODIFIED,
+ * httemplate/elements/header.html,
+ httemplate/search/svc_Smart.html, rt/FREESIDE_MODIFIED,
rt/html/Elements/FreesideSvcSearch, rt/html/Elements/PageLayout,
rt/html/Elements/Tabs: add a service search
@@ -16905,6 +18386,11 @@
* FS/MANIFEST: removing duplicate entries
+2006-05-23 08:54 ivan
+
+ * README.1.7.0: adding batch upgrade instructions to 1.7.0
+ instructions too
+
2006-05-22 13:38 ivan
* rt/html/Elements/FreesideNewCust: missing > tag on INPUT
@@ -16913,10 +18399,18 @@
* FS/FS/cust_main.pm: better error message for banned cards
+2006-05-22 11:05 ivan
+
+ * Changes.1.5.8: justification
+
2006-05-21 19:06 ivan
* Makefile: docs are going in the wiki Real Soon Now anyway
+2006-05-21 19:04 ivan
+
+ * Changes.1.5.8: 1.5.8!
+
2006-05-21 17:50 ivan
* Makefile: 1.7.0? why not?
@@ -16931,9 +18425,11 @@
2006-05-20 13:06 jeff
- * FS/FS.pm, FS/MANIFEST, FS/FS/Schema.pm, FS/FS/cust_bill.pm,
- FS/FS/cust_pay_batch.pm, FS/FS/pay_batch.pm, FS/t/pay_batch.t,
- htetc/handler.pl, httemplate/docs/schema.html,
+ * README.1.5.7.lastbit, README.1.5.8, FS/FS.pm, FS/MANIFEST,
+ FS/FS/Schema.pm, FS/FS/cust_bill.pm, FS/FS/cust_pay_batch.pm,
+ FS/FS/pay_batch.pm, FS/t/pay_batch.t, htetc/handler.pl,
+ httemplate/browse/cust_pay_batch.cgi,
+ httemplate/docs/schema.html, httemplate/docs/upgrade10.html,
httemplate/misc/download-batch.cgi: first stab at BoM download
2006-05-15 06:57 ivan
@@ -16944,7 +18440,7 @@
2006-05-15 04:05 ivan
- * httemplate/elements/freeside.css,
+ * rt/html/NoAuth/webrt.css, httemplate/elements/freeside.css,
httemplate/elements/header.html, httemplate/elements/xmenu.css,
httemplate/search/cust_main.cgi, rt/FREESIDE_MODIFIED,
rt/html/Elements/FreesideNewCust,
@@ -16956,7 +18452,7 @@
2006-05-14 09:47 ivan
- * CREDITS, htetc/handler.pl, httemplate/autohandler,
+ * CREDITS, Changes.1.7.0, htetc/handler.pl, httemplate/autohandler,
httemplate/index.html, httemplate/browse/access_group.html,
httemplate/browse/access_user.html,
httemplate/browse/agent_type.cgi,
@@ -16968,6 +18464,7 @@
httemplate/edit/cust_credit.cgi,
httemplate/edit/cust_credit_bill.cgi,
httemplate/edit/cust_main.cgi, httemplate/edit/cust_pkg.cgi,
+ httemplate/edit/part_referral.cgi,
httemplate/edit/part_virtual_field.cgi,
httemplate/edit/svc_domain.cgi,
httemplate/edit/elements/edit.html,
@@ -16986,15 +18483,21 @@
httemplate/elements/tr-select-access_group.html,
httemplate/elements/xmenu.css, httemplate/elements/xmenu.js,
httemplate/misc/batch-cust_pay.html, httemplate/misc/payment.cgi,
+ httemplate/search/cust_bill.cgi,
httemplate/search/cust_main-otaker.cgi,
- httemplate/search/cust_main.cgi,
+ httemplate/search/cust_main-payinfo.html,
+ httemplate/search/cust_main-quickpay.html,
+ httemplate/search/cust_main.cgi, httemplate/search/cust_pay.html,
+ httemplate/search/cust_pkg_report.cgi,
httemplate/search/report_cust_bill.html,
httemplate/search/report_cust_credit.html,
httemplate/search/report_cust_pay.html,
httemplate/search/report_prepaid_income.html,
httemplate/search/report_tax.html,
httemplate/search/sqlradius.html,
+ httemplate/search/svc_acct.html,
httemplate/search/svc_domain.cgi,
+ httemplate/search/svc_domain.html,
httemplate/search/svc_external.cgi, FS/MANIFEST,
FS/FS/AccessRight.pm, FS/FS/CGI.pm, FS/FS/Schema.pm,
FS/FS/access_group.pm, FS/FS/access_groupagent.pm,
@@ -17002,9 +18505,10 @@
FS/FS/access_user_pref.pm, FS/FS/access_usergroup.pm,
FS/FS/agent_type.pm, FS/FS/cust_bill.pm, FS/FS/m2m_Common.pm,
FS/FS/payby.pm, FS/FS/svc_domain.pm, FS/FS/UI/Web.pm,
- FS/bin/freeside-addoutsourceuser, FS/t/AccessRight.t,
- FS/t/access_group.t, FS/t/access_groupagent.t,
- FS/t/access_right.t, FS/t/access_user.t, FS/t/access_user_pref.t,
+ FS/FS/part_pkg/billoneday.pm, FS/bin/freeside-addoutsourceuser,
+ FS/t/AccessRight.t, FS/t/access_group.t,
+ FS/t/access_groupagent.t, FS/t/access_right.t,
+ FS/t/access_user.t, FS/t/access_user_pref.t,
FS/t/access_usergroup.t, httemplate/view/cust_main/packages.html,
httemplate/view/cust_main/payment_history.html: first part of ACL
and re-skinning work and some other small stuff
@@ -17025,6 +18529,11 @@
* httemplate/search/report_receivables.cgi: Pg 8.1 fix was
incorrect and broke things, this should actually work
+2006-05-08 04:48 ivan
+
+ * README.1.5.8, README.1.7.0: suggest "make clean" on upgrade -
+ something is not quite right with perl Makefile hoohaw
+
2006-05-08 04:28 ivan
* FS/FS/Conf.pm, FS/FS/cust_main.pm,
@@ -17034,6 +18543,7 @@
2006-05-08 03:01 ivan
* FS/FS/Report/Table/Monthly.pm, httemplate/index.html,
+ httemplate/graph/cust_bill_pkg-graph.cgi,
httemplate/graph/cust_bill_pkg.cgi,
httemplate/graph/elements/monthly.html,
httemplate/search/cust_bill_pkg.cgi: sales report per agent and
@@ -17041,12 +18551,15 @@
2006-05-07 13:27 ivan
- * htetc/handler.pl, httemplate/elements/select-month_year.html,
+ * README.1.7.0, htetc/handler.pl, httemplate/docs/upgrade10.html,
+ httemplate/elements/select-month_year.html,
httemplate/elements/select-pkg_class.html,
httemplate/elements/select-table.html,
httemplate/elements/tr-select-from_to.html,
httemplate/elements/tr-select-pkg_class.html,
+ httemplate/graph/cust_bill_pkg-graph.cgi,
httemplate/graph/cust_bill_pkg.cgi,
+ httemplate/graph/money_time-graph.cgi,
httemplate/graph/money_time.cgi,
httemplate/graph/report_cust_bill_pkg.html,
httemplate/graph/report_money_time.html,
@@ -17067,9 +18580,15 @@
* httemplate/: index.html, search/report_receivables.html: add an
agent pre-selection page to receivables report
+2006-05-02 06:29 ivan
+
+ * SCHEMA_CHANGE: need to install the new Schema.pm before you can
+ autogenerate off it
+
2006-05-02 04:59 ivan
* httemplate/index.html, FS/FS/Report/Table/Monthly.pm,
+ httemplate/graph/money_time-graph.cgi,
httemplate/graph/money_time.cgi,
httemplate/graph/report_money_time.html: add a "pre-report" page
to this report/graph as requested by lewis/wtxs, also add 12mo
@@ -17104,7 +18623,8 @@
2006-04-21 17:58 ivan
- * httemplate/browse/inventory_class.html,
+ * httemplate/browse/generic.cgi,
+ httemplate/browse/inventory_class.html,
httemplate/browse/part_pkg.cgi, httemplate/browse/pkg_class.html,
httemplate/browse/rate.cgi,
httemplate/browse/elements/browse.html, htetc/handler.pl,
@@ -17118,7 +18638,8 @@
httemplate/elements/select-pkg_class.html,
httemplate/elements/select-table.html,
httemplate/elements/tr-select-pkg_class.html,
- httemplate/search/cust_pkg.cgi, FS/FS/part_pkg.pm,
+ httemplate/search/cust_pkg.cgi,
+ httemplate/search/inventory_class.html, FS/FS/part_pkg.pm,
httemplate/search/elements/search.html: start of package class
web UI (add/edit package classes, package class selection in
package def edit)
@@ -17135,14 +18656,19 @@
2006-04-21 05:45 ivan
- * httemplate/: index.html, misc/queue.cgi, search/queue.html:
- s(browse/queue.cgi)(search/queue.html)
+ * httemplate/: index.html, browse/queue.cgi, misc/queue.cgi,
+ search/queue.html: s(browse/queue.cgi)(search/queue.html)
2006-04-18 23:37 ivan
* FS/FS/cust_main.pm: DOH! perlvar: not counting patterns matched
in nested blocks that have been exited already.
+2006-04-18 12:33 ivan
+
+ * httemplate/docs/install.html: add JSON to initial install
+ instructions
+
2006-04-15 06:32 ivan
* httemplate/graph/money_time.cgi: REALLY correct the period for
@@ -17228,6 +18754,8 @@
* htetc/handler.pl, FS/FS/Misc.pm,
httemplate/edit/cust_main/contact.html,
+ httemplate/edit/cust_main/select-country.html,
+ httemplate/edit/cust_main/select-state.html,
httemplate/misc/states.cgi,
httemplate/view/cust_main/contacts.html: have the UI use full
country names, and state names outside the US...
@@ -17267,8 +18795,8 @@
2006-03-30 06:22 ivan
- * FS/bin/freeside-upgrade: move all the schema-updating magic into
- DBIx::DBSchema
+ * README.1.7.0, FS/bin/freeside-upgrade: move all the
+ schema-updating magic into DBIx::DBSchema
2006-03-24 18:23 ivan
@@ -17292,8 +18820,8 @@
2006-03-23 04:00 lsc
- * FS/FS/part_pkg/: prorate.pm, subscription.pm: for subscription.pm
- and prorate.pm:
+ * FS/FS/part_pkg/: billoneday.pm, prorate.pm, subscription.pm: for
+ subscription.pm and prorate.pm:
-modify the subscription and prorate price plans
(FS/FS/part_pkg/subscription.pm and prorate.pm) to have a
@@ -17321,11 +18849,13 @@
2006-03-20 11:13 ivan
- * FS/FS/Conf.pm, FS/FS/Schema.pm, FS/FS/cdr.pm, FS/FS/cust_main.pm,
+ * FS/FS/Conf.pm, FS/FS/Schema.pm, FS/FS/cdr.pm,
+ FS/FS/cdr_upstream_rate.pm, FS/FS/cust_main.pm,
FS/FS/cust_svc.pm, FS/FS/rate_detail.pm, FS/FS/svc_acct.pm,
FS/FS/part_pkg/voip_cdr.pm, httemplate/edit/part_pkg.cgi,
- FS/MANIFEST, bin/cdr_upstream_rate.import,
- httemplate/edit/rate.cgi, httemplate/edit/cust_main/billing.html,
+ FS/MANIFEST, FS/t/cdr_upstream_rate.t,
+ bin/cdr_upstream_rate.import, httemplate/edit/rate.cgi,
+ httemplate/edit/cust_main/billing.html,
httemplate/search/cdr.html, httemplate/search/report_cdr.html,
httemplate/view/cust_main/billing.html: add price plan to bill on
internal or external CDRs directly, add option to export CDRs to
@@ -17395,6 +18925,7 @@
* FS/FS/inventory_item.pm,
httemplate/misc/inventory_item-import.html,
httemplate/misc/process/inventory_item-import.html,
+ httemplate/search/inventory_class.html,
httemplate/search/inventory_item.html: Add an option to the web
interface to batch upload new entries to the
inventory_item table.
@@ -17403,9 +18934,9 @@
* FS/MANIFEST, FS/FS/Schema.pm, FS/FS/inventory_class.pm,
FS/FS/inventory_item.pm, FS/t/inventory_class.t,
- FS/t/inventory_item.t, httemplate/search/inventory_item.html,
- bin/generate-table-module, htetc/handler.pl,
- httemplate/edit/inventory_class.html,
+ FS/t/inventory_item.t, httemplate/search/inventory_class.html,
+ httemplate/search/inventory_item.html, bin/generate-table-module,
+ htetc/handler.pl, httemplate/edit/inventory_class.html,
httemplate/edit/elements/edit.html,
httemplate/edit/process/inventory_class.html,
httemplate/edit/process/elements/process.html,
@@ -17420,8 +18951,10 @@
2006-03-03 07:02 ivan
- * FS/FS/Report/Table/Monthly.pm, httemplate/graph/money_time.cgi:
- agent-specific sales/credit/receipts summary
+ * FS/FS/Report/Table/Monthly.pm,
+ httemplate/graph/money_time-graph.cgi,
+ httemplate/graph/money_time.cgi: agent-specific
+ sales/credit/receipts summary
2006-02-28 11:34 ivan
@@ -17442,7 +18975,8 @@
* FS/FS/Schema.pm, FS/FS/cdr.pm, FS/FS/cdr_calltype.pm,
FS/FS/cdr_carrier.pm, FS/FS/cdr_type.pm, FS/FS/cust_main.pm,
- FS/MANIFEST, FS/FS/part_pkg/voip_sqlradacct.pm, FS/t/cdr.t,
+ README.1.7.0, README.2.0.0, FS/MANIFEST,
+ FS/FS/part_pkg/voip_sqlradacct.pm, FS/t/cdr.t,
FS/t/cdr_calltype.t, FS/t/cdr_carrier.t, FS/t/cdr_type.t,
FS/t/part_pkg-voip_cdr.t, htetc/handler.pl,
httemplate/misc/cdr-import.html,
@@ -17450,6 +18984,10 @@
httemplate/search/cdr.html, httemplate/search/report_cdr.html,
bin/cdr_calltype.import: CDR schema and class
+2006-02-17 20:32 ivan
+
+ * htetc/global.asa, httemplate/docs/install.html: Mason it is
+
2006-02-17 18:11 ivan
* FS/FS/: cust_tax_exempt_pkg.pm, domain_record.pm, msgcat.pm,
@@ -17459,9 +18997,9 @@
2006-02-16 13:43 ivan
- * FS/FS/Setup.pm, FS/bin/freeside-setup,
- httemplate/docs/admin.html: automate more of the initial data
- adding...
+ * FS/FS/Setup.pm, FS/bin/freeside-setup, bin/populate-msgcat,
+ httemplate/docs/admin.html, httemplate/docs/install.html:
+ automate more of the initial data adding...
2006-02-08 23:18 ivan
@@ -17474,10 +19012,15 @@
* FS/bin/freeside-selfservice-server: don't leave ssh zombies
around either
+2006-02-07 19:50 ivan
+
+ * httemplate/docs/: upgrade7.html, upgrade8.html: remove ancient
+ upgrade instructions
+
2006-02-07 19:49 ivan
- * httemplate/docs/index.html: slightly html-ize the 1.5.8 upgrade
- instructions
+ * httemplate/docs/: upgrade10.html, index.html: slightly html-ize
+ the 1.5.8 upgrade instructions
2006-02-07 18:26 ivan
@@ -17527,10 +19070,12 @@
2006-01-30 20:26 ivan
* httemplate/: browse/addr_block.cgi, browse/agent.cgi,
- browse/agent_type.cgi, browse/part_bill_event.cgi,
- browse/part_export.cgi, browse/part_pkg.cgi, browse/part_svc.cgi,
- browse/part_virtual_field.cgi, browse/payment_gateway.html,
- browse/rate.cgi, browse/router.cgi, browse/svc_acct_pop.cgi,
+ browse/agent_type.cgi, browse/cust_pay_batch.cgi,
+ browse/part_bill_event.cgi, browse/part_export.cgi,
+ browse/part_pkg.cgi, browse/part_referral.cgi,
+ browse/part_svc.cgi, browse/part_virtual_field.cgi,
+ browse/payment_gateway.html, browse/queue.cgi, browse/rate.cgi,
+ browse/router.cgi, browse/svc_acct_pop.cgi,
config/config-view.cgi, config/config.cgi,
edit/REAL_cust_pkg.cgi, edit/agent.cgi,
edit/agent_payment_gateway.html, edit/agent_type.cgi,
@@ -17541,8 +19086,9 @@
edit/svc_forward.cgi, edit/process/prepay_credit.cgi,
edit/process/reg_code.cgi, misc/batch-cust_pay.html,
misc/cust_main-import.cgi, misc/cust_main-import_charges.cgi,
- misc/link.cgi, misc/meta-import.cgi, misc/upload-batch.cgi,
- misc/whois.cgi, misc/process/cust_main-import.cgi,
+ misc/expire_pkg.cgi, misc/link.cgi, misc/meta-import.cgi,
+ misc/upload-batch.cgi, misc/whois.cgi,
+ misc/process/cust_main-import.cgi,
misc/process/cust_main-import_charges.cgi,
misc/process/meta-import.cgi, search/report_prepaid_income.cgi,
search/report_tax.cgi, search/svc_external.cgi,
@@ -17582,20 +19128,29 @@
2006-01-25 04:34 ivan
- * FS/: FS/Record.pm, FS/Schema.pm, FS/cust_bill.pm,
- FS/cust_main.pm, FS/cust_tax_exempt.pm,
- FS/cust_tax_exempt_pkg.pm, FS/h_cust_bill.pm,
- FS/h_cust_tax_exempt.pm, t/cust_tax_exempt_pkg.t,
- t/h_cust_bill.t, t/h_cust_tax_exempt.t, MANIFEST: change
- texas-style tax exemptions to be against a specific line item
- rather than just general per-customer, for later tracking and tax
- reporting. fix 1969/1970 exemptions for one-off charges
+ * FS/FS/Record.pm, FS/FS/Schema.pm, FS/FS/cust_bill.pm,
+ FS/FS/cust_main.pm, FS/FS/cust_tax_exempt.pm,
+ FS/FS/cust_tax_exempt_pkg.pm, FS/FS/h_cust_bill.pm,
+ FS/FS/h_cust_tax_exempt.pm, FS/t/cust_tax_exempt_pkg.t,
+ FS/t/h_cust_bill.t, FS/t/h_cust_tax_exempt.t, README.2.0.0,
+ FS/MANIFEST: change texas-style tax exemptions to be against a
+ specific line item rather than just general per-customer, for
+ later tracking and tax reporting. fix 1969/1970 exemptions for
+ one-off charges
+
+2006-01-05 01:34 ivan
+
+ * httemplate/docs/upgrade10.html: my last 1.4 -> 1.5 upgrade...
2006-01-04 18:03 ivan
* FS/FS/Schema.pm: remove redundant indices on cust_main ship_
columns
+2006-01-03 00:45 ivan
+
+ * bin/billco-upload: agentnums 1-3
+
2005-12-29 18:41 rsiddall
* FS/FS/Conf.pm, FS/FS/ConfItem.pm, FS/FS/cust_pkg.pm,
@@ -17628,7 +19183,8 @@
2005-12-24 19:00 ivan
- * FS/FS/Schema.pm: update indices for better tax report performance
+ * README.1.5.8, FS/FS/Schema.pm: update indices for better tax
+ report performance
2005-12-24 18:31 ivan
@@ -17662,10 +19218,15 @@
causing " "my" variable $t masks earlier declaration in same
scope" errors
+2005-12-21 20:02 ivan
+
+ * Changes.1.5.8: more accurate description of tax report changes
+
2005-12-21 20:01 ivan
* httemplate/search/cust_bill_event.html,
httemplate/search/cust_bill_pkg.cgi,
+ httemplate/search/cust_pkg_report.cgi,
httemplate/search/report_cust_bill.html,
httemplate/search/report_cust_credit.html,
httemplate/search/report_cust_pay.html,
@@ -17686,8 +19247,8 @@
2005-12-18 20:18 ivan
- * FS/FS/part_pkg/sqlradacct_hour.pm: add maximum "caps" to RADIUS
- usage charges
+ * Changes.1.5.8, FS/FS/part_pkg/sqlradacct_hour.pm: add maximum
+ "caps" to RADIUS usage charges
2005-12-16 14:47 ivan
@@ -17779,6 +19340,26 @@
* FS/bin/freeside-upgrade: force a dbdef reload. no wonder this
had to be run multiple times before
+2005-12-02 22:49 ivan
+
+ * README.1.5.8, httemplate/docs/install.html,
+ httemplate/docs/upgrade10.html: add Term::ReadKey to install &
+ upgrade docs and README.1.5.8
+
+2005-12-01 18:30 ivan
+
+ * httemplate/docs/upgrade10.html: and Net::Whois::Raw
+
+2005-12-01 17:52 ivan
+
+ * README.1.5.8, httemplate/docs/upgrade10.html: note DBIx::DBSchema
+ 0.29 is required for Pg 7.2.x and earlier
+
+2005-12-01 17:22 ivan
+
+ * httemplate/docs/upgrade10.html: apache instructions already up
+ top
+
2005-12-01 11:17 ivan
* httemplate/edit/agent_type.cgi: list disabled packages on agent
@@ -17790,6 +19371,10 @@
shouldn't apply to RADIUS groups, this is messing up unrelated
RADIUS exports
+2005-11-30 09:48 ivan
+
+ * README.1.5.8: later versions are okay too
+
2005-11-28 09:16 ivan
* FS/FS/cust_main.pm: turn off debugging
@@ -17866,6 +19451,11 @@
* FS/FS/part_export/radiator.pm: update radiator export to deal
with prepaid and some other random stuff
+2005-11-22 01:13 ivan
+
+ * httemplate/docs/install.html: correct common misconception RIGHT
+ THERE in the docs
+
2005-11-21 07:24 ivan
* FS/FS/: export_svc.pm, part_svc.pm, rate.pm: when editing exports
@@ -17933,6 +19523,10 @@
* FS/FS/TicketSystem/RT_External.pm: update custom priorioty field
BS for RT 3.4.4
+2005-11-17 23:05 ivan
+
+ * README.1.5.8: slightly more info in 1.5.8 upgrade instructions
+
2005-11-17 19:48 ivan
* FS/FS/cust_main.pm: allow expired cards to remain on file; only
@@ -17950,7 +19544,8 @@
2005-11-17 04:27 ivan
- * FS/FS/Schema.pm: add cust_pkg2 index on cust_pkg.pkgpart
+ * README.1.5.8, FS/FS/Schema.pm: add cust_pkg2 index on
+ cust_pkg.pkgpart
2005-11-17 03:15 ivan
@@ -17969,10 +19564,15 @@
2005-11-16 05:14 ivan
* FS/FS/part_svc.pm, httemplate/index.html,
- httemplate/browse/part_svc.cgi, FS/FS/UI/Web.pm,
+ httemplate/browse/part_svc.cgi, Changes.1.5.8, FS/FS/UI/Web.pm,
httemplate/edit/bulk-cust_svc.html,
httemplate/edit/process/bulk-cust_svc.cgi: bulk svcpart change
+2005-11-12 04:19 ivan
+
+ * README.1.5.8: one last bit for 1.5.7->1.5.8 RT upgrade
+ instructions
+
2005-11-11 17:24 ivan
* httemplate/view/cust_main/tickets.html: huh seem to have
@@ -18015,6 +19615,10 @@
unaudited domain deletion, add record being deleted to record
deletion popup
+2005-11-09 12:48 ivan
+
+ * httemplate/docs/install.html: closing paren
+
2005-11-07 18:16 ivan
* httemplate/docs/admin.html: bah
@@ -18046,12 +19650,20 @@
* FS/FS/cust_bill.pm: only send to specific destinations, oops!
+2005-10-31 21:21 ivan
+
+ * bin/billco-upload: do the zip
+
2005-10-31 21:14 ivan
* httemplate/edit/part_bill_event.cgi: add option for spool_csv
events to apply only to a specific destination type (i.e. postal
only)
+2005-10-31 19:16 ivan
+
+ * bin/billco-upload: good nuff for 11/1
+
2005-10-31 19:15 ivan
* httemplate/edit/part_bill_event.cgi, FS/FS/cust_bill.pm: add
@@ -18059,6 +19671,10 @@
spool one giant (pair of) CSV files in addition to FTPing them
individually
+2005-10-28 10:10 ivan
+
+ * bin/billco-upload: beginning of quick billco zip & upload tool
+
2005-10-28 04:56 ivan
* httemplate/search/cust_bill_event.cgi: don't show 'N/A'
@@ -18081,7 +19697,7 @@
2005-10-24 04:56 ivan
- * FS/FS/Schema.pm, httemplate/edit/process/rate.cgi,
+ * README.1.5.8, FS/FS/Schema.pm, httemplate/edit/process/rate.cgi,
httemplate/elements/progress-init.html,
httemplate/elements/xmlhttp.html: fix rate plan editing with new
xmlhttp progressbar - use POST instead of GET. also optimize SQL
@@ -18166,216 +19782,78 @@
httemplate/edit/agent.cgi, httemplate/config/config-view.cgi,
httemplate/config/config.cgi: agent option to select RT queue
+2005-10-15 04:25 ivan
+
+ * README.1.5.8: upgrade instructions for new RT verison
+
2005-10-15 04:13 ivan
- * rt/html/Elements/Header: land RT 3.4.4 on HEAD
+ * README.1.5.8, rt/html/Elements/Header, rt/html/NoAuth/webrt.css:
+ land RT 3.4.4 on HEAD
2005-10-15 02:33 ivan
- * rt/: etc/RT_SiteConfig.pm, html/Elements/Footer,
+ * rt/: etc/RT_SiteConfig.pm, html/Admin/Global/CustomField.html,
+ html/Admin/Global/CustomFields.html, html/Elements/Footer,
html/Elements/Header, html/Elements/Menu,
html/Elements/PageLayout, html/Elements/SimpleSearch,
html/Elements/Tabs, html/Elements/CollectionAsTable/Row,
+ html/NoAuth/webrt.css, html/NoAuth/images/back_home.gif,
+ html/NoAuth/images/head_requestracker.gif,
+ html/NoAuth/images/rt.jpg, html/NoAuth/images/spacer.gif,
+ html/NoAuth/images/squares_blue.gif,
html/Ticket/Elements/ShowSummary, html/Ticket/Elements/Tabs,
- sbin/rt-setup-database.in: landing rt 3.4.4 on HEAD
+ lib/RT/TicketCustomFieldValue.pm,
+ lib/RT/TicketCustomFieldValue_Overlay.pm,
+ lib/RT/TicketCustomFieldValues.pm,
+ lib/RT/TicketCustomFieldValues_Overlay.pm,
+ lib/RT/I18N/en_malkovich.po, lib/t/00smoke.t.in,
+ lib/t/01harness.t.in, lib/t/02regression.t.in, lib/t/03web.pl.in,
+ lib/t/04_send_email.pl.in, lib/t/05cronsupport.pl.in,
+ lib/t/regression/00placeholder, sbin/rt-setup-database.in:
+ landing rt 3.4.4 on HEAD
2005-10-15 02:09 ivan
- * rt/: UPGRADING, configure, Makefile.in, README, configure.ac,
- Changelog, aclocal.m4, docs/rt3-schema-relationships.dot,
- docs/design_docs/realflow.txt, m4/rt_layout.m4,
+ * rt/: docs/design_docs/realflow.txt,
docs/design_docs/3.3-schema-redesign.txt,
- docs/design_docs/cvs_integration,
- docs/design_docs/link-definitions.txt, docs/design_docs/rt-mvc,
- sbin/extract-message-catalog, sbin/extract_pod_tests,
- sbin/factory, sbin/license_tag, sbin/regression_harness,
- sbin/rt-dump-database.in, sbin/rt-test-dependencies.in,
- html/autohandler, html/index.html, html/l,
- html/Ticket/History.html, html/Ticket/Modify.html,
- html/Ticket/ModifyAll.html, html/Ticket/ModifyDates.html,
- html/Ticket/ModifyPeople.html, html/Ticket/Update.html,
- html/Tools/MyDay.html, html/Tools/Offline.html,
- html/Tools/Elements/Tabs, html/Ticket/ModifyLinks.html,
- html/Ticket/ShowEmailRecord.html,
- html/Ticket/Attachment/dhandler,
- html/Ticket/Elements/AddWatchers,
- html/Ticket/Elements/EditCustomField,
- html/Ticket/Elements/EditWatchers,
- html/Ticket/Elements/LoadTextAttachments,
- html/Ticket/Elements/ShowDependencies,
- html/Ticket/Elements/ShowMessageHeaders,
- html/Ticket/Elements/ShowPeople,
- html/Ticket/Elements/ShowTransaction,
- html/Ticket/Elements/BulkLinks,
- html/Ticket/Elements/EditCustomFields,
- html/Ticket/Elements/EditDates, html/Ticket/Elements/EditPeople,
- html/Ticket/Elements/PreviewScrips,
- html/Ticket/Elements/ShowBasics,
- html/Ticket/Elements/ShowCustomFields,
- html/Ticket/Elements/ShowDates, html/Ticket/Elements/ShowHistory,
- html/Ticket/Elements/ShowMembers,
- html/Ticket/Elements/ShowMessageStanza,
- html/Ticket/Elements/ShowRequestor,
- html/Ticket/Elements/ShowUserEntry, html/Search/Build.html,
- html/Search/Edit.html, html/Search/Results.html,
- html/Search/Results.rdf, html/Search/Results.tsv,
- html/Ticket/Elements/EditBasics,
- html/Ticket/Elements/FindAttachments,
- html/Ticket/Elements/ShowAttachments,
- html/Ticket/Elements/ShowGroupMembers,
- html/Search/Elements/BuildFormatString,
- html/Search/Elements/DisplayOptions,
- html/Search/Elements/EditFormat,
- html/Search/Elements/EditSearches,
- html/Search/Elements/NewListActions,
- html/Search/Elements/PickCFs, html/Search/Elements/SearchPrivacy,
- html/Search/Elements/SelectAndOr,
- html/Search/Elements/SelectGroup,
- html/Search/Elements/SelectLinks,
- html/Search/Elements/SelectSearchObject,
- html/Search/Elements/SelectSearchesForObjects,
- html/Admin/autohandler, html/Admin/index.html,
- html/Approvals/Display.html, html/Approvals/index.html,
- html/Approvals/Elements/Approve,
- html/Approvals/Elements/PendingMyApproval,
- html/Approvals/Elements/ShowDependency,
- html/Approvals/Elements/Tabs,
+ docs/design_docs/rt-mvc, sbin/rt-dump-database.in,
+ html/Search/Elements/SelectGroup, html/Admin/autohandler,
html/Download/CustomFieldValue/dhandler,
html/Download/Tabular/dhandler, html/Search/Elements/EditQuery,
- html/Search/Elements/PickBasics,
- html/Search/Elements/PickCriteria,
- html/Search/Elements/SelectPersonType,
html/Admin/CustomFields/GroupRights.html,
- html/Admin/Global/GroupRights.html, html/Admin/Global/Scrip.html,
- html/Admin/Global/Scrips.html, html/Admin/Global/Template.html,
- html/Admin/Global/Templates.html,
- html/Admin/Global/UserRights.html, html/Admin/Global/index.html,
html/Admin/Global/CustomFields/Groups.html,
html/Admin/Global/CustomFields/Queue-Tickets.html,
html/Admin/Global/CustomFields/Queue-Transactions.html,
html/Admin/Global/CustomFields/Users.html,
html/Admin/Global/CustomFields/index.html,
html/Admin/Groups/CustomFields.html,
- html/Admin/Groups/GroupRights.html,
- html/Admin/Groups/History.html, html/Admin/Groups/Members.html,
- html/Admin/Groups/Modify.html, html/Admin/Groups/UserRights.html,
- html/Admin/Groups/index.html,
- html/Admin/Tools/Configuration.html, html/Admin/Tools/index.html,
+ html/Admin/Groups/History.html,
html/Admin/CustomFields/Modify.html,
html/Admin/CustomFields/Objects.html,
html/Admin/CustomFields/UserRights.html,
html/Admin/CustomFields/index.html,
- html/Admin/Queues/CustomFields.html,
- html/Admin/Queues/GroupRights.html,
html/Admin/Users/CustomFields.html,
html/Admin/Users/History.html, html/Admin/Users/Memberships.html,
- html/Admin/Users/index.html, html/Admin/Queues/CustomField.html,
- html/Admin/Queues/Scrip.html, html/Admin/Queues/Templates.html,
- html/Admin/Queues/UserRights.html,
html/Admin/Elements/CustomFieldTabs,
- html/Admin/Elements/EditCustomField,
- html/Admin/Elements/EditCustomFieldValues,
- html/Admin/Elements/EditScrip, html/Admin/Elements/EditTemplates,
- html/Admin/Elements/EditUserComments, html/Admin/Elements/Header,
- html/Admin/Elements/ListGlobalScrips,
- html/Admin/Elements/QueueTabs,
html/Admin/Elements/SelectCustomFieldLookupType,
- html/Admin/Elements/SelectCustomFieldType,
- html/Admin/Elements/SelectModifyGroup,
- html/Admin/Elements/SelectModifyUser,
- html/Admin/Elements/SelectSingleOrMultiple,
- html/Admin/Elements/SelectUsers, html/Admin/Elements/Tabs,
- html/Admin/Elements/ToolTabs, html/Admin/Elements/UserTabs,
- html/Admin/Queues/Modify.html, html/Admin/Queues/People.html,
- html/Admin/Queues/Scrips.html, html/Admin/Queues/Template.html,
- html/Admin/Queues/index.html,
- html/Admin/Elements/AddCustomFieldValue,
- html/Admin/Elements/EditCustomFields,
- html/Admin/Elements/EditQueueWatchers,
- html/Admin/Elements/EditScrips,
html/Admin/Elements/GlobalCustomFieldTabs,
- html/Admin/Elements/ModifyTemplate,
html/Admin/Elements/ObjectCustomFields,
- html/Admin/Elements/SelectGroups,
- html/Admin/Elements/SelectModifyQueue,
- html/Admin/Elements/SelectNewGroupMembers,
- html/Admin/Elements/SelectScrip,
- html/Admin/Elements/SelectScripCondition,
- html/Admin/Elements/CreateUserCalled,
- html/Admin/Elements/GroupTabs,
- html/Admin/Elements/ListGlobalCustomFields,
html/Admin/Elements/PickCustomFields,
html/Admin/Elements/PickObjects,
- html/Admin/Elements/QueueRightsForUser,
- html/Admin/Elements/SelectRights,
- html/Admin/Elements/SelectScripAction,
- html/Admin/Elements/SelectStage,
- html/Admin/Elements/SelectTemplate,
- html/Admin/Elements/SystemTabs, html/SelfService/Closed.html,
- html/SelfService/Create.html,
html/SelfService/CreateTicketInQueue.html,
- html/SelfService/Display.html, html/SelfService/Error.html,
- html/SelfService/Prefs.html, html/SelfService/Update.html,
- html/SelfService/index.html,
- html/SelfService/Attachment/dhandler,
- html/Elements/BevelBoxRaisedEnd, html/Elements/CreateTicket,
html/Elements/EditCustomField,
- html/Elements/EditCustomFieldImage, html/Elements/EditLinks,
- html/Elements/Error, html/Elements/ListActions,
- html/Elements/MyRequests, html/Elements/QueryString,
- html/Elements/ScrubHTML, html/Elements/SelectDateType,
- html/Elements/SelectMatch, html/Elements/SelectNewTicketQueue,
- html/Elements/SelectSortOrder, html/Elements/SelectTicketSortBy,
- html/Elements/SelectUsers, html/Elements/ShowLinks,
- html/SelfService/Elements/GotoTicket,
- html/SelfService/Elements/Header,
- html/SelfService/Elements/MyRequests,
- html/SelfService/Elements/Tabs,
- html/Elements/BevelBoxRaisedStart,
+ html/Elements/EditCustomFieldImage,
html/Elements/EditCustomFieldBinary,
- html/Elements/EditCustomFieldSelect, html/Elements/GotoTicket,
- html/Elements/MessageBox, html/Elements/SelectAttachmentField,
- html/Elements/SelectGroups, html/Elements/SelectOwner,
- html/Elements/SelectQueue, html/Elements/SelectStatus,
- html/Elements/SelectWatcherType,
+ html/Elements/EditCustomFieldSelect,
html/Elements/ShowCustomFieldBinary,
html/Elements/ShowCustomFieldImage,
html/Elements/ShowCustomFieldWikitext,
- html/Elements/ShowCustomFields, html/Elements/ShowLink,
- html/Elements/TitleBox, html/Elements/Callback,
- html/Elements/Checkbox, html/Elements/EditCustomFieldFreeform,
- html/Elements/Quicksearch, html/Elements/Refresh,
- html/Elements/Section, html/Elements/SelectLinkType,
- html/Elements/SelectTicketTypes,
+ html/Elements/ShowCustomFields,
+ html/Elements/EditCustomFieldFreeform,
html/Elements/EditCustomFieldText,
- html/Elements/EditCustomFieldWikitext, html/Elements/Login,
- html/Elements/MyTickets, html/Elements/SelectBoolean,
- html/Elements/SelectCustomFieldOperator,
- html/Elements/SelectCustomFieldValue,
- html/Elements/SelectDateRelation,
- html/Elements/SelectEqualityOperator, html/Elements/SelectLang,
- html/Elements/SelectResultsPerPage,
- html/Elements/SetupSessionCookie, html/Elements/ShowMemberships,
- html/Elements/Submit, html/Elements/TitleBoxEnd,
- html/Elements/CollectionAsTable/Header,
- html/Elements/CollectionAsTable/ParseFormat,
- html/Elements/RT__Ticket/ColumnMap, html/REST/1.0/autohandler,
- html/REST/1.0/dhandler, html/REST/1.0/logout,
- html/REST/1.0/Forms/queue/default, html/REST/1.0/Forms/queue/ns,
- html/REST/1.0/Forms/ticket/attachments,
- html/REST/1.0/Forms/ticket/default,
- html/REST/1.0/Forms/ticket/history,
- html/REST/1.0/Forms/ticket/links,
- html/REST/1.0/Forms/user/default, html/REST/1.0/Forms/user/ns,
- html/REST/1.0/NoAuth/mail-gateway, html/REST/1.0/search/dhandler,
- html/REST/1.0/search/ticket, html/REST/1.0/ticket/comment,
- html/REST/1.0/ticket/link, html/REST/1.0/ticket/merge,
- html/NoAuth/Logout.html, html/NoAuth/Reminder.html,
- html/NoAuth/images/autohandler, html/User/Delegation.html,
- html/User/Elements/DelegateRights, html/User/Elements/GroupTabs,
- html/User/Elements/Tabs, html/User/Groups/Members.html,
- html/User/Groups/Modify.html, html/User/Groups/index.html,
- lib/RT.pm.in, lib/t/00smoke.t, lib/t/setup_regression.t,
+ html/Elements/EditCustomFieldWikitext,
+ html/Elements/ShowMemberships, lib/t/setup_regression.t,
lib/t/create_data.pl, lib/t/regression/01ticket_link_searching.t,
lib/t/regression/02basic_web.t,
lib/t/regression/03web_compiliation_errors.t,
@@ -18395,96 +19873,28 @@
lib/t/regression/06mailgateway.t, lib/t/regression/07rights.t,
lib/t/regression/15cf_single_values_are_single.t,
lib/t/regression/18stale_delegations_cleanup.t,
- lib/RT/GroupMembers.pm, lib/RT/Principals.pm,
- lib/RT/Scrips_Overlay.pm, lib/RT/Tickets.pm, lib/RT/Base.pm,
- lib/RT/CustomField_Overlay.pm, lib/RT/Date.pm,
- lib/RT/Queues_Overlay.pm, lib/RT/ScripConditions_Overlay.pm,
- lib/RT/Template_Overlay.pm, lib/RT/User.pm, lib/RT/Attributes.pm,
- lib/RT/SavedSearch.pm, lib/RT/StyleGuide.pod, lib/RT/System.pm,
- lib/RT/Templates_Overlay.pm, lib/RT/Tickets_Overlay_SQL.pm,
- lib/RT/ACL_Overlay.pm, lib/RT/Attachment.pm,
- lib/RT/Attribute_Overlay.pm, lib/RT/Group.pm, lib/RT/Handle.pm,
- lib/RT/ObjectCustomFields.pm, lib/RT/EmailParser.pm,
- lib/RT/GroupMembers_Overlay.pm, lib/RT/I18N.pm,
- lib/RT/Principal.pm, lib/RT/Principals_Overlay.pm,
- lib/RT/Tickets_Overlay.pm, lib/RT/Transactions.pm,
- lib/RT/CachedGroupMember.pm, lib/RT/CustomFieldValue.pm,
- lib/RT/Links.pm, lib/RT/Scrip.pm, lib/RT/Attachment_Overlay.pm,
- lib/RT/Attributes_Overlay.pm, lib/RT/CurrentUser.pm,
- lib/RT/CustomFieldValue_Overlay.pm, lib/RT/CustomFieldValues.pm,
- lib/RT/Group_Overlay.pm, lib/RT/ObjectCustomField.pm,
- lib/RT/ObjectCustomFields_Overlay.pm, lib/RT/Queue.pm,
- lib/RT/ScripActions.pm, lib/RT/Attachments.pm,
- lib/RT/CachedGroupMember_Overlay.pm, lib/RT/Groups.pm,
- lib/RT/Links_Overlay.pm, lib/RT/SavedSearches.pm,
- lib/RT/ScripAction.pm, lib/RT/Scrip_Overlay.pm, lib/RT/Scrips.pm,
- lib/RT/Transactions_Overlay.pm, lib/RT/ACE.pm,
- lib/RT/CachedGroupMembers.pm,
- lib/RT/CustomFieldValues_Overlay.pm, lib/RT/CustomFields.pm,
- lib/RT/GroupMember.pm, lib/RT/Link.pm,
- lib/RT/ObjectCustomFieldValues.pm, lib/RT/Principal_Overlay.pm,
- lib/RT/Queue_Overlay.pm, lib/RT/Queues.pm,
- lib/RT/ScripCondition.pm, lib/RT/ScripConditions.pm,
- lib/RT/Transaction.pm, lib/RT/CustomField.pm,
+ lib/RT/SavedSearch.pm, lib/RT/ObjectCustomFields.pm,
+ lib/RT/CustomFieldValue_Overlay.pm, lib/RT/ObjectCustomField.pm,
+ lib/RT/ObjectCustomFields_Overlay.pm, lib/RT/SavedSearches.pm,
+ lib/RT/ObjectCustomFieldValues.pm,
lib/RT/ObjectCustomFieldValue.pm,
lib/RT/ObjectCustomField_Overlay.pm,
- lib/RT/ScripActions_Overlay.pm, lib/RT/Template.pm,
- lib/RT/Attachments_Overlay.pm, lib/RT/ScripAction_Overlay.pm,
- lib/RT/ScripCondition_Overlay.pm, lib/RT/Ticket.pm,
- lib/RT/ACL.pm, lib/RT/GroupMember_Overlay.pm,
- lib/RT/ObjectCustomFieldValues_Overlay.pm, lib/RT/ACE_Overlay.pm,
- lib/RT/Attribute.pm, lib/RT/CachedGroupMembers_Overlay.pm,
- lib/RT/CustomFields_Overlay.pm, lib/RT/Link_Overlay.pm,
- lib/RT/ObjectCustomFieldValue_Overlay.pm, lib/RT/Templates.pm,
- lib/RT/URI.pm, lib/RT/Users.pm, lib/RT/I18N/en.po,
- lib/RT/I18N/i_default.pm, lib/RT/I18N/cs.pm, lib/RT/I18N/cs.po,
- lib/RT/I18N/pt_br.po, lib/RT/I18N/fr.po, lib/RT/I18N/es.po,
- lib/RT/I18N/nl.po, lib/RT/I18N/pl.po, lib/RT/I18N/no.po,
- lib/RT/I18N/it.po, lib/RT/I18N/hu.po, lib/RT/I18N/da.po,
- lib/RT/I18N/ru.po, lib/RT/I18N/de.po, lib/RT/I18N/ja.po,
- lib/RT/I18N/zh_tw.po, lib/RT/I18N/id.po, lib/RT/I18N/he.po,
- lib/RT/I18N/fi.po, lib/RT/I18N/zh_cn.po, lib/RT/URI/base.pm,
- lib/RT/URI/fsck_com_rt.pm, lib/RT/URI/t.pm,
- lib/RT/Action/AutoOpen.pm, lib/RT/Action/Autoreply.pm,
- lib/RT/Action/CreateTickets.pm, lib/RT/Action/Generic.pm,
- lib/RT/Action/Notify.pm, lib/RT/Action/NotifyAsComment.pm,
- lib/RT/Action/RecordComment.pm,
- lib/RT/Action/RecordCorrespondence.pm,
- lib/RT/Action/ResolveMembers.pm, lib/RT/Action/SetPriority.pm,
- lib/RT/Action/UserDefined.pm, lib/RT/Action/EscalatePriority.pm,
- lib/RT/Action/SendEmail.pm, lib/RT/Interface/CLI.pm,
- lib/RT/Interface/Email.pm, lib/RT/Interface/REST.pm,
- lib/RT/Interface/Web.pm, lib/RT/Interface/Email/Auth/GnuPG.pm,
- lib/RT/Interface/Email/Auth/MailFrom.pm,
- lib/RT/Interface/Email/Filter/SpamAssassin.pm,
- lib/RT/Interface/Web/Handler.pm,
+ lib/RT/ObjectCustomFieldValues_Overlay.pm,
+ lib/RT/ObjectCustomFieldValue_Overlay.pm, lib/RT/I18N/pl.po,
+ lib/RT/I18N/id.po, lib/RT/URI/t.pm,
lib/RT/Interface/Web/QueryBuilder.pm,
- lib/RT/Interface/Web/Standalone.pm, bin/mason_handler.scgi.in,
- bin/standalone_httpd.in, lib/RT/Condition/AnyTransaction.pm,
- lib/RT/Condition/BeforeDue.pm, lib/RT/Condition/Generic.pm,
- lib/RT/Condition/Overdue.pm, lib/RT/Condition/OwnerChange.pm,
- lib/RT/Condition/PriorityChange.pm,
- lib/RT/Condition/PriorityExceeds.pm,
- lib/RT/Condition/QueueChange.pm,
- lib/RT/Condition/StatusChange.pm,
- lib/RT/Condition/UserDefined.pm,
+ lib/RT/Interface/Web/Standalone.pm,
lib/RT/Interface/Web/QueryBuilder/Tree.pm,
- lib/RT/Search/ActiveTicketsInQueue.pm, lib/RT/Search/FromSQL.pm,
- lib/RT/Search/Generic.pm, bin/mason_handler.fcgi.in,
- bin/mason_handler.svc.in, bin/rt-crontool.in, bin/rt.in,
- bin/webmux.pl.in, bin/rt-mailgate.in, etc/initialdata,
- etc/acl.mysql, etc/schema.Informix, etc/schema.SQLite,
- etc/acl.Pg, etc/schema.mysql, etc/upgrade/3.1.0/schema.SQLite,
- etc/upgrade/3.1.0/schema.Pg, etc/upgrade/3.3.0/acl.Informix,
- etc/upgrade/3.3.0/acl.Oracle, etc/upgrade/3.3.0/acl.Pg,
- etc/upgrade/3.3.0/acl.SQLite, etc/upgrade/3.3.0/acl.mysql,
- etc/upgrade/3.3.0/content, etc/upgrade/3.3.0/schema.Oracle,
- etc/upgrade/3.3.0/schema.Pg, etc/upgrade/3.3.0/schema.mysql,
- etc/upgrade/3.3.11/acl.Oracle, etc/upgrade/3.3.11/acl.Pg,
- etc/upgrade/3.3.11/acl.SQLite, etc/upgrade/3.3.11/acl.mysql,
- etc/upgrade/3.3.11/content, etc/upgrade/3.3.11/schema.Oracle,
- etc/upgrade/3.3.11/schema.Pg, etc/upgrade/3.3.11/schema.SQLite,
- etc/upgrade/3.3.11/schema.mysql: import rt 3.4.4
+ etc/upgrade/3.3.0/acl.Informix, etc/upgrade/3.3.0/acl.Oracle,
+ etc/upgrade/3.3.0/acl.Pg, etc/upgrade/3.3.0/acl.SQLite,
+ etc/upgrade/3.3.0/acl.mysql, etc/upgrade/3.3.0/content,
+ etc/upgrade/3.3.0/schema.Oracle, etc/upgrade/3.3.0/schema.Pg,
+ etc/upgrade/3.3.0/schema.mysql, etc/upgrade/3.3.11/acl.Oracle,
+ etc/upgrade/3.3.11/acl.Pg, etc/upgrade/3.3.11/acl.SQLite,
+ etc/upgrade/3.3.11/acl.mysql, etc/upgrade/3.3.11/content,
+ etc/upgrade/3.3.11/schema.Oracle, etc/upgrade/3.3.11/schema.Pg,
+ etc/upgrade/3.3.11/schema.SQLite,
+ etc/upgrade/3.3.11/schema.mysql: Initial revision
2005-10-13 14:16 ivan
@@ -18515,7 +19925,9 @@
2005-10-10 05:20 ivan
- * FS/FS/cust_pay.pm, htetc/handler.pl, httemplate/index.html,
+ * Changes.1.5.8, README.1.5.8, FS/FS/cust_pay.pm, htetc/global.asa,
+ htetc/handler.pl, httemplate/index.html,
+ httemplate/docs/upgrade10.html,
httemplate/misc/batch-cust_pay.html,
httemplate/misc/xmlhttp-cust_main-search.cgi,
httemplate/misc/process/batch-cust_pay.cgi,
@@ -18529,14 +19941,19 @@
2005-10-07 17:47 ivan
* httemplate/: edit/part_pkg.cgi, edit/process/part_pkg.cgi,
- edit/process/quick-charge.cgi, elements/select-taxclass.html: fix
- tax class selection in package add/edit too
+ edit/process/quick-charge.cgi, elements/select-taxclass.html,
+ view/cust_main/quick-charge.html: fix tax class selection in
+ package add/edit too
2005-10-07 16:28 ivan
* conf/invoice_latex: allow more width for return address, stuff is
wrapping
+2005-10-06 22:03 ivan
+
+ * README.1.5.8: need new B:CC
+
2005-10-06 21:50 ivan
* httemplate/view/cust_main/billing.html: mask out echeck account
@@ -18550,8 +19967,9 @@
2005-10-06 19:25 ivan
* FS/FS/Conf.pm, FS/FS/part_pkg.pm,
- httemplate/edit/process/quick-charge.cgi: add require_taxclasses
- config flag
+ httemplate/edit/process/quick-charge.cgi,
+ httemplate/view/cust_main/quick-charge.html: add
+ require_taxclasses config flag
2005-10-06 16:09 ivan
@@ -18599,6 +20017,10 @@
usage information displays for any usage-capable export, add
ability to edit uid/gid
+2005-10-02 07:04 ivan
+
+ * httemplate/docs/install.html: fix leading % causing Mason to barf
+
2005-10-02 00:09 ivan
* Makefile, htetc/handler.pl, init.d/freeside-init: add dev make
@@ -18619,12 +20041,16 @@
2005-09-25 01:13 ivan
- * CREDITS, FS/FS/UI/Web.pm, httemplate/edit/process/part_svc.cgi,
+ * CREDITS, Changes.1.5.8, JSRS-LICENSE, README.1.5.7,
+ FS/FS/UI/Web.pm, httemplate/edit/cust_main/select-country.html,
+ httemplate/edit/cust_main/select-county.html,
+ httemplate/edit/process/part_svc.cgi,
httemplate/edit/process/rate.cgi,
httemplate/elements/jsrsServer.html,
httemplate/elements/progress-init.html,
httemplate/elements/progress-popup.html,
- httemplate/elements/xmlhttp.html: get rid of JSRS iframe foo for
+ httemplate/elements/xmlhttp.html, httemplate/docs/install.html,
+ httemplate/docs/upgrade10.html: get rid of JSRS iframe foo for
progress bar, use XMLHTTPRequest instead. really should have
done that in the first place. JSON will wait until another
day...
@@ -18659,8 +20085,9 @@
2005-09-14 04:01 ivan
* FS/t/agent_payment_gateway.t, FS/t/banned_pay.t,
- FS/t/payment_gateway.t, FS/t/payment_gateway_option.t,
- bin/generate-table-module: fix autogenerated simple test
+ FS/t/cancel_reason.t, FS/t/payment_gateway.t,
+ FS/t/payment_gateway_option.t, bin/generate-table-module: fix
+ autogenerated simple test
2005-09-13 13:12 ivan
@@ -18670,6 +20097,9 @@
2005-09-10 07:50 ivan
* CREDITS, httemplate/edit/cust_main/contact.html,
+ httemplate/edit/cust_main/select-country.html,
+ httemplate/edit/cust_main/select-county.html,
+ httemplate/edit/cust_main/select-state.html,
httemplate/edit/cust_main.cgi, httemplate/elements/xmlhttp.html,
httemplate/misc/counties.cgi, httemplate/misc/states.cgi:
ajax-style xmlhttprequest state/county/country selector!
@@ -18741,8 +20171,8 @@
2005-09-07 02:37 ivan
- * FS/FS/part_export/cpanel.pm, eg/export_template.pm: add cpanel
- export
+ * Changes.1.5.8, FS/FS/part_export/cpanel.pm,
+ eg/export_template.pm: add cpanel export
2005-09-06 14:58 ivan
@@ -18752,11 +20182,17 @@
2005-08-27 01:46 ivan
* FS/MANIFEST, FS/FS/Schema.pm, FS/FS/banned_pay.pm,
- FS/FS/cust_main.pm, FS/t/banned_pay.t, bin/generate-table-module,
+ FS/FS/cancel_reason.pm, FS/FS/cust_main.pm, FS/t/banned_pay.t,
+ FS/t/cancel_reason.t, bin/generate-table-module,
httemplate/view/cust_main.cgi,
httemplate/misc/cust_main-cancel.cgi: add banned credit card /
ACH table, re-do cancel popup to have a checkbox to ban payinfo
+2005-08-24 07:07 ivan
+
+ * README.1.5.8, httemplate/docs/upgrade10.html: need
+ H:W:SelectLayers 0.05
+
2005-08-24 06:47 ivan
* httemplate/edit/cust_main/billing.html: fix size of cvv2 help
@@ -18764,11 +20200,12 @@
2005-08-24 06:22 ivan
- * htetc/handler.pl, httemplate/edit/cust_main.cgi,
+ * htetc/global.asa, htetc/handler.pl,
+ httemplate/edit/cust_main.cgi,
httemplate/edit/cust_main/billing.html,
- httemplate/edit/cust_main/contact.html, FS/FS/cust_main.pm,
- FS/FS/cust_main_county.pm, FS/FS/ClientAPI/MyAccount.pm,
- FS/FS/ClientAPI/Signup.pm,
+ httemplate/edit/cust_main/contact.html, Changes.1.5.8,
+ FS/FS/cust_main.pm, FS/FS/cust_main_county.pm,
+ FS/FS/ClientAPI/MyAccount.pm, FS/FS/ClientAPI/Signup.pm,
fs_selfservice/FS-SelfService/SelfService.pm,
httemplate/docs/ach.html, httemplate/docs/cvv2.html,
httemplate/edit/process/cust_main.cgi,
@@ -18817,12 +20254,13 @@
FS/FS/option_Common.pm, FS/FS/part_export.pm,
FS/FS/part_export_option.pm, FS/FS/part_pkg.pm,
FS/FS/payment_gateway.pm, FS/FS/payment_gateway_option.pm,
- FS/bin/freeside-setup, FS/bin/freeside-upgrade, FS/FS.pm,
- FS/MANIFEST, FS/t/option_Common.t, FS/t/payment_gateway.t,
- FS/t/payment_gateway_option.t, bin/generate-table-module,
- htetc/handler.pl, httemplate/index.html,
- httemplate/browse/agent.cgi,
+ FS/bin/freeside-setup, FS/bin/freeside-upgrade, README.1.5.8,
+ SCHEMA_CHANGE, FS/FS.pm, FS/MANIFEST, FS/t/option_Common.t,
+ FS/t/payment_gateway.t, FS/t/payment_gateway_option.t,
+ bin/generate-table-module, htetc/global.asa, htetc/handler.pl,
+ httemplate/index.html, httemplate/browse/agent.cgi,
httemplate/browse/payment_gateway.html,
+ httemplate/docs/upgrade10.html,
httemplate/edit/agent_payment_gateway.html,
httemplate/edit/payment_gateway.html: infrastructure for easier
schema changes, and: add payment_gateway, payment_gateway_option
@@ -18839,14 +20277,20 @@
2005-08-09 14:38 ivan
- * FS/: FS/part_export/radiator.pm, FS/part_export/sqlradius.pm,
- t/part_export-radiator.t, FS/part_export/sqlradius_withdomain.pm:
- add native Radiator export
+ * Changes.1.5.8, FS/FS/part_export/radiator.pm,
+ FS/FS/part_export/sqlradius.pm, FS/t/part_export-radiator.t,
+ FS/FS/part_export/sqlradius_withdomain.pm: add native Radiator
+ export
2005-08-08 08:15 ivan
- * FS/FS/part_export/everyone_net.pm: add export to everyone.net
- outsource mail service
+ * Changes.1.5.8, FS/FS/part_export/everyone_net.pm: add export to
+ everyone.net outsource mail service
+
+2005-08-07 20:15 ivan
+
+ * httemplate/docs/selfservice.html: add some docs on
+ signup_server-payby and -realtime configuration values
2005-08-06 17:41 ivan
@@ -18856,8 +20300,8 @@
2005-08-06 17:40 ivan
- * FS/FS/agent.pm, FS/FS/cust_pkg.pm, FS/FS/cust_svc.pm,
- FS/FS/UI/Web.pm, httemplate/browse/agent.cgi,
+ * Changes.1.5.8, FS/FS/agent.pm, FS/FS/cust_pkg.pm,
+ FS/FS/cust_svc.pm, FS/FS/UI/Web.pm, httemplate/browse/agent.cgi,
httemplate/search/cust_pay.cgi, httemplate/search/cust_pkg.cgi,
httemplate/search/elements/search.html: move cust_pkg search to
new template, add active/suspended/cancelled customer packages to
@@ -18867,6 +20311,11 @@
* httemplate/search/cust_credit.html: fix credit searches by otaker
+2005-08-04 01:39 ivan
+
+ * httemplate/docs/install.html: add IPC::Run3 and instructions for
+ adding fs_queue and fs_selfservice users to install docs
+
2005-08-03 18:42 ivan
* Makefile: don't use install -D flag, doesn't work on bsd
@@ -18912,7 +20361,7 @@
2005-07-14 03:52 ivan
- * FS/MANIFEST, FS/FS/Conf.pm, FS/FS/cust_bill.pm,
+ * Changes.1.5.8, FS/MANIFEST, FS/FS/Conf.pm, FS/FS/cust_bill.pm,
FS/FS/cust_bill_event.pm, FS/FS/cust_credit.pm,
FS/FS/cust_main.pm, FS/FS/cust_main_Mixin.pm, FS/FS/cust_pay.pm,
FS/FS/svc_Common.pm, FS/FS/UI/Web.pm, FS/t/cust_main_Mixin.t,
@@ -18927,11 +20376,16 @@
configuration value to control which customer fields are shown on
reports
+2005-07-12 04:54 ivan
+
+ * README.1.5.7: add alternative for very old Pg
+
2005-07-12 02:31 ivan
- * httemplate/browse/part_pkg.cgi: <rjbs> More of the same: these
- patches make it safer to subclass FS::part_pkg's pkg_svc method
- by eliminating qsearches on table pkg_svc.
+ * httemplate/: browse/part_pkg.cgi, view/cust_pkg.cgi: <rjbs> More
+ of the same: these patches make it safer to subclass
+ FS::part_pkg's pkg_svc method by eliminating qsearches on table
+ pkg_svc.
2005-07-12 02:22 ivan
@@ -18958,18 +20412,30 @@
2005-07-11 05:53 ivan
- * httemplate/docs/index.html: note alternate instructions for
- 0pre6->7
+ * httemplate/docs/: index.html, upgrade10.html: note alternate
+ instructions for 0pre6->7
+
+2005-07-11 05:39 ivan
+
+ * Changelog, Changes.1.5.7: s/ANNOUNCE/Changelog/
2005-07-11 05:22 ivan
* bin/postfix.export: fix regex
+2005-07-11 05:22 ivan
+
+ * httemplate/browse/queue.cgi: template
+
2005-07-11 05:21 ivan
* Makefile: probably best to keep RT disabled by default, at least
for this release
+2005-07-11 05:09 ivan
+
+ * ANNOUNCE.1.5: last bits
+
2005-07-11 03:58 ivan
* FS/t/ClientAPI_SessionCache.t:
@@ -19013,6 +20479,10 @@
* FS/bin/freeside-daily: fix bug with new efficient
customer-finding code. sql isn't perl, null != 0
+2005-07-05 14:46 ivan
+
+ * httemplate/docs/install-rt.html: tyop
+
2005-06-30 06:32 ivan
* FS/FS/Misc.pm: pod error
@@ -19026,6 +20496,10 @@
* FS/FS/cust_main.pm: oops, really fix error with new prepaid card
foo
+2005-06-21 20:54 ivan
+
+ * httemplate/docs/upgrade10.html: add IPC::Run3 to install docs
+
2005-06-16 22:31 ivan
* httemplate/misc/process/link.cgi: fix preference sort order for
@@ -19046,8 +20520,8 @@
2005-06-14 21:46 ivan
- * FS/FS/cust_bill.pm: better error reporting for actual errors from
- lpr command
+ * README.1.5.7, FS/FS/cust_bill.pm: better error reporting for
+ actual errors from lpr command
2005-06-14 19:31 ivan
@@ -19201,10 +20675,10 @@
FS/FS/part_pkg.pm, httemplate/view/cust_bill.cgi,
FS/bin/freeside-queued, httemplate/search/elements/search.html,
httemplate/elements/progress-init.html,
- httemplate/elements/progress-popup.html, htetc/handler.pl: add
- ability to search on a date range of invoice events and then
- reprint or reemail (boy was that a bit more work than i
- expected), closes: Bug#946
+ httemplate/elements/progress-popup.html, htetc/global.asa,
+ htetc/handler.pl: add ability to search on a date range of
+ invoice events and then reprint or reemail (boy was that a bit
+ more work than i expected), closes: Bug#946
2005-06-01 17:02 ivan
@@ -19379,10 +20853,18 @@
* httemplate/search/cust_bill.html: align
+2005-05-14 13:11 ivan
+
+ * README.1.5.7.lastbit: hmm virtual fields have no history?
+
+2005-05-14 13:11 ivan
+
+ * README.1.5.7: 0.26
+
2005-05-14 12:57 ivan
- * rt/lib/RT/URI/: freeside.pm, freeside/Internal.pm: fixup RT
- integration grr!
+ * README.1.5.7, rt/lib/RT/URI/freeside.pm,
+ rt/lib/RT/URI/freeside/Internal.pm: fixup RT integration grr!
2005-05-14 11:03 ivan
@@ -19405,9 +20887,10 @@
2005-05-14 09:27 ivan
- * FS/FS/Conf.pm, FS/FS/Misc.pm, FS/FS/cust_bill.pm,
+ * ANNOUNCE.1.5, FS/FS/Conf.pm, FS/FS/Misc.pm, FS/FS/cust_bill.pm,
FS/FS/part_bill_event.pm, conf/invoice_html, conf/logo.png,
- httemplate/view/cust_bill.cgi: html invoices!
+ httemplate/docs/billing.html, httemplate/view/cust_bill.cgi: html
+ invoices!
http://chris-linfoot.net/d6plinks/CWLT-5VZD4Y
http://www.dsv.su.se/~jpalme/ietf/mhtml.html
@@ -19470,9 +20953,10 @@
2005-05-03 17:40 ivan
- * conf/invoice_latex, conf/invoice_latexfooter, conf/logo.eps,
- FS/FS/Conf.pm, FS/FS/cust_bill.pm: great new invoice template
- from kristian!
+ * conf/invoice_latex, conf/invoice_latexfooter,
+ conf/invoice_latexreturnaddress, conf/logo.eps,
+ httemplate/docs/billing.html, FS/FS/Conf.pm, FS/FS/cust_bill.pm:
+ great new invoice template from kristian!
2005-05-03 10:22 ivan
@@ -19484,6 +20968,10 @@
* FS/bin/: freeside-addoutsource, freeside-addoutsourceuser: remove
unnecessary host=localhost from outsource instance creation foo
+2005-05-03 05:56 ivan
+
+ * README.1.5.7: fix some wrapping
+
2005-05-03 02:56 ivan
* FS/FS/cust_pay.pm: on receipts, show "Electronic Check" instead
@@ -19560,12 +21048,22 @@
* FS/FS/: svc_acct.pm, part_export/acct_sql.pm: add vpopmail
defaults to acct_sql export
+2005-04-19 10:25 ivan
+
+ * README.1.5.7: update pre6 -> 7 upgrade instructions too
+
2005-04-19 02:50 ivan
* FS/FS/Conf.pm: disable RT_Libs for now
2005-04-19 02:48 ivan
+ * httemplate/docs/install.html, httemplate/docs/upgrade10.html,
+ ANNOUNCE.1.5, README.1.5.7.lastbit, SCHEMA_CHANGE: did another
+ upgrade, fixed up the instructions
+
+2005-04-19 02:48 ivan
+
* FS/FS/part_pkg.pm: silence an annoying but harmless perl warning
2005-04-18 00:37 ivan
@@ -19642,6 +21140,11 @@
* FS/FS/: h_cust_svc.pm, h_svc_forward.pm: No need to inflict
debugging messages on everyone.
+2005-04-10 06:01 ivan
+
+ * httemplate/docs/selfservice.html: add apache snippet to
+ self-service install docs
+
2005-04-10 03:16 ivan
* httemplate/search/elements/search.html: add some left and right
@@ -19659,16 +21162,20 @@
2005-04-07 03:35 ivan
- * Makefile, htetc/freeside-rt.conf: add install/debian/3.1/INSTALL
- script and script up some apache automation assuming a conf.d
- type dir
+ * Makefile, htetc/freeside-base.conf, htetc/freeside-rt.conf: add
+ install/debian/3.1/INSTALL script and script up some apache
+ automation assuming a conf.d type dir
2005-04-07 02:26 ivan
- * FS/FS/Record.pm, FS/bin/freeside-setup, bin/fix-sequences: depend
- on DBIx::DBSchema 0.26 for dbdef-create (for Pg 'public' schema
- fix) and 0.25 in freeside-setup and Record.pm (for DBD::Pg 1.40
- is bunk fix)
+ * FS/FS/Record.pm, FS/bin/freeside-setup, bin/dbdef-create,
+ bin/fix-sequences: depend on DBIx::DBSchema 0.26 for dbdef-create
+ (for Pg 'public' schema fix) and 0.25 in freeside-setup and
+ Record.pm (for DBD::Pg 1.40 is bunk fix)
+
+2005-04-06 23:08 ivan
+
+ * README.1.5.7.lastbit: and the history tables
2005-04-06 20:28 khoff
@@ -19676,6 +21183,11 @@
current (non-history) records in place of missing history
records.
+2005-04-06 18:29 ivan
+
+ * httemplate/docs/upgrade8.html: ancient upgrade fix, oops. thanks
+ Rick Harby <rharby at caarnet.com>
+
2005-04-06 15:52 ivan
* FS/FS/svc_forward.pm: and fix the error msg haha
@@ -19685,6 +21197,11 @@
* FS/FS/svc_forward.pm: looks like a domain part for a
literally-specified forward src or dst is required, not optional
+2005-04-06 03:38 ivan
+
+ * httemplate/docs/install-rt.html: correct links to some
+ atypically-named CPAN distributions
+
2005-04-05 17:50 khoff
* FS/FS/h_Common.pm: $pkey should be the primary key of the real
@@ -19701,11 +21218,11 @@
2005-04-02 14:46 ivan
- * FS/FS/cust_bill_pkg.pm, FS/FS/part_svc_router.pm,
- FS/FS/pkg_svc.pm, FS/FS/rate_detail.pm, FS/FS/reg_code_pkg.pm,
- FS/FS/type_pkgs.pm, FS/bin/freeside-setup,
- httemplate/docs/schema.html: herding elephants: add primary keys
- to *all* tables for slony
+ * README.1.5.7, README.1.5.7.lastbit, FS/FS/cust_bill_pkg.pm,
+ FS/FS/part_svc_router.pm, FS/FS/pkg_svc.pm, FS/FS/rate_detail.pm,
+ FS/FS/reg_code_pkg.pm, FS/FS/type_pkgs.pm, FS/bin/freeside-setup,
+ httemplate/docs/schema.html, httemplate/docs/upgrade10.html:
+ herding elephants: add primary keys to *all* tables for slony
2005-04-02 12:34 ivan
@@ -19740,6 +21257,10 @@
* bin/add-history-records.pl: Printing insert statements is not
necessary
+2005-03-30 21:02 khoff
+
+ * httemplate/docs/upgrade10.html: Very annoying typo. >:-)
+
2005-03-30 19:47 khoff
* bin/add-history-records.pl: Committing the inserts helps.
@@ -19777,6 +21298,12 @@
* FS/FS/part_export/cp.pm: according to landel CP no longer
supports changing username
+2005-03-29 17:32 ivan
+
+ * httemplate/docs/selfservice.html: separate out referring customer
+ info to optional section, add a note on setting the agentnum via
+ templte
+
2005-03-29 17:18 ivan
* httemplate/search/cust_pay.cgi: fix ambiguous column error when
@@ -19784,9 +21311,10 @@
2005-03-29 14:41 ivan
- * fs_selfservice/FS-SelfService/SelfService.pm: better self-service
- debugging, don't point to install.html for suEXEC/setuid in
- self-service setup docs
+ * fs_selfservice/FS-SelfService/SelfService.pm,
+ httemplate/docs/selfservice.html: better self-service debugging,
+ don't point to install.html for suEXEC/setuid in self-service
+ setup docs
2005-03-28 17:40 khoff
@@ -19809,6 +21337,21 @@
child_objects can now set an alternate field for the svcnum, for
things like forwards
+2005-03-22 20:16 ivan
+
+ * httemplate/docs/install-rt.html, README.1.5.7: new RT requires
+ Tree::Simple too
+
+2005-03-22 18:59 ivan
+
+ * README.1.5.7, httemplate/docs/install-rt.html: add HTML::Scrubber
+ to rt install/upgrade docs
+
+2005-03-22 10:15 ivan
+
+ * httemplate/docs/upgrade10.html: small fix for indices in upgrade
+ instructions, found by s5
+
2005-03-21 14:13 khoff
* FS/FS/Conf.pm, FS/FS/Misc.pm, FS/FS/cust_bill.pm,
@@ -19817,7 +21360,7 @@
FS/FS/ClientAPI/MyAccount.pm, FS/FS/part_export/http.pm,
FS/FS/part_export/infostreet.pm,
FS/FS/part_export/shellcommands.pm, htetc/handler.pl,
- httemplate/edit/cust_main.cgi,
+ httemplate/docs/install.html, httemplate/edit/cust_main.cgi,
httemplate/edit/process/cust_main.cgi,
httemplate/misc/fax-invoice.cgi, httemplate/view/cust_bill.cgi,
httemplate/view/cust_main/billing.html,
@@ -19842,9 +21385,10 @@
2005-03-18 11:21 pbowen
- * FS/: FS/Conf.pm, FS/Record.pm, FS/cust_bill.pm, FS/cust_main.pm,
- bin/freeside-setup: Added encrypted fields for Credit Cards,
- etc... - PB
+ * FS/FS/Conf.pm, FS/FS/Record.pm, FS/FS/cust_bill.pm,
+ FS/FS/cust_main.pm, FS/bin/freeside-setup,
+ httemplate/docs/upgrade10.html: Added encrypted fields for Credit
+ Cards, etc... - PB
2005-03-18 11:15 pbowen
@@ -19856,6 +21400,10 @@
* FS/FS/Record.pm: Fixed a small bug... if replace is called by
SUPER, @_ == 1 if it only contains an undef. -PB
+2005-03-18 01:58 ivan
+
+ * httemplate/docs/selfservice.html: selfservice uses HTML::Entities
+
2005-03-18 01:15 ivan
* FS/FS/cust_main_county.pm: no idea why this is only showing up on
@@ -19869,14 +21417,19 @@
* FS/FS/cust_bill.pm: Documentation tyop.
+2005-03-17 13:45 ivan
+
+ * httemplate/docs/install-rt.html: Freeside side uses MIME-tools
+ now
+
2005-03-17 13:41 khoff
* FS/FS/Conf.pm, FS/FS/Misc.pm, FS/FS/cust_bill.pm,
- httemplate/misc/email-invoice.cgi: Added options
- invoice_email_pdf and invoice_email_pdf_note. invoice_email_pdf
- - Attach PDF invoice to emailed plain text invoices.
- invoice_email_pdf_note - Replace plain text invoice with this
- note, when attaching a PDF.
+ httemplate/docs/install.html, httemplate/misc/email-invoice.cgi:
+ Added options invoice_email_pdf and invoice_email_pdf_note.
+ invoice_email_pdf - Attach PDF invoice to emailed plain text
+ invoices. invoice_email_pdf_note - Replace plain text invoice
+ with this note, when attaching a PDF.
2005-03-16 03:31 ivan
@@ -19903,7 +21456,8 @@
2005-03-12 08:07 ivan
- * Makefile, rt/etc/RT_SiteConfig.pm, rt/lib/RT/URI/freeside.pm,
+ * Makefile, httemplate/docs/install-rt.html,
+ rt/etc/RT_SiteConfig.pm, rt/lib/RT/URI/freeside.pm,
rt/lib/RT/URI/freeside/Internal.pm,
rt/lib/RT/URI/freeside/XMLRPC.pm: popurl(3) won't give us a good
freeside base url since RT calls it from multiple directory
@@ -19919,8 +21473,10 @@
2005-03-12 06:31 ivan
- * httemplate/docs/schema.html, FS/FS/agent.pm, FS/FS/cust_main.pm,
- FS/FS/cust_pay.pm, FS/FS/prepay_credit.pm, FS/bin/freeside-setup,
+ * httemplate/docs/schema.html, httemplate/docs/selfservice.html,
+ httemplate/docs/upgrade10.html, README.1.5.7, ANNOUNCE.1.5,
+ FS/FS/agent.pm, FS/FS/cust_main.pm, FS/FS/cust_pay.pm,
+ FS/FS/prepay_credit.pm, FS/bin/freeside-setup,
httemplate/view/cust_main/payment_history.html,
httemplate/index.html, httemplate/browse/agent.cgi,
httemplate/edit/prepay_credit.cgi,
@@ -19942,11 +21498,11 @@
fs_selfservice/FS-SelfService/cgi/signup.cgi,
fs_selfservice/FS-SelfService/cgi/signup.html,
fs_selfservice/FS-SelfService/cgi/stateselect.html,
- fs_selfservice/FS-SelfService/cgi/success.html, htetc/handler.pl:
- - bring prepaid support into this century (close: Bug#1124) -
- finally get rid of fs_signup (everything is in fs_selfservice
- now) (Bug#413) - organize main menu sysadmin section so it is
- slightly less confusing
+ fs_selfservice/FS-SelfService/cgi/success.html, htetc/global.asa,
+ htetc/handler.pl: - bring prepaid support into this century
+ (close: Bug#1124) - finally get rid of fs_signup (everything is
+ in fs_selfservice now) (Bug#413) - organize main menu sysadmin
+ section so it is slightly less confusing
2005-03-11 02:35 ivan
@@ -19956,6 +21512,10 @@
* rt/etc/RT_SiteConfig.pm: merging
+2005-03-11 02:18 ivan
+
+ * httemplate/docs/install-rt.html: note about RT_External
+
2005-03-10 17:34 khoff
* rt/: etc/RT_SiteConfig.pm, html/Elements/Header,
@@ -19974,6 +21534,22 @@
* FS/FS/XMLRPC.pm: Add the ability to do freeside configuration
lookups through the XMLRPC interface.
+2005-03-10 07:33 ivan
+
+ * README.1.5.7, httemplate/docs/install.html,
+ httemplate/docs/upgrade10.html: arg
+
+2005-03-10 07:18 ivan
+
+ * README.1.5.7, httemplate/docs/install.html,
+ httemplate/docs/upgrade10.html: add Frontier::RPC to docs too
+
+2005-03-10 04:06 ivan
+
+ * README.1.5.7, httemplate/docs/install.html,
+ httemplate/docs/upgrade10.html: add IO-stringy (IO::Scalar) to
+ instructions
+
2005-03-10 01:56 ivan
* FS/bin/freeside-daily: fine.
@@ -19984,9 +21560,16 @@
package editing problem with extraneous services showing up,
closes: Bug#1170
+2005-03-09 00:46 ivan
+
+ * httemplate/docs/install-rt.html: add complete apache config
+ instructions for RT, closes: Bug#1031
+
2005-03-09 00:18 ivan
- * httemplate/docs/index.html: preliminary RT docs
+ * ANNOUNCE.1.5, httemplate/docs/index.html,
+ httemplate/docs/install-rt.html, httemplate/docs/install.html:
+ preliminary RT docs
2005-03-08 10:37 khoff
@@ -20000,6 +21583,10 @@
* FS/FS/XMLRPC.pm: Minor re-work to allow for pseudo methods, like
'version', and eventually config look-ups (next commit).
+2005-03-06 02:15 ivan
+
+ * ANNOUNCE.1.5: d
+
2005-03-05 19:25 ivan
* httemplate/search/elements/search.html: specity an explicit EOL
@@ -20012,19 +21599,27 @@
2005-03-05 19:04 ivan
- * httemplate/search/elements/search.html, htetc/handler.pl,
- httemplate/index.html, httemplate/search/cust_bill.html,
+ * httemplate/search/elements/search.html, README.1.5.7,
+ htetc/global.asa, htetc/handler.pl, httemplate/index.html,
+ httemplate/docs/install.html, httemplate/docs/upgrade10.html,
+ httemplate/search/cust_bill.html,
httemplate/search/cust_bill_event.html,
httemplate/search/cust_credit.html,
httemplate/search/cust_main-otaker.cgi,
+ httemplate/search/cust_main-payinfo.html,
+ httemplate/search/cust_main-quickpay.html,
httemplate/search/cust_main.cgi,
httemplate/search/cust_main.html, httemplate/search/cust_pay.cgi,
+ httemplate/search/cust_pay.html,
+ httemplate/search/cust_pkg_report.cgi,
httemplate/search/reg_code.html,
httemplate/search/report_cust_credit.html,
httemplate/search/report_cust_pay.html,
httemplate/search/report_prepaid_income.html,
httemplate/search/report_tax.html,
- httemplate/search/sqlradius.html, httemplate/search/svc_www.cgi,
+ httemplate/search/sqlradius.html,
+ httemplate/search/svc_acct.html,
+ httemplate/search/svc_domain.html, httemplate/search/svc_www.cgi,
httemplate/view/cust_bill-pdf.cgi,
httemplate/view/cust_bill-ps.cgi: add Excel and CSV download of
templated reports and clean up their HTML formatting, closes;
@@ -20048,7 +21643,7 @@
httemplate/search/cust_credit.html,
httemplate/search/cust_pay.cgi,
httemplate/search/report_cust_credit.html,
- httemplate/search/report_cust_pay.html,
+ httemplate/search/report_cust_pay.html, ANNOUNCE.1.5,
httemplate/search/elements/search.html: add agent selection to
payment and credit reports, add link to agent browse, closes:
Bug#1105
@@ -20101,9 +21696,9 @@
2005-03-02 13:00 khoff
- * eg/xmlrpc-example.pl, httemplate/misc/xmlrpc.cgi,
- FS/FS/XMLRPC.pm, htetc/handler.pl: Initial version of the xmlrpc
- interface for freeside.
+ * httemplate/docs/install.html, eg/xmlrpc-example.pl,
+ httemplate/misc/xmlrpc.cgi, FS/FS/XMLRPC.pm, htetc/handler.pl:
+ Initial version of the xmlrpc interface for freeside.
2005-03-01 16:47 ivan
@@ -20131,6 +21726,11 @@
* FS/FS/Record.pm: fix replacement in edge case with NULL integer
fields in a table without a primary key
+2005-02-26 13:29 ivan
+
+ * README.1.5.7, ANNOUNCE.1.5, ANNOUNCE.1.5.0, README.1.5.0pre7:
+ less cracktastic version numbering
+
2005-02-25 14:14 ivan
* bin/pg-readonly: try to set the sequences right for modern Pg
@@ -20158,6 +21758,10 @@
FS/FS/part_svc.pm: add progressbar to service definition add -
duplicate checking can take a while, closes: Bug#1126
+2005-02-22 22:43 ivan
+
+ * httemplate/docs/install.html: update docs wrt mysql support
+
2005-02-22 10:26 khoff
* httemplate/edit/cust_pkg.cgi: Alphabetize/clean-up package list
@@ -20173,9 +21777,10 @@
httemplate/elements/jsrsServer.html,
httemplate/elements/overlibmws.js,
httemplate/elements/progress-init.html,
- httemplate/elements/progress-popup.html: use a javascript layer
- instead of a browser popup (popup blockers), really generalize
- the progressbar code to make it easy to use as a component
+ httemplate/elements/progress-popup.html,
+ httemplate/misc/progress.html: use a javascript layer instead of
+ a browser popup (popup blockers), really generalize the
+ progressbar code to make it easy to use as a component
2005-02-17 00:44 ivan
@@ -20209,10 +21814,10 @@
2005-02-10 22:44 ivan
- * FS/FS/rate.pm, FS/FS/UI/Web.pm, htetc/handler.pl,
- httemplate/edit/process/rate.cgi, httemplate/edit/rate.cgi:
- generalize progressbar code in preparation for using it wherever
- needed
+ * FS/FS/rate.pm, FS/FS/UI/Web.pm, htetc/global.asa,
+ htetc/handler.pl, httemplate/edit/process/rate.cgi,
+ httemplate/edit/rate.cgi: generalize progressbar code in
+ preparation for using it wherever needed
2005-02-08 17:08 ivan
@@ -20224,15 +21829,16 @@
2005-02-08 12:22 ivan
- * FS/bin/freeside-setup, FS/FS.pm, FS/MANIFEST,
+ * FS/bin/freeside-setup, httemplate/docs/upgrade10.html,
+ README.1.5.0pre7, FS/FS.pm, FS/MANIFEST,
FS/FS/ClientAPI_SessionCache.pm, FS/FS/Conf.pm,
FS/FS/clientapi_session.pm, FS/FS/clientapi_session_field.pm,
FS/FS/ClientAPI/Agent.pm, FS/FS/ClientAPI/MyAccount.pm,
FS/FS/ClientAPI/Signup.pm, FS/t/ClientAPI_SessionCache.t,
FS/t/clientapi_session.t, FS/t/clientapi_session_field.t,
- httemplate/docs/schema.html: make self-service session cache
- module configurable, start framework for in-database session
- cache
+ httemplate/docs/install.html, httemplate/docs/schema.html: make
+ self-service session cache module configurable, start framework
+ for in-database session cache
2005-02-05 15:39 ivan
@@ -20256,6 +21862,15 @@
* httemplate/edit/cust_main.cgi: typo
+2005-02-02 00:06 ivan
+
+ * FS/FS/UI/: Base.pm, CGI.pm, Gtk.pm, agent.pm: removing old UI
+ experiment
+
+2005-01-29 04:51 ivan
+
+ * ANNOUNCE.1.5.0: gotta do pre7 already
+
2005-01-29 04:49 ivan
* httemplate/browse/agent.cgi, FS/FS/part_pkg/flat.pm: oops, last
@@ -20265,9 +21880,11 @@
* FS/FS.pm, FS/FS/agent.pm, FS/FS/cust_pkg.pm, FS/FS/part_pkg.pm,
FS/FS/reg_code.pm, FS/FS/reg_code_pkg.pm, FS/bin/freeside-setup,
- FS/t/reg_code.t, FS/t/reg_code_pkg.t, FS/MANIFEST,
- FS/FS/ClientAPI/Signup.pm, httemplate/docs/schema.html,
- httemplate/edit/reg_code.cgi, httemplate/search/reg_code.html,
+ FS/t/reg_code.t, FS/t/reg_code_pkg.t, README.1.5.0pre7,
+ FS/MANIFEST, FS/FS/ClientAPI/Signup.pm,
+ httemplate/docs/install.html, httemplate/docs/schema.html,
+ httemplate/docs/upgrade10.html, httemplate/edit/reg_code.cgi,
+ httemplate/search/reg_code.html,
httemplate/edit/process/reg_code.cgi: registration codes
2005-01-27 15:01 ivan
@@ -20282,8 +21899,9 @@
2005-01-27 02:21 ivan
* httemplate/edit/process/rate.cgi, CREDITS, FS/FS/UID.pm,
- FS/FS/queue.pm, FS/FS/rate.pm, httemplate/elements/jsrsClient.js,
- FS/bin/freeside-queued, httemplate/edit/rate.cgi,
+ FS/FS/queue.pm, FS/FS/rate.pm, httemplate/docs/install.html,
+ httemplate/elements/jsrsClient.js, httemplate/misc/progress.html,
+ JSRS-LICENSE, FS/bin/freeside-queued, httemplate/edit/rate.cgi,
httemplate/elements/qlib/box.js,
httemplate/elements/qlib/boxctrl.js,
httemplate/elements/qlib/boxres.js,
@@ -20403,6 +22021,18 @@
* FS/FS/: cust_svc.pm, svc_acct.pm, part_pkg/voip_sqlradacct.pm:
fix up some bugs in VoIP rating
+2004-12-30 15:47 ivan
+
+ * htetc/global.asa: search the current dir *first*, otherwise some
+ weird Apache::ASP bugs could crop up if things are ever named the
+ same
+
+2004-12-30 01:59 ivan
+
+ * htetc/global.asa: kludge to fix nested includes with
+ Apache::ASP... dunno how much longer i want to support that,
+ should just switch to Mason
+
2004-12-29 17:41 ivan
* FS/FS/: cust_svc.pm, domain_record.pm, Report/Table/Monthly.pm:
@@ -20423,14 +22053,19 @@
FS/t/h_svc_acct.t, FS/t/h_svc_broadband.t, FS/t/h_svc_domain.t,
FS/t/h_svc_external.t, FS/t/h_svc_forward.t, FS/t/h_svc_www.t,
httemplate/view/cust_main.cgi,
- httemplate/view/cust_main/packages.html: historical (immutable)
- invoice details about services and other history infrastructure
+ httemplate/view/cust_main/packages.html, ANNOUNCE.1.5.0:
+ historical (immutable) invoice details about services and other
+ history infrastructure
2004-12-28 15:30 ivan
* FS/FS/part_export/sqlradius.pm: add debug flag to sqlradius
export
+2004-12-27 02:23 ivan
+
+ * ANNOUNCE.1.5.0: note integrated rt is updated
+
2004-12-27 02:19 ivan
* FS/FS/: cust_pay.pm, cust_credit.pm: prevent unsuspension errors
@@ -20478,11 +22113,14 @@
2004-12-23 00:32 ivan
- * FS/bin/freeside-setup: allow NULL zip in some countries
+ * README.1.5.0pre7, FS/bin/freeside-setup,
+ httemplate/docs/upgrade10.html: allow NULL zip in some countries
2004-12-23 00:00 ivan
- * FS/bin/freeside-setup: going with 6 digit misnamed "npa" for now
+ * README.1.5.0pre7, FS/bin/freeside-setup,
+ httemplate/docs/upgrade10.html: going with 6 digit misnamed "npa"
+ for now
2004-12-23 00:00 ivan
@@ -20544,6 +22182,11 @@
* Makefile: add init script enable command in deb and redhat
+2004-12-18 15:32 ivan
+
+ * httemplate/docs/: billing.html, install.html: add info about
+ teTeX and Ghostscript
+
2004-12-18 02:52 ivan
* httemplate/index.html: fix spelling
@@ -20553,6 +22196,11 @@
* FS/FS/Conf.pm, httemplate/index.html: add config option for
address2 search, closes: Bug#1022
+2004-12-12 10:51 ivan
+
+ * httemplate/view/cust_main/quick-charge.html: fix form action url
+ for template
+
2004-12-12 00:34 ivan
* FS/FS/cust_main.pm: fix customer status display for some cases
@@ -20562,6 +22210,10 @@
* FS/FS/part_export/acct_sql.pm: finish modification
+2004-12-11 14:50 ivan
+
+ * httemplate/docs/install.html: update install doc
+
2004-12-11 12:41 ivan
* FS/FS/cust_bill.pm, FS/FS/part_bill_event.pm,
@@ -20571,10 +22223,16 @@
2004-12-10 23:50 ivan
* FS/FS/Conf.pm, httemplate/view/cust_main.cgi,
+ httemplate/view/cust_main/order_pkg.html,
httemplate/view/cust_main/packages.html,
- httemplate/view/cust_main/payment_history.html: voiding of echeck
+ httemplate/view/cust_main/payment_history.html,
+ httemplate/view/cust_main/quick-charge.html: voiding of echeck
payments instead of refunds
+2004-12-10 15:51 ivan
+
+ * httemplate/docs/selfservice.html: correct path to selfservice
+
2004-12-10 14:28 ivan
* FS/FS/CGI.pm: ui tweak for small customer view - line up billing
@@ -20743,98 +22401,44 @@
* htetc/handler.pl: landing rt 3.2.2
-2004-12-03 12:51 ivan
+2004-12-03 13:23 ivan
- * rt/: html/Elements/Footer, html/Elements/Header,
- html/Elements/PageLayout, html/Elements/SimpleSearch,
- html/Elements/Tabs, html/Ticket/Elements/ShowSummary,
- html/Ticket/Elements/Tabs, sbin/rt-setup-database.in: landing rt
- 3.2.2
+ * README.1.5.0pre7: landing RT 3.2.2
-2004-12-03 12:40 ivan
+2004-12-03 12:51 ivan
- * rt/: lib/RT/I18N/fi.po, lib/RT/I18N/zh_cn.po,
- lib/RT/Action/AutoOpen.pm, lib/RT/Action/Autoreply.pm,
- lib/RT/Action/CreateTickets.pm, lib/RT/Action/Notify.pm,
- lib/RT/Action/RecordCorrespondence.pm,
- lib/RT/Action/ResolveMembers.pm, lib/RT/Action/Generic.pm,
- lib/RT/Action/SetPriority.pm, lib/RT/Action/UserDefined.pm,
- lib/RT/Action/EscalatePriority.pm,
- lib/RT/Action/NotifyAsComment.pm, lib/RT/Action/RecordComment.pm,
- lib/RT/Action/SendEmail.pm, lib/RT/URI/fsck_com_rt.pm,
- lib/RT/Interface/CLI.pm, lib/RT/Interface/Email.pm,
- lib/RT/URI/base.pm, lib/RT/Interface/REST.pm,
- lib/RT/Interface/Web.pm, lib/RT/Interface/Email/Auth/GnuPG.pm,
- lib/RT/Interface/Email/Auth/MailFrom.pm,
- lib/RT/Interface/Email/Filter/SpamAssassin.pm,
- lib/RT/Condition/Overdue.pm, lib/RT/Condition/PriorityChange.pm,
- lib/RT/Condition/QueueChange.pm,
- lib/RT/Condition/StatusChange.pm,
- lib/RT/Interface/Web/Handler.pm,
- lib/RT/Search/ActiveTicketsInQueue.pm, lib/RT/Search/FromSQL.pm,
- lib/RT/Search/Generic.pm, lib/RT/Condition/Generic.pm,
- bin/mason_handler.scgi.in, bin/rt-crontool.in,
- bin/standalone_httpd.in, bin/webmux.pl.in,
- lib/RT/Condition/AnyTransaction.pm,
- lib/RT/Condition/BeforeDue.pm, lib/RT/Condition/OwnerChange.pm,
- lib/RT/Condition/PriorityExceeds.pm,
- lib/RT/Condition/UserDefined.pm, bin/mason_handler.fcgi.in,
- bin/mason_handler.svc.in, bin/rt.in, bin/rt-mailgate.in,
- etc/schema.Sybase, etc/acl.Sybase, etc/initialdata,
- etc/schema.Informix, etc/acl.Pg, etc/constraints.mysql,
- etc/schema.SQLite, etc/schema.mysql, etc/drop.Oracle,
- etc/upgrade/3.1.0/acl.Informix, etc/upgrade/3.1.0/acl.Oracle,
- etc/upgrade/3.1.0/acl.Pg, etc/upgrade/3.1.0/acl.SQLite,
- etc/upgrade/3.1.0/acl.mysql, etc/upgrade/3.1.0/content,
- etc/upgrade/3.1.0/schema.Informix,
- etc/upgrade/3.1.0/schema.Oracle, etc/upgrade/3.1.0/schema.Pg,
- etc/upgrade/3.1.0/schema.SQLite, etc/upgrade/3.1.0/schema.mysql,
- etc/upgrade/3.1.15/content, etc/upgrade/3.1.17/content: import rt
- 3.2.2
+ * rt/: config, config.pld, bin/rt-commit-handler.in,
+ etc/upgrade/2.1.71, html/Admin/Elements/ModifyQueue,
+ html/Admin/Elements/ModifyUser, html/Admin/Users/Prefs.html,
+ html/Elements/Footer, html/Elements/Header,
+ html/Elements/PageLayout, html/Elements/ShadedBox,
+ html/Elements/ShadedInputRow, html/Elements/ShadedRow,
+ html/Elements/SimpleSearch, html/Elements/Tabs,
+ html/Elements/ViewUser, html/NoAuth/webrt.css,
+ html/Search/Listing.html, html/Search/Elements/PickRestriction,
+ html/Search/Elements/TicketHeader,
+ html/Search/Elements/TicketHeaderCell,
+ html/Search/Elements/TicketRow, html/Ticket/Elements/EditLinks,
+ html/Ticket/Elements/ShowLink, html/Ticket/Elements/ShowLinks,
+ html/Ticket/Elements/ShowSummary, html/Ticket/Elements/Tabs,
+ sbin/rt-setup-database.in: landing rt 3.2.2
-2004-12-03 12:37 ivan
+2004-12-03 12:40 ivan
- * rt/html/: Ticket/Elements/ShowTransactionAttachments,
- Elements/QuickCreate, Elements/TicketList,
- Elements/CollectionAsTable/Row: Initial revision
+ * rt/etc/upgrade/: 3.1.0/acl.Informix, 3.1.0/acl.Oracle,
+ 3.1.0/acl.Pg, 3.1.0/acl.SQLite, 3.1.0/acl.mysql, 3.1.0/content,
+ 3.1.0/schema.Informix, 3.1.0/schema.Oracle, 3.1.0/schema.Pg,
+ 3.1.0/schema.SQLite, 3.1.0/schema.mysql, 3.1.15/content,
+ 3.1.17/content: Initial revision
2004-12-03 12:37 ivan
- * rt/: UPGRADING, README, Makefile.in, configure, configure.ac,
- Changelog, aclocal.m4, sbin/extract-message-catalog,
- sbin/regression_harness, sbin/factory, sbin/license_tag,
- sbin/rt-test-dependencies.in, sbin/extract_pod_tests,
- html/autohandler, html/index.html, html/l,
- html/Ticket/History.html, html/Ticket/ModifyAll.html,
- html/Ticket/ModifyDates.html, html/Ticket/ModifyPeople.html,
- html/Ticket/Update.html, html/Tools/MyDay.html,
- html/Tools/Offline.html, html/Tools/Elements/Tabs,
- html/Ticket/Modify.html, html/Ticket/ModifyLinks.html,
- html/Ticket/ShowEmailRecord.html,
- html/Ticket/Attachment/dhandler,
- html/Ticket/Elements/LoadTextAttachments,
- html/Ticket/Elements/EditCustomField,
- html/Ticket/Elements/EditWatchers,
- html/Ticket/Elements/ShowDependencies,
- html/Ticket/Elements/ShowMessageHeaders,
- html/Ticket/Elements/ShowPeople,
- html/Ticket/Elements/ShowTransaction,
- html/Ticket/Elements/AddWatchers, html/Ticket/Elements/BulkLinks,
- html/Ticket/Elements/EditPeople, html/Ticket/Elements/ShowDates,
- html/Ticket/Elements/ShowMembers,
- html/Ticket/Elements/ShowMessageStanza,
- html/Ticket/Elements/ShowRequestor,
- html/Ticket/Elements/EditCustomFields,
- html/Ticket/Elements/EditDates,
+ * rt/: html/Tools/MyDay.html, html/Tools/Offline.html,
+ html/Tools/Elements/Tabs, html/Ticket/ShowEmailRecord.html,
+ html/Ticket/Elements/ShowTransactionAttachments,
html/Ticket/Elements/PreviewScrips,
- html/Ticket/Elements/ShowBasics,
- html/Ticket/Elements/ShowCustomFields,
html/Ticket/Elements/ShowGroupMembers,
- html/Ticket/Elements/ShowHistory,
- html/Ticket/Elements/ShowUserEntry,
- html/Ticket/Elements/EditBasics,
- html/Ticket/Elements/FindAttachments,
- html/Ticket/Elements/ShowAttachments, html/Search/Build.html,
+ html/Ticket/Elements/ShowUserEntry, html/Search/Build.html,
html/Search/Edit.html, html/Search/Results.html,
html/Search/Results.rdf, html/Search/Results.tsv,
html/Search/Elements/BuildFormatString,
@@ -20846,152 +22450,34 @@
html/Search/Elements/SelectLinks,
html/Search/Elements/SelectPersonType,
html/Search/Elements/SelectSearchesForObjects,
- html/Approvals/Display.html, html/Approvals/index.html,
- html/Approvals/Elements/PendingMyApproval,
html/Search/Elements/EditFormat, html/Search/Elements/PickBasics,
html/Search/Elements/PickCriteria,
- html/Search/Elements/SelectSearchObject, html/Admin/index.html,
- html/Admin/Groups/GroupRights.html,
- html/Admin/Groups/Modify.html, html/Admin/Groups/UserRights.html,
- html/Admin/Groups/index.html, html/Approvals/Elements/Approve,
- html/Approvals/Elements/ShowDependency,
- html/Approvals/Elements/Tabs, html/Admin/Global/GroupRights.html,
- html/Admin/Global/Templates.html,
- html/Admin/Global/UserRights.html,
- html/Admin/Groups/Members.html,
+ html/Search/Elements/SelectSearchObject,
html/Admin/Tools/Configuration.html, html/Admin/Tools/index.html,
- html/Admin/Global/Scrip.html, html/Admin/Global/Scrips.html,
- html/Admin/Global/Template.html, html/Admin/Global/index.html,
- html/Admin/Queues/CustomField.html,
- html/Admin/Queues/CustomFields.html,
- html/Admin/Queues/GroupRights.html, html/Admin/Queues/Scrip.html,
- html/Admin/Queues/Scrips.html, html/Admin/Queues/Template.html,
- html/Admin/Queues/Templates.html,
- html/Admin/Queues/UserRights.html, html/Admin/Users/index.html,
- html/Admin/Elements/EditCustomField,
- html/Admin/Elements/ListGlobalScrips,
- html/Admin/Elements/SelectCustomFieldType,
- html/Admin/Elements/SelectModifyUser, html/Admin/Elements/Tabs,
- html/Admin/Elements/UserTabs, html/Admin/Queues/Modify.html,
- html/Admin/Queues/People.html, html/Admin/Queues/index.html,
- html/Admin/Elements/EditCustomFieldValues,
- html/Admin/Elements/EditScrip,
- html/Admin/Elements/EditUserComments, html/Admin/Elements/Header,
- html/Admin/Elements/QueueTabs,
- html/Admin/Elements/SelectModifyGroup,
- html/Admin/Elements/SelectSingleOrMultiple,
- html/Admin/Elements/SelectUsers, html/Admin/Elements/ToolTabs,
- html/Admin/Elements/AddCustomFieldValue,
- html/Admin/Elements/EditCustomFields,
- html/Admin/Elements/EditScrips,
- html/Admin/Elements/EditTemplates,
- html/Admin/Elements/ModifyTemplate,
- html/Admin/Elements/SelectGroups,
- html/Admin/Elements/SelectNewGroupMembers,
- html/Admin/Elements/SelectScrip,
- html/Admin/Elements/CreateUserCalled,
- html/Admin/Elements/EditQueueWatchers,
- html/Admin/Elements/GroupTabs,
- html/Admin/Elements/QueueRightsForUser,
- html/Admin/Elements/SelectModifyQueue,
- html/Admin/Elements/SelectRights,
- html/Admin/Elements/SelectScripCondition,
- html/Admin/Elements/SelectStage,
- html/Admin/Elements/SelectTemplate,
- html/Admin/Elements/SystemTabs,
- html/Admin/Elements/ListGlobalCustomFields,
- html/Admin/Elements/SelectScripAction,
- html/SelfService/Closed.html, html/SelfService/Create.html,
- html/SelfService/Display.html, html/SelfService/Error.html,
- html/SelfService/Prefs.html, html/SelfService/Update.html,
- html/SelfService/index.html, html/Elements/BevelBoxRaisedEnd,
- html/Elements/MyRequests, html/Elements/SelectDateType,
- html/Elements/SelectSortOrder, html/Elements/SelectStatus,
- html/Elements/SelectTicketSortBy, html/Elements/ShowLinks,
- html/SelfService/Attachment/dhandler,
- html/SelfService/Elements/GotoTicket,
- html/SelfService/Elements/Header,
- html/SelfService/Elements/MyRequests,
- html/SelfService/Elements/Tabs, html/Elements/Callback,
- html/Elements/EditLinks, html/Elements/ListActions,
- html/Elements/MessageBox, html/Elements/QueryString,
- html/Elements/Refresh, html/Elements/SelectLinkType,
- html/Elements/SelectMatch, html/Elements/Quicksearch,
- html/Elements/SelectUsers, html/Elements/GotoTicket,
- html/Elements/ScrubHTML, html/Elements/Section,
- html/Elements/SelectBoolean, html/Elements/SelectGroups,
- html/Elements/SelectLang, html/Elements/SelectNewTicketQueue,
- html/Elements/SelectQueue, html/Elements/SelectTicketTypes,
- html/Elements/TitleBoxEnd, html/Elements/Checkbox,
- html/Elements/Error, html/Elements/Login,
- html/Elements/SelectAttachmentField,
- html/Elements/SelectCustomFieldOperator,
- html/Elements/SelectOwner, html/Elements/SelectWatcherType,
- html/Elements/SetupSessionCookie, html/Elements/ShowLink,
- html/Elements/Submit, html/Elements/TitleBox,
- html/Elements/BevelBoxRaisedStart, html/Elements/CreateTicket,
- html/Elements/MyTickets, html/Elements/SelectCustomFieldValue,
- html/Elements/SelectDateRelation,
- html/Elements/SelectEqualityOperator,
- html/Elements/SelectResultsPerPage,
+ html/Admin/Elements/ToolTabs, html/Elements/ShowLinks,
+ html/Elements/EditLinks, html/Elements/QuickCreate,
+ html/Elements/ScrubHTML, html/Elements/TicketList,
+ html/Elements/ShowLink, html/Elements/TitleBox,
html/Elements/CollectionAsTable/Header,
html/Elements/CollectionAsTable/ParseFormat,
- html/Elements/RT__Ticket/ColumnMap, html/REST/1.0/autohandler,
- html/REST/1.0/dhandler, html/REST/1.0/logout,
- html/REST/1.0/ticket/merge,
- html/REST/1.0/Forms/ticket/attachments,
- html/REST/1.0/Forms/ticket/links, html/REST/1.0/search/dhandler,
- html/REST/1.0/search/ticket, html/REST/1.0/ticket/comment,
- html/REST/1.0/ticket/link, html/REST/1.0/Forms/queue/default,
- html/REST/1.0/Forms/queue/ns, html/REST/1.0/Forms/ticket/default,
- html/REST/1.0/Forms/ticket/history,
- html/REST/1.0/Forms/user/default, html/REST/1.0/Forms/user/ns,
- html/NoAuth/Logout.html, html/NoAuth/Reminder.html,
- html/NoAuth/images/autohandler,
- html/REST/1.0/NoAuth/mail-gateway, html/User/Delegation.html,
- html/User/Elements/DelegateRights, html/User/Elements/GroupTabs,
- html/User/Elements/Tabs, html/User/Groups/Members.html,
- html/User/Groups/Modify.html, html/User/Groups/index.html,
- lib/RT.pm.in, lib/RT/GroupMembers.pm, lib/RT/Principals.pm,
- lib/RT/Scrips_Overlay.pm, lib/RT/Tickets.pm, lib/RT/Base.pm,
- lib/RT/CustomField_Overlay.pm, lib/RT/Queues_Overlay.pm,
- lib/RT/Date.pm, lib/RT/ScripConditions_Overlay.pm,
- lib/RT/Template_Overlay.pm, lib/RT/Group.pm, lib/RT/User.pm,
- lib/RT/System.pm, lib/RT/Attachment.pm, lib/RT/Attributes.pm,
- lib/RT/Handle.pm, lib/RT/Principals_Overlay.pm,
- lib/RT/Tickets_Overlay_SQL.pm, lib/RT/ACL_Overlay.pm,
- lib/RT/Templates_Overlay.pm, lib/RT/Attribute_Overlay.pm,
- lib/RT/EmailParser.pm, lib/RT/GroupMembers_Overlay.pm,
- lib/RT/Tickets_Overlay.pm, lib/RT/Attributes_Overlay.pm,
- lib/RT/CachedGroupMember.pm, lib/RT/CustomFieldValue.pm,
- lib/RT/Transactions.pm, lib/RT/I18N.pm, lib/RT/Links.pm,
- lib/RT/Queue.pm, lib/RT/Scrip.pm,
- lib/RT/CachedGroupMember_Overlay.pm, lib/RT/CurrentUser.pm,
- lib/RT/Principal.pm, lib/RT/Attachment_Overlay.pm,
- lib/RT/CustomFieldValues.pm, lib/RT/Group_Overlay.pm,
- lib/RT/ACE.pm, lib/RT/ScripActions.pm,
- lib/RT/Transactions_Overlay.pm, lib/RT/Attachments.pm,
- lib/RT/Groups.pm, lib/RT/Principal_Overlay.pm,
- lib/RT/ScripAction.pm, lib/RT/Scrip_Overlay.pm,
- lib/RT/GroupMember.pm, lib/RT/Links_Overlay.pm,
- lib/RT/ScripCondition.pm, lib/RT/Transaction.pm,
- lib/RT/Queue_Overlay.pm, lib/RT/Scrips.pm,
- lib/RT/CachedGroupMembers.pm, lib/RT/CustomField.pm,
- lib/RT/CustomFieldValues_Overlay.pm, lib/RT/CustomFields.pm,
- lib/RT/Link.pm, lib/RT/Queues.pm, lib/RT/ScripActions_Overlay.pm,
- lib/RT/ScripConditions.pm, lib/RT/Template.pm, lib/RT/ACL.pm,
- lib/RT/Attachments_Overlay.pm, lib/RT/ScripAction_Overlay.pm,
- lib/RT/ScripCondition_Overlay.pm, lib/RT/GroupMember_Overlay.pm,
- lib/RT/Ticket.pm, lib/RT/ACE_Overlay.pm, lib/RT/Link_Overlay.pm,
- lib/RT/Templates.pm, lib/RT/Attribute.pm,
- lib/RT/CachedGroupMembers_Overlay.pm,
- lib/RT/CustomFields_Overlay.pm, lib/RT/URI.pm, lib/RT/Users.pm,
- lib/RT/I18N/en.po, lib/RT/I18N/i_default.pm, lib/RT/I18N/cs.pm,
- lib/RT/I18N/cs.po, lib/RT/I18N/pt_br.po, lib/RT/I18N/fr.po,
- lib/RT/I18N/es.po, lib/RT/I18N/nl.po, lib/RT/I18N/hu.po,
- lib/RT/I18N/it.po, lib/RT/I18N/no.po, lib/RT/I18N/da.po,
- lib/RT/I18N/ru.po, lib/RT/I18N/de.po, lib/RT/I18N/ja.po,
- lib/RT/I18N/zh_tw.po, lib/RT/I18N/he.po: import rt 3.2.2
+ html/Elements/CollectionAsTable/Row,
+ html/Elements/RT__Ticket/ColumnMap,
+ html/NoAuth/images/autohandler, lib/t/05cronsupport.pl.in,
+ lib/RT/Attributes.pm, lib/RT/Attribute_Overlay.pm,
+ lib/RT/Attributes_Overlay.pm, lib/RT/Attribute.pm,
+ lib/RT/I18N/en_malkovich.po,
+ lib/RT/Action/RecordCorrespondence.pm,
+ lib/RT/Action/RecordComment.pm,
+ lib/RT/Interface/Email/Auth/GnuPG.pm,
+ lib/RT/Condition/PriorityChange.pm,
+ lib/RT/Interface/Web/Handler.pm, lib/RT/Search/FromSQL.pm,
+ bin/standalone_httpd.in, etc/schema.Sybase, etc/acl.Sybase:
+ Initial revision
+
+2004-12-03 12:27 ivan
+
+ * rt/sbin/: rt-setup-database, rt-test-dependencies: remove
+ autogenerated file
2004-12-02 02:18 ivan
@@ -21012,8 +22498,8 @@
rt/html/Ticket/Elements/ShowCustomers,
rt/html/Ticket/Elements/ShowSummary,
rt/html/Ticket/Elements/Tabs, FS/FS/TicketSystem/RT_Internal.pm,
- FS/FS/TicketSystem/RT_Libs.pm, htetc/handler.pl,
- httemplate/search/cust_main.cgi,
+ FS/FS/TicketSystem/RT_Libs.pm, htetc/global.asa,
+ htetc/handler.pl, httemplate/search/cust_main.cgi,
rt/lib/RT/Interface/Web_Vendor.pm, rt/lib/RT/URI/freeside.pm:
second big RT integration checkin, customer linking/delinking
interface
@@ -21051,7 +22537,8 @@
httemplate/index.html, rt/FREESIDE_MODIFIED,
rt/html/Elements/Footer, rt/html/Elements/Header,
rt/html/Elements/PageLayout, rt/html/Elements/SimpleSearch,
- rt/html/Elements/Tabs, Makefile, FS/FS.pm, htetc/handler.pl,
+ rt/html/Elements/Tabs, ANNOUNCE.1.5.0, Makefile, FS/FS.pm,
+ htetc/global.asa, htetc/handler.pl, rt/html/NoAuth/webrt.css,
rt/html/NoAuth/images/small-logo.png: ticket system integration
framework and skin RT
@@ -21109,11 +22596,12 @@
2004-11-22 10:20 ivan
- * FS/FS/ClientAPI/Signup.pm, FS/bin/freeside-setup,
- httemplate/docs/schema.html, FS/FS/Record.pm, FS/FS/cust_pkg.pm,
- FS/FS/part_pkg.pm, httemplate/edit/cust_main.cgi,
- httemplate/edit/part_pkg.cgi: promo codes and separate signup
- addresses for hdn
+ * README.1.5.0pre7, FS/FS/ClientAPI/Signup.pm,
+ FS/bin/freeside-setup, httemplate/docs/schema.html,
+ httemplate/docs/upgrade10.html, FS/FS/Record.pm,
+ FS/FS/cust_pkg.pm, FS/FS/part_pkg.pm,
+ httemplate/edit/cust_main.cgi, httemplate/edit/part_pkg.cgi:
+ promo codes and separate signup addresses for hdn
2004-11-22 03:11 ivan
@@ -21130,15 +22618,17 @@
* FS/FS/cust_svc.pm, FS/FS/rate.pm, FS/FS/rate_detail.pm,
FS/FS/rate_prefix.pm, FS/FS/rate_region.pm,
FS/t/part_pkg-voip_sqlradacct.t, FS/t/rate.t, FS/t/rate_detail.t,
- FS/t/rate_prefix.t, FS/t/rate_region.t,
+ FS/t/rate_prefix.t, FS/t/rate_region.t, ANNOUNCE.1.5.0,
+ README.1.5.0pre7, SCHEMA_CHANGE,
FS/FS/part_pkg/voip_sqlradacct.pm, FS/bin/freeside-setup,
httemplate/browse/rate.cgi, httemplate/docs/schema.html,
- httemplate/edit/part_pkg.cgi, httemplate/edit/rate.cgi,
- httemplate/edit/rate_region.cgi,
+ httemplate/docs/upgrade10.html, httemplate/edit/part_pkg.cgi,
+ httemplate/edit/rate.cgi, httemplate/edit/rate_region.cgi,
httemplate/edit/process/rate.cgi,
httemplate/edit/process/rate_region.cgi, FS/FS.pm, FS/MANIFEST,
FS/FS/part_export/sqlradius.pm, eg/table_template.pm,
- htetc/handler.pl, httemplate/search/sqlradius.cgi,
+ htetc/global.asa, htetc/handler.pl,
+ httemplate/search/sqlradius.cgi,
httemplate/search/sqlradius.html: first pass at VoIP rating
2004-11-17 05:22 ivan
@@ -21176,63 +22666,12 @@
* rt/sbin/rt-setup-database.in: merge in changes to
rt-setup-database
-2004-11-11 04:13 ivan
+2004-11-11 04:11 ivan
- * rt/: bin/mason_handler.fcgi.in, bin/mason_handler.scgi.in,
- bin/rt.in, bin/rt-crontool.in, bin/webmux.pl.in, etc/acl.mysql:
- import rt 3.0.12
-
-2004-11-11 04:10 ivan
-
- * rt/: Makefile.in, configure, Changelog, configure.ac,
- sbin/rt-test-dependencies.in, html/autohandler, html/index.html,
- html/Ticket/History.html, html/Ticket/ModifyAll.html,
- html/Ticket/Update.html, html/Ticket/ModifyDates.html,
- html/Ticket/ModifyLinks.html,
- html/Ticket/Elements/LoadTextAttachments,
- html/Ticket/Elements/ShowRequestor,
- html/Ticket/Elements/ShowTransaction,
- html/Ticket/Elements/FindAttachments,
- html/Ticket/Elements/ShowAttachments,
- html/Ticket/Elements/ShowDates, html/Ticket/Elements/ShowHistory,
- html/Approvals/index.html, html/Admin/Global/GroupRights.html,
- html/Admin/Global/UserRights.html,
- html/Admin/Groups/GroupRights.html,
- html/Admin/Groups/Members.html, html/Admin/Groups/Modify.html,
- html/Admin/Groups/UserRights.html, html/Admin/Groups/index.html,
- html/Admin/Global/Template.html,
- html/Admin/Queues/GroupRights.html,
- html/Admin/Queues/Modify.html, html/Admin/Queues/Scrip.html,
- html/Admin/Queues/Template.html,
- html/Admin/Queues/UserRights.html,
- html/Admin/Elements/EditCustomField,
- html/Admin/Elements/EditScrip, html/Admin/Elements/EditTemplates,
- html/Admin/Elements/UserTabs,
- html/Admin/Elements/SelectNewGroupMembers,
- html/SelfService/Prefs.html, html/Elements/MyRequests,
- html/SelfService/Display.html, html/Elements/MessageBox,
- html/Elements/QueryString, html/Elements/SelectMatch,
- html/REST/1.0/Forms/ticket/default,
- html/REST/1.0/NoAuth/mail-gateway, html/User/Delegation.html,
- html/User/Groups/Members.html, html/User/Groups/Modify.html,
- lib/RT.pm.in, lib/t/data/rt-send-cc, lib/RT/Template_Overlay.pm,
- lib/RT/Date.pm, lib/RT/StyleGuide.pod,
- lib/RT/Tickets_Overlay_SQL.pm, lib/RT/ACL_Overlay.pm,
- lib/RT/Handle.pm, lib/RT/Templates_Overlay.pm,
- lib/RT/EmailParser.pm, lib/RT/GroupMembers_Overlay.pm,
- lib/RT/Tickets_Overlay.pm, lib/RT/Attachment_Overlay.pm,
- lib/RT/CurrentUser.pm, lib/RT/Principal_Overlay.pm,
- lib/RT/Scrip_Overlay.pm, lib/RT/Queue_Overlay.pm,
- lib/RT/CachedGroupMembers_Overlay.pm, lib/RT/Link_Overlay.pm,
- lib/RT/I18N/cs.po, lib/RT/I18N/pt_br.po, lib/RT/I18N/fr.po,
- lib/RT/I18N/es.po, lib/RT/I18N/nl.po, lib/RT/I18N/hu.po,
- lib/RT/I18N/it.po, lib/RT/I18N/no.po, lib/RT/I18N/da.po,
- lib/RT/I18N/ru.po, lib/RT/I18N/de.po, lib/RT/I18N/ja.po,
- lib/RT/I18N/zh_tw.po, lib/RT/I18N/he.po, lib/RT/I18N/fi.po,
- lib/RT/I18N/zh_cn.po, lib/RT/Action/SendEmail.pm,
- lib/RT/Action/EscalatePriority.pm, lib/RT/Interface/Email.pm,
- lib/RT/Interface/Web.pm, lib/RT/Interface/Email/Auth/MailFrom.pm:
- import rt 3.0.12
+ * rt/: html/Ticket/Elements/LoadTextAttachments,
+ html/Ticket/Elements/FindAttachments, html/Elements/QueryString,
+ lib/t/data/rt-send-cc, lib/RT/I18N/hu.po, lib/RT/I18N/da.po:
+ Initial revision
2004-11-09 03:42 ivan
@@ -21278,14 +22717,27 @@
* bin/rollback: adding in case this is needed again
+2004-11-07 14:58 ivan
+
+ * ANNOUNCE.1.5.0, httemplate/docs/install.html: update install
+ documentation for 1.5 HTML::Mason or Apache::ASP install
+
+2004-10-30 17:01 ivan
+
+ * httemplate/search/cust_main-quickpay.html: quick pay shouldnt
+ default to exact search
+
2004-10-26 05:36 ivan
* Makefile: 1.5.0pre6!
2004-10-26 05:33 ivan
- * httemplate/docs/: index.html, overview-new.dia, overview-new.png,
- schema.html: slightly more up-to-date docs
+ * ANNOUNCE.1.5.0, httemplate/docs/billing.html,
+ httemplate/docs/export.html, httemplate/docs/index.html,
+ httemplate/docs/overview-new.dia,
+ httemplate/docs/overview-new.png, httemplate/docs/schema.html,
+ httemplate/docs/selfservice.html: slightly more up-to-date docs
2004-10-26 05:07 ivan
@@ -21301,9 +22753,9 @@
* FS/FS/CGI.pm, FS/FS/Conf.pm, FS/FS/Record.pm, FS/FS/cust_main.pm,
FS/FS/cust_pkg.pm, FS/FS/part_export.pm, FS/FS/part_pkg.pm,
- FS/FS/part_pkg_option.pm, FS/FS.pm, FS/MANIFEST,
- FS/bin/freeside-setup, FS/t/part_pkg-flat.t,
- FS/t/part_pkg-flat_comission.t,
+ FS/FS/part_pkg_option.pm, ANNOUNCE.1.5.0, README.1.5.0pre6,
+ SCHEMA_CHANGE, FS/FS.pm, FS/MANIFEST, FS/bin/freeside-setup,
+ FS/t/part_pkg-flat.t, FS/t/part_pkg-flat_comission.t,
FS/t/part_pkg-flat_comission_cust.t,
FS/t/part_pkg-flat_comission_pkg.t, FS/t/part_pkg-flat_delayed.t,
FS/t/part_pkg-prorate.t, FS/t/part_pkg-sesmon_hour.t,
@@ -21311,8 +22763,9 @@
FS/t/part_pkg-sql_generic.t, FS/t/part_pkg-sqlradacct_hour.t,
FS/t/part_pkg-subscription.t, FS/t/part_pkg_option.t,
httemplate/browse/part_pkg.cgi, httemplate/docs/schema.html,
- httemplate/edit/part_pkg.cgi, httemplate/view/cust_main.cgi,
- FS/FS/part_pkg/flat.pm, FS/FS/part_pkg/flat_comission.pm,
+ httemplate/docs/upgrade10.html, httemplate/edit/part_pkg.cgi,
+ httemplate/view/cust_main.cgi, FS/FS/part_pkg/flat.pm,
+ FS/FS/part_pkg/flat_comission.pm,
FS/FS/part_pkg/flat_comission_cust.pm,
FS/FS/part_pkg/flat_comission_pkg.pm,
FS/FS/part_pkg/flat_delayed.pm, FS/FS/part_pkg/prorate.pm,
@@ -21432,8 +22885,8 @@
2004-10-18 05:37 ivan
- * httemplate/: index.html, images/small-logo.png: that's right, a
- new logo
+ * httemplate/: index.html, images/mid-logo.png,
+ images/small-logo.png: that's right, a new logo
2004-10-17 07:01 ivan
@@ -21452,15 +22905,16 @@
2004-10-17 02:19 ivan
- * FS/FS/Conf.pm, FS/FS/cust_svc.pm,
- FS/FS/part_export/artera_turbo.pm,
- httemplate/view/svc_external.cgi: add options to adjust UI for
- artera turbo as svc_export
+ * FS/FS/Conf.pm, FS/FS/cust_svc.pm, bin/populate-msgcat,
+ README.1.5.0pre6, FS/FS/part_export/artera_turbo.pm,
+ httemplate/docs/upgrade10.html, httemplate/view/svc_external.cgi:
+ add options to adjust UI for artera turbo as svc_export
2004-10-16 03:15 ivan
- * FS/: FS/Conf.pm, FS/part_export/artera_turbo.pm,
- FS/svc_external.pm, bin/freeside-setup: add artera turbo export
+ * FS/FS/Conf.pm, FS/FS/part_export/artera_turbo.pm,
+ README.1.5.0pre6, FS/FS/svc_external.pm, FS/bin/freeside-setup,
+ httemplate/docs/upgrade10.html: add artera turbo export
2004-10-12 22:46 ivan
@@ -21539,6 +22993,10 @@
in the parent process, this cached the $dbdef and speeds things
up significantly
+2004-10-05 04:38 ivan
+
+ * ANNOUNCE.1.5.0: [no log message]
+
2004-09-22 04:28 ivan
* httemplate/search/: cust_bill_event.html,
@@ -21859,6 +23317,10 @@
* FS/FS/Record.pm: better error message for missing tables
+2004-07-06 10:27 ivan
+
+ * ANNOUNCE.1.5.0: new features
+
2004-07-06 10:26 ivan
* FS/FS/Conf.pm, FS/FS/cust_main.pm, FS/FS/cust_pay.pm,
@@ -21874,14 +23336,16 @@
2004-07-06 06:26 ivan
- * FS/FS.pm, FS/FS/cust_pay.pm, FS/FS/cust_pay_void.pm,
- FS/t/cust_pay_void.t, FS/bin/freeside-setup,
- httemplate/docs/schema.html, httemplate/misc/void-cust_pay.cgi:
- add cust_pay_void table and payment voiding web ui part one
+ * README.1.5.0pre1, README.1.5.0pre6, FS/FS.pm, FS/FS/cust_pay.pm,
+ FS/FS/cust_pay_void.pm, FS/t/cust_pay_void.t,
+ FS/bin/freeside-setup, httemplate/docs/schema.html,
+ httemplate/docs/upgrade10.html,
+ httemplate/misc/void-cust_pay.cgi: add cust_pay_void table and
+ payment voiding web ui part one
2004-07-06 01:43 ivan
- * htetc/handler.pl: 0.32 (and then some) released
+ * htetc/: global.asa, handler.pl: 0.32 (and then some) released
2004-07-01 06:49 ivan
@@ -21938,10 +23402,11 @@
2004-06-28 21:02 ivan
- * FS/FS.pm, FS/MANIFEST, FS/FS/cust_bill_pay.pm,
- FS/FS/cust_credit_bill.pm, FS/FS/cust_credit_refund.pm,
- FS/FS/cust_pay.pm, FS/FS/cust_pay_refund.pm,
- FS/FS/cust_refund.pm, FS/bin/freeside-setup,
+ * ANNOUNCE.1.5.0, README.1.5.0pre6, FS/FS.pm, FS/MANIFEST,
+ FS/FS/cust_bill_pay.pm, FS/FS/cust_credit_bill.pm,
+ FS/FS/cust_credit_refund.pm, FS/FS/cust_pay.pm,
+ FS/FS/cust_pay_refund.pm, FS/FS/cust_refund.pm,
+ FS/bin/freeside-setup, httemplate/docs/upgrade10.html,
httemplate/view/cust_main.cgi, FS/t/cust_pay_refund.t,
httemplate/edit/cust_bill_pay.cgi,
httemplate/edit/process/cust_bill_pay.cgi: add cust_pay_refund
@@ -21986,6 +23451,10 @@
* FS/FS/cust_bill.pm: forgotten space in typeset invoice credit
lines
+2004-06-22 18:23 ivan
+
+ * httemplate/docs/upgrade10.html: escape html
+
2004-06-21 20:12 ivan
* Makefile: snapshot before schema changes
@@ -22033,6 +23502,10 @@
fix: avoid newline prepend fix from borking indented first <%,
fixes customer search by otaker under mason, closes: Bug#830
+2004-06-18 03:07 ivan
+
+ * httemplate/docs/install.html: recommend HTML::Mason
+
2004-06-17 05:32 ivan
* FS/FS/part_export/: www_shellcommands.pm, apache.pm: add
@@ -22049,8 +23522,10 @@
2004-06-15 06:27 ivan
- * fs_selfservice/FS-SelfService/cgi/: passwd.cgi, passwd.html:
- moving passwd cgi to self-service
+ * fs_passwd/fs_passwd.cgi, fs_passwd/fs_passwd.html,
+ fs_selfservice/FS-SelfService/cgi/passwd.cgi,
+ fs_selfservice/FS-SelfService/cgi/passwd.html: moving passwd cgi
+ to self-service
2004-06-15 03:59 ivan
@@ -22077,7 +23552,8 @@
2004-06-11 06:44 ivan
- * httemplate/search/report_tax.cgi: tax report!
+ * FS/bin/freeside-tax-report, httemplate/search/report_tax.cgi: tax
+ report!
2004-06-11 00:37 ivan
@@ -22112,6 +23588,11 @@
* Makefile: need this entry for myself though!
+2004-06-09 00:17 ivan
+
+ * httemplate/docs/install.html: explicitly specify Apache
+ httpd.conf. fear.
+
2004-06-05 05:01 ivan
* Makefile: AND set its owner. whew.
@@ -22231,8 +23712,8 @@
2004-05-26 11:59 ivan
- * FS/FS/cust_bill.pm: require the version of File::Temp with the OO
- interface
+ * FS/FS/cust_bill.pm, httemplate/docs/upgrade-1.4.2.html: require
+ the version of File::Temp with the OO interface
2004-05-26 06:07 ivan
@@ -22361,6 +23842,10 @@
* httemplate/: index.html, search/svc_www.cgi: vary basic virtual
host browse
+2004-05-10 16:16 ivan
+
+ * httemplate/docs/upgrade10.html: fix sequences in upgrade docs?
+
2004-05-10 06:46 ivan
* FS/FS/part_export/shellcommands_withdomain.pm: fix ISPMan
@@ -22457,6 +23942,10 @@
* httemplate/search/cust_bill.html: handle missing customer records
without erroring out
+2004-04-30 20:54 ivan
+
+ * htetc/global.asa: very weird 5.005 problem
+
2004-04-30 14:58 ivan
* FS/FS/Record.pm: accept empty zips for non-US countries...
@@ -22472,16 +23961,22 @@
2004-04-23 06:15 ivan
- * FS/MANIFEST, httemplate/index.html: add link to new credit report
- on main menu, remove old obsolete shell-out reports
+ * FS/MANIFEST, FS/bin/freeside-cc-receipts-report,
+ FS/bin/freeside-credit-report, httemplate/index.html,
+ httemplate/search/report_cc.cgi,
+ httemplate/search/report_cc.html,
+ httemplate/search/report_credit.cgi,
+ httemplate/search/report_credit.html: add link to new credit
+ report on main menu, remove old obsolete shell-out reports
2004-04-23 05:50 ivan
- * Makefile: fix up includes with Apache::ASP
+ * Makefile, htetc/global.asa: fix up includes with Apache::ASP
2004-04-23 05:19 ivan
* FS/FS/cust_credit.pm, FS/FS/Report/Table/Monthly.pm,
+ httemplate/graph/money_time-graph.cgi,
httemplate/graph/money_time.cgi,
httemplate/search/cust_bill.html,
httemplate/search/cust_credit.html,
@@ -22500,6 +23995,10 @@
* httemplate/elements/pager.html: silly pager fix
+2004-04-22 00:27 ivan
+
+ * httemplate/docs/: install.html, upgrade10.html: minor doc updates
+
2004-04-22 00:07 ivan
* httemplate/search/report_cust_credit.html: initial copy from
@@ -22571,6 +24070,14 @@
* Makefile: properly disable RT where not using
+2004-04-09 15:29 ivan
+
+ * fs_passwd/fs_passwd.cgi: oops, this one too
+
+2004-04-09 15:28 ivan
+
+ * fs_passwd/fs_passwd.html: fs_passwd.cgi
+
2004-04-08 05:37 ivan
* Makefile: fix psql command line options for older pg
@@ -22585,14 +24092,14 @@
2004-04-08 05:05 ivan
- * rt/sbin/rt-setup-database.in: remove accidentally doubled lines
- in usage inst
+ * rt/sbin/: rt-setup-database, rt-setup-database.in: remove
+ accidentally doubled lines in usage inst
2004-04-08 05:00 ivan
* Makefile, htetc/handler.pl, rt/FREESIDE_MODIFIED,
- rt/etc/RT_SiteConfig.pm, rt/sbin/rt-setup-database.in: beginning
- of RT integration
+ rt/etc/RT_SiteConfig.pm, rt/sbin/rt-setup-database,
+ rt/sbin/rt-setup-database.in: beginning of RT integration
2004-04-07 22:53 ivan
@@ -22648,7 +24155,8 @@
2004-04-05 02:08 ivan
- * htetc/handler.pl, httemplate/misc/whois.cgi,
+ * htetc/global.asa, htetc/handler.pl, httemplate/docs/install.html,
+ httemplate/docs/upgrade-1.4.2.html, httemplate/misc/whois.cgi,
httemplate/view/svc_domain.cgi: add whois functionality
internally instead of linking to geektools
@@ -22662,11 +24170,17 @@
* httemplate/view/cust_main.cgi: comment out extraneous warning
+2004-04-02 16:45 ivan
+
+ * httemplate/search/cust_bill.cgi: UI: stop making things small for
+ no reason
+
2004-04-02 05:44 ivan
- * htetc/handler.pl, httemplate/view/cust_bill-pdf.cgi: remove
- Pragma:no-cache header, and set Content-Length and Cache-Control
- for viewing .pdf invoices with IE over SSL.
+ * htetc/global.asa, htetc/handler.pl,
+ httemplate/view/cust_bill-pdf.cgi: remove Pragma:no-cache header,
+ and set Content-Length and Cache-Control for viewing .pdf
+ invoices with IE over SSL.
http://support.microsoft.com/default.aspx?scid=kb;en-us;323308
2004-04-02 03:23 ivan
@@ -22684,11 +24198,29 @@
* FS/FS/part_export/www_shellcommands.pm: fix paths to ispman
commands
+2004-04-01 03:14 ivan
+
+ * httemplate/browse/part_referral.cgi: remove extraneous html
+
+2004-04-01 03:09 ivan
+
+ * httemplate/browse/part_referral.cgi: oops!
+
+2004-04-01 02:56 ivan
+
+ * httemplate/browse/part_referral.cgi: add a yesterday column and a
+ total row, closes: Bug#797
+
2004-03-31 16:44 ivan
* FS/: FS/cust_main_county.pm, bin/freeside-setup: get
sub-countries from Locale::SubCountry now
+2004-03-30 09:13 ivan
+
+ * httemplate/docs/upgrade10.html: little more explanation about
+ editing Pg dumps
+
2004-03-30 08:43 ivan
* FS/FS/cust_main.pm: mutex the bill and collect functions
@@ -22789,10 +24321,24 @@
* httemplate/view/: cust_main.cgi: small UI fix for unapplied
partial credits
+2004-03-22 19:36 ivan
+
+ * htetc/global.asa: make Apache::ASP includes work as expected
+
+2004-03-22 19:31 ivan
+
+ * htetc/global.asa: includes fix
+
+2004-03-22 19:29 ivan
+
+ * htetc/global.asa, httemplate/docs/install.html,
+ httemplate/docs/upgrade10.html: includes with Apache::ASP
+
2004-03-22 16:06 ivan
* FS/FS/cust_main.pm, FS/FS/ClientAPI/MyAccount.pm,
- htetc/handler.pl, httemplate/elements/small_custview.html,
+ htetc/global.asa, htetc/handler.pl,
+ httemplate/elements/small_custview.html,
httemplate/misc/payment.cgi, httemplate/misc/process/payment.cgi,
httemplate/view/cust_main.cgi: one-time credit card and ACH
payments (like self-service) closes: Bug#648
@@ -22842,8 +24388,9 @@
2004-03-22 02:16 ivan
- * httemplate/view/cust_main.cgi: yay! remove package view entirely
- (closes: Bug#569)
+ * httemplate/: misc/expire_pkg.cgi, misc/process/expire_pkg.cgi,
+ view/cust_main.cgi: yay! remove package view entirely (closes:
+ Bug#569)
2004-03-21 18:59 ivan
@@ -22909,9 +24456,10 @@
2004-03-17 13:47 ivan
- * FS/FS/: ClientAPI/MyAccount.pm, svc_acct.pm, ClientAPI/passwd.pm:
- proper self-service login supporting plaintext, crypt and MD5
- passwords
+ * FS/FS/ClientAPI/MyAccount.pm, FS/FS/svc_acct.pm,
+ FS/FS/ClientAPI/passwd.pm, httemplate/docs/install.html,
+ httemplate/docs/upgrade-1.4.2.html: proper self-service login
+ supporting plaintext, crypt and MD5 passwords
2004-03-16 12:41 ivan
@@ -22940,8 +24488,8 @@
2004-03-15 22:58 ivan
- * rt/: FREESIDE_MODIFIED, config.layout.in: config.layout needs to
- be generated
+ * rt/: FREESIDE_MODIFIED, config.layout, config.layout.in:
+ config.layout needs to be generated
2004-03-15 22:45 ivan
@@ -22949,8 +24497,8 @@
2004-03-15 22:43 ivan
- * rt/FREESIDE_MODIFIED: initial (hopefully rather unobtrusive)
- patch
+ * rt/: FREESIDE_MODIFIED, sbin/rt-setup-database: initial
+ (hopefully rather unobtrusive) patch
2004-03-15 20:36 ivan
@@ -22988,10 +24536,20 @@
* httemplate/graph/money_time.cgi: fix title
+2004-03-12 04:10 ivan
+
+ * httemplate/docs/upgrade10.html: add history tables to field
+ change upgrade instructions, add hints for pre-5.6 perl, add
+ index on cust_pay._date
+
2004-03-12 02:22 ivan
* httemplate/index.html: add badly-named new report
+2004-03-12 02:19 ivan
+
+ * httemplate/docs/upgrade-1.4.2.html: few more 1.4.2 upgrade hints
+
2004-03-12 00:56 ivan
* FS/FS/Report/Table/Monthly.pm: don't run my local expenses kludge
@@ -23002,6 +24560,19 @@
* FS/FS/cust_main.pm: emaildecline-exclude skips any errors that
contain the strings now, not just match exactly
+2004-03-11 21:58 ivan
+
+ * httemplate/docs/upgrade10.html: document trouble schema changes
+ backported to 1.4.2
+
+2004-03-11 21:49 ivan
+
+ * httemplate/docs/upgrade10.html: remove comment
+
+2004-03-11 13:35 ivan
+
+ * httemplate/docs/upgrade10.html: add info for ancient Pg versions
+
2004-03-11 13:19 ivan
* conf/logo.eps: oops, wrong logo
@@ -23017,88 +24588,38 @@
2004-03-10 23:33 ivan
- * fs_passwd/fs_passwd: update fs_passwd stuff as wrappers around
+ * fs_passwd/: fs_passwd, fs_passwd.cgi, fs_passwd_server,
+ fs_passwdd: update fs_passwd stuff as wrappers around
self-service
2004-03-10 20:17 ivan
* FS/MANIFEST: incorrect listing in MANIFEST
-2004-03-10 18:05 ivan
-
- * rt/autom4te.cache/: output.0, traces.0: import of rt 3.0.9
+2004-03-10 18:03 ivan
-2004-03-10 18:02 ivan
-
- * rt/: lib/RT/I18N/de.po, lib/RT/I18N/it.po, lib/RT/I18N/ru.po,
- lib/RT/I18N/zh_cn.po, lib/RT/I18N/zh_tw.po,
- lib/RT/Interface/Email.pm, lib/RT/Interface/REST.pm,
- lib/RT/Interface/Web.pm, lib/RT/URI/fsck_com_rt.pm,
- lib/t/data/crashes-file-based-parser,
- lib/t/data/multipart-report, lib/t/data/notes-uuencoded,
- sbin/extract-message-catalog, sbin/factory, sbin/license_tag,
- sbin/rt-test-dependencies.in: import of rt 3.0.9
+ * rt/lib/: RT/I18N/it.po, RT/Interface/REST.pm,
+ t/data/crashes-file-based-parser, t/data/multipart-report,
+ t/data/notes-uuencoded: Initial revision
2004-03-10 17:59 ivan
- * rt/: Makefile.in, README, README.Oracle, UPGRADING, configure,
- configure.ac, Changelog, bin/mason_handler.fcgi.in,
- bin/mason_handler.scgi.in, bin/mason_handler.svc.in,
- bin/rt-crontool.in, bin/rt-mailgate.in, bin/rt.in,
- bin/webmux.pl.in, docs/rt3-schema-relationships.dot,
- etc/acl.Informix, etc/acl.Oracle, etc/constraints.mysql,
- etc/drop.Informix, etc/drop.Oracle, etc/initialdata,
- etc/schema.Informix, etc/schema.SQLite, etc/schema.mysql,
- html/autohandler, html/index.html,
- html/Admin/Elements/EditCustomField,
- html/Admin/Elements/EditCustomFieldValues,
- html/Admin/Elements/EditCustomFields,
- html/Admin/Elements/EditScrip, html/Admin/Elements/EditScrips,
- html/Admin/Elements/SelectGroups,
- html/Admin/Elements/SelectRights,
- html/Admin/Elements/SelectStage,
- html/Admin/Queues/CustomFields.html,
- html/Admin/Queues/index.html, html/Admin/Users/index.html,
- html/Approvals/Display.html, html/Elements/Callback,
- html/Elements/MessageBox, html/Elements/MyTickets,
- html/Elements/SelectLang, html/Elements/SelectStatus,
- html/Elements/SelectWatcherType,
- html/Elements/SetupSessionCookie, html/REST/1.0/autohandler,
- html/REST/1.0/dhandler, html/REST/1.0/logout,
- html/REST/1.0/Forms/queue/default, html/REST/1.0/Forms/queue/ns,
+ * rt/: README.Oracle, UPGRADING, bin/rt.in,
+ docs/rt3-schema-relationships.dot, etc/acl.Informix,
+ etc/drop.Informix, etc/drop.Oracle, etc/schema.Informix,
+ html/Admin/Elements/SelectStage, html/Elements/SelectLang,
+ html/REST/1.0/autohandler, html/REST/1.0/dhandler,
+ html/REST/1.0/logout, html/REST/1.0/Forms/queue/default,
+ html/REST/1.0/Forms/queue/ns,
html/REST/1.0/Forms/ticket/attachments,
html/REST/1.0/Forms/ticket/default,
html/REST/1.0/Forms/ticket/history,
html/REST/1.0/Forms/ticket/links,
html/REST/1.0/Forms/user/default, html/REST/1.0/Forms/user/ns,
- html/REST/1.0/NoAuth/mail-gateway, html/REST/1.0/search/dhandler,
- html/REST/1.0/search/ticket, html/REST/1.0/ticket/comment,
- html/REST/1.0/ticket/link, html/REST/1.0/ticket/merge,
- html/SelfService/Display.html, html/SelfService/Update.html,
- html/SelfService/Elements/MyRequests, html/Ticket/Modify.html,
- html/Ticket/ModifyAll.html, html/Ticket/ModifyPeople.html,
- html/Ticket/Update.html, html/Ticket/Attachment/dhandler,
- html/Ticket/Elements/AddWatchers,
- html/Ticket/Elements/EditCustomField,
- html/Ticket/Elements/EditPeople,
- html/Ticket/Elements/ShowAttachments,
- html/Ticket/Elements/ShowDates, html/Ticket/Elements/ShowHistory,
- html/Ticket/Elements/ShowMessageStanza,
- html/Ticket/Elements/ShowPeople,
- html/Ticket/Elements/ShowTransaction, lib/RT.pm.in,
- lib/RT/Attachment_Overlay.pm, lib/RT/Base.pm,
- lib/RT/CachedGroupMember_Overlay.pm,
- lib/RT/CachedGroupMembers_Overlay.pm, lib/RT/CurrentUser.pm,
- lib/RT/CustomField_Overlay.pm, lib/RT/EmailParser.pm,
- lib/RT/GroupMember_Overlay.pm, lib/RT/Group_Overlay.pm,
- lib/RT/Handle.pm, lib/RT/I18N.pm, lib/RT/Principal_Overlay.pm,
- lib/RT/Queue_Overlay.pm, lib/RT/ScripAction_Overlay.pm,
- lib/RT/Scrip_Overlay.pm, lib/RT/Scrips_Overlay.pm,
- lib/RT/StyleGuide.pod, lib/RT/Template_Overlay.pm,
- lib/RT/Tickets_Overlay.pm, lib/RT/Tickets_Overlay_SQL.pm,
- lib/RT/URI.pm, lib/RT/Action/AutoOpen.pm,
- lib/RT/Action/Autoreply.pm, lib/RT/Action/CreateTickets.pm,
- lib/RT/Action/SendEmail.pm, lib/RT/I18N/cs.pm: import of rt 3.0.9
+ html/REST/1.0/search/dhandler, html/REST/1.0/search/ticket,
+ html/REST/1.0/ticket/comment, html/REST/1.0/ticket/link,
+ html/REST/1.0/ticket/merge, lib/RT/StyleGuide.pod: Initial
+ revision
2004-03-10 17:05 ivan
@@ -23119,11 +24640,16 @@
* httemplate/browse/router.cgi: UI cleanup.
+2004-03-05 16:57 ivan
+
+ * httemplate/docs/upgrade10.html: doc
+
2004-03-05 06:34 ivan
* FS/MANIFEST, FS/FS/Report.pm, FS/FS/Report/Table.pm,
FS/FS/Report/Table/Monthly.pm, FS/t/Report-Table-Monthly.t,
- FS/t/Report-Table.t, FS/t/Report.t, htetc/handler.pl,
+ FS/t/Report-Table.t, FS/t/Report.t, htetc/global.asa,
+ htetc/handler.pl, httemplate/graph/money_time-graph.cgi,
httemplate/graph/money_time.cgi: beginning of OO reporting
interface, create acadia-requested crosstab reports
@@ -23169,10 +24695,20 @@
* CREDITS: credit where the typeset invoices came from!
+2004-02-28 14:43 ivan
+
+ * htetc/global.asa, httemplate/docs/install.html,
+ httemplate/docs/upgrade-1.4.2.html: Apache::ASP 2.55 required
+
2004-02-28 14:40 ivan
* httemplate/edit/process/cust_main_county-collapse.cgi: style
+2004-02-28 14:40 ivan
+
+ * httemplate/edit/process/cust_main_county.cgi: new setuptax and
+ recurtax fields
+
2004-02-28 14:26 ivan
* FS/FS/Record.pm: depend on DBIx::DBSchema 0.23 and thus DBD::Pg
@@ -23218,6 +24754,10 @@
* FS/FS/CGI.pm: query strings get passed through sometimes?
+2004-02-24 19:50 ivan
+
+ * httemplate/docs/install.html: formatting
+
2004-02-23 00:12 ivan
* FS/FS/: svc_acct.pm, part_export.pm, svc_Common.pm: implement
@@ -23243,6 +24783,10 @@
* bin/sendmail.import: it lives!
+2004-02-13 03:44 ivan
+
+ * httemplate/docs/upgrade10.html: workaround for older Pg
+
2004-02-13 03:28 ivan
* httemplate/: index.html, search/svc_forward.cgi,
@@ -23251,13 +24795,14 @@
2004-02-13 02:57 ivan
- * FS/bin/freeside-setup: continue adding svc_forward.src: make
- svc_forward.srcsvc nullable
+ * FS/bin/freeside-setup, httemplate/docs/upgrade10.html: continue
+ adding svc_forward.src: make svc_forward.srcsvc nullable
2004-02-13 02:35 ivan
* FS/FS/svc_forward.pm, FS/bin/freeside-setup,
- httemplate/docs/schema.html: add svc_forward.src
+ httemplate/docs/schema.html, httemplate/docs/upgrade10.html: add
+ svc_forward.src
2004-02-13 00:02 ivan
@@ -23275,7 +24820,8 @@
2004-02-11 22:31 ivan
- * htetc/handler.pl, httemplate/misc/email-invoice.cgi,
+ * htetc/global.asa, htetc/handler.pl,
+ httemplate/misc/email-invoice.cgi,
httemplate/misc/print-invoice.cgi, httemplate/view/cust_bill.cgi:
re-email invoice, closes: bug#526 and have print and email
invoice links redirect back to top of customer view page instead
@@ -23307,14 +24853,20 @@
* FS/FS/part_pkg.pm, FS/FS/pkg_svc.pm,
httemplate/browse/part_pkg.cgi, httemplate/edit/part_pkg.cgi,
httemplate/edit/process/part_pkg.cgi, FS/bin/freeside-setup,
- htetc/handler.pl, httemplate/docs/schema.html: add
- pkg_svc.primary_svc flag to enable an explicit first package flag
+ htetc/global.asa, htetc/handler.pl, httemplate/docs/schema.html,
+ httemplate/docs/upgrade-1.4.2.html,
+ httemplate/docs/upgrade10.html: add pkg_svc.primary_svc flag to
+ enable an explicit first package flag
2004-01-30 22:20 ivan
* FS/FS/Record.pm: add ut_snumber, fix replacement of records with
empty values in non-primary-keyed tables
+2004-01-30 12:40 ivan
+
+ * httemplate/docs/upgrade-1.4.2.html: not appropriate
+
2004-01-29 19:58 ivan
* FS/FS/part_export.pm: add default freebsd and linux
@@ -23423,6 +24975,10 @@
* httemplate/: index.html, misc/dump.cgi: add database dump from
web interface
+2004-01-19 15:21 ivan
+
+ * httemplate/docs/upgrade-1.4.2.html: typeset invoice doc update
+
2004-01-18 13:03 ivan
* FS/FS/Record.pm: revert bind_param change _again_. passing not
@@ -23434,6 +24990,15 @@
* FS/FS/cust_bill.pm: apply variable substitutions in latex notes
also
+2004-01-12 12:52 ivan
+
+ * httemplate/docs/upgrade10.html: add IPC::ShareLite and
+ Locale::SubCountry
+
+2004-01-12 12:52 ivan
+
+ * httemplate/docs/upgrade-1.4.2.html: add IPC::ShareLite
+
2004-01-12 12:40 khoff
* httemplate/edit/part_virtual_field.cgi: Lists are just better
@@ -23535,8 +25100,9 @@
2003-12-27 00:23 ivan
- * httemplate/: index.html, search/cust_pkg.cgi: package reports by
- agent
+ * httemplate/: index.html, search/cust_pkg.cgi,
+ search/cust_pkg.html, search/cust_pkg_report.cgi: package reports
+ by agent
2003-12-24 10:18 khoff
@@ -23545,15 +25111,16 @@
2003-12-22 18:36 ivan
* FS/MANIFEST, FS/FS/part_export.pm, FS/t/svc_broadband.t,
- FS/t/svc_external.t, htetc/handler.pl,
+ FS/t/svc_external.t, htetc/global.asa, htetc/handler.pl,
httemplate/edit/part_svc.cgi, httemplate/edit/svc_external.cgi,
httemplate/edit/process/svc_external.cgi,
httemplate/view/svc_external.cgi: add svc_external
2003-12-22 17:46 ivan
- * FS/: FS.pm, FS/svc_external.pm, bin/freeside-setup,
- FS/cust_svc.pm: add svc_external
+ * FS/FS.pm, FS/FS/svc_external.pm, FS/bin/freeside-setup,
+ httemplate/docs/upgrade10.html, FS/FS/cust_svc.pm: add
+ svc_external
2003-12-22 17:10 ivan
@@ -23574,6 +25141,11 @@
* FS/FS/: Conf.pm, cust_main.pm: allow_negative_charges config
option
+2003-12-22 13:37 ivan
+
+ * httemplate/browse/cust_pay_batch.cgi: add total cards & amount to
+ pending batch screen
+
2003-12-22 13:22 ivan
* FS/FS/cust_main.pm: default to the whole-country tax rate if
@@ -23607,6 +25179,11 @@
* FS/bin/freeside-addoutsourceuser: add outsourced databases with
both addresses by default
+2003-12-19 19:47 ivan
+
+ * httemplate/browse/part_referral.cgi: fix inflated advertising
+ source numbers
+
2003-12-15 00:08 ivan
* conf/invoice_latex: line up w/window envelopes
@@ -23639,8 +25216,9 @@
2003-12-10 14:51 ivan
- * FS/bin/freeside-setup: add part_referral.disabled, add disabled
- indices to agent and part_bill_event
+ * FS/bin/freeside-setup, httemplate/docs/upgrade10.html: add
+ part_referral.disabled, add disabled indices to agent and
+ part_bill_event
2003-12-10 14:50 ivan
@@ -23737,8 +25315,10 @@
2003-11-19 04:21 ivan
- * httemplate/: edit/REAL_cust_pkg.cgi, search/report_cust_pay.html,
- search/report_tax.html: fix jscalendar date ifFormat
+ * httemplate/: edit/REAL_cust_pkg.cgi, search/cust_pkg.html,
+ search/report_cc.html, search/report_credit.html,
+ search/report_cust_pay.html, search/report_tax.html: fix
+ jscalendar date ifFormat
2003-11-18 17:37 ivan
@@ -23759,6 +25339,11 @@
FS/part_export/communigate_pro_singledomain.pm, MANIFEST,
FS/part_export.pm: add communigate_pro_singledomain export
+2003-11-18 03:17 ivan
+
+ * httemplate/docs/install.html: remove thread/PerlIO warning -
+ standard in 5.8.x and working fine
+
2003-11-14 23:28 ivan
* FS/bin/freeside-selfservice-server: kill off ssh process when
@@ -23802,6 +25387,11 @@
* FS/FS/svc_Common.pm: simple change to cust_svc creation to help
imports with svcnums
+2003-11-11 00:35 ivan
+
+ * httemplate/browse/part_referral.cgi: really fix advertising
+ source edit links
+
2003-11-11 00:01 ivan
* httemplate/search/report_receivables.cgi: remove spaces between
@@ -23809,7 +25399,8 @@
2003-11-10 23:51 ivan
- * httemplate/browse/svc_acct_pop.cgi: part_referral.cgi
+ * httemplate/browse/: part_referral.cgi, svc_acct_pop.cgi:
+ part_referral.cgi
2003-11-10 05:54 ivan
@@ -23880,6 +25471,11 @@
* httemplate/: index.html, search/report_receivables.cgi: "current
receivables" -> A/R Aging summary
+2003-11-06 05:37 ivan
+
+ * FS/bin/freeside-receivables-report: removing (rewritten as a
+ proper html report)
+
2003-11-05 03:13 ivan
* bin/create-fetchmailrc: fixup
@@ -23948,6 +25544,11 @@
* httemplate/browse/part_pkg.cgi: also show suspended and canceled
counts on active package browse
+2003-10-26 09:30 ivan
+
+ * httemplate/search/cust_main-quickpay.html: default quickpay to
+ exact search
+
2003-10-25 17:39 ivan
* httemplate/search/: cust_pay.cgi, report_cust_pay.html: payment
@@ -23972,13 +25573,28 @@
* FS/FS/ClientAPI/Signup.pm, httemplate/edit/cust_main.cgi,
httemplate/edit/process/cust_main.cgi, httemplate/docs/cvv2.html,
- FS/FS/cust_main.pm, FS/bin/freeside-setup,
- httemplate/docs/schema.html: cvv!
+ httemplate/docs/upgrade10.html, FS/FS/cust_main.pm,
+ FS/bin/freeside-setup, httemplate/docs/schema.html: cvv!
2003-10-23 22:51 ivan
* httemplate/images/: cvv2.png, cvv2_amex.png: adding cvv2 images
+2003-10-23 17:50 ivan
+
+ * httemplate/browse/part_referral.cgi: UI: adjust alignment of
+ stats
+
+2003-10-23 17:39 ivan
+
+ * httemplate/browse/part_referral.cgi: referral listing now shows
+ customer signups today and past week/30/60/90/6months/year/total
+
+2003-10-23 15:37 ivan
+
+ * bin/dbdef-create: require DBIx::DBSchema 0.22 to deal with Pg
+ version problems
+
2003-10-23 02:02 ivan
* httemplate/docs/legacy.html: fix cranky verbitage at the top
@@ -24000,14 +25616,22 @@
2003-10-19 21:25 ivan
* FS/FS/cust_main.pm, FS/FS/part_pkg.pm,
- httemplate/edit/part_pkg.cgi, FS/bin/freeside-setup: daily/weekly
- billing
+ httemplate/edit/part_pkg.cgi, httemplate/docs/upgrade10.html,
+ FS/bin/freeside-setup: daily/weekly billing
+
+2003-10-19 11:08 ivan
+
+ * httemplate/docs/install.html: fix CPAN link
2003-10-16 15:57 khoff
* FS/FS/part_export/router.pm: Telnet/SSH router export for
svc_broadband.
+2003-10-16 06:48 ivan
+
+ * httemplate/docs/billing.html: fix Text::Template link
+
2003-10-15 16:17 khoff
* httemplate/browse/router.cgi: $router isn't a global.
@@ -24047,9 +25671,14 @@
* FS/FS/cust_pay_batch.pm: parse last line from TD Canada Trust
+2003-10-09 04:05 ivan
+
+ * httemplate/docs/install.html: don't install on a public server!
+
2003-10-07 21:09 ivan
- * htetc/handler.pl, httemplate/misc/upload-batch.cgi: can't use
+ * htetc/global.asa, htetc/handler.pl,
+ httemplate/misc/upload-batch.cgi: can't use
File::Basename::basename for windows filenames! use a regex
instead
@@ -24086,6 +25715,11 @@
* FS/FS/part_export/communigate_pro.pm: add suspension /
unsuspension export to communigate
+2003-10-06 05:05 ivan
+
+ * httemplate/search/cust_main-quickpay.html: - put link to main
+ menu on quick payment search page
+
2003-10-06 04:39 ivan
* httemplate/search/svc_acct.cgi: fix URL argument processing for
@@ -24149,6 +25783,10 @@
* FS/FS/agent.pm: no duplicate usernames
+2003-09-30 07:58 ivan
+
+ * httemplate/docs/upgrade10.html: agent schema changes
+
2003-09-30 05:48 ivan
* httemplate/misc/download-batch.cgi: IE doesn't like downloading
@@ -24162,13 +25800,17 @@
httemplate/elements/calendar-win2k-2.css,
httemplate/elements/calendar.js,
httemplate/elements/calendar_stripped.js,
- httemplate/images/calendar.png,
+ httemplate/images/calendar.png, httemplate/search/cust_pkg.html,
+ httemplate/search/report_cc.html,
+ httemplate/search/report_credit.html,
httemplate/search/report_cust_pay.html,
httemplate/search/report_tax.html: calendar popups!
2003-09-30 00:04 ivan
- * htetc/handler.pl: CGI.pm 2.47 required for ->upload() method
+ * htetc/global.asa, htetc/handler.pl,
+ httemplate/docs/upgrade-1.4.2.html: CGI.pm 2.47 required for
+ ->upload() method
2003-09-29 03:10 ivan
@@ -24201,7 +25843,8 @@
2003-09-27 19:36 ivan
- * FS/FS/cust_pay_batch.pm, htetc/handler.pl,
+ * FS/FS/cust_pay_batch.pm, htetc/global.asa, htetc/handler.pl,
+ httemplate/browse/cust_pay_batch.cgi,
httemplate/misc/upload-batch.cgi: add upload of batch result from
TD Canada Trust some global.asa / handler.pl enhancements
@@ -24213,6 +25856,10 @@
* httemplate/edit/svc_acct.cgi: $field isn't a global.
+2003-09-26 06:37 ivan
+
+ * httemplate/docs/upgrade10.html: sql
+
2003-09-26 06:04 ivan
* FS/: FS/cust_main.pm, bin/freeside-daily: re-setup option to
@@ -24234,13 +25881,19 @@
2003-09-26 01:11 ivan
- * httemplate/browse/cust_main_county.cgi: fix tax edit UI
+ * httemplate/: browse/cust_main_county.cgi,
+ edit/cust_main_county.cgi: fix tax edit UI
+
+2003-09-25 04:56 ivan
+
+ * httemplate/docs/upgrade10.html: new per-tax setuptax and recurtax
+ fields
2003-09-25 04:49 ivan
- * httemplate/browse/cust_main_county.cgi: UI for multiple named
- taxes w/setup & recur exemptions 1.4 schema-auto-adjusting
- backport
+ * httemplate/: browse/cust_main_county.cgi,
+ edit/cust_main_county.cgi: UI for multiple named taxes w/setup &
+ recur exemptions 1.4 schema-auto-adjusting backport
2003-09-25 04:17 ivan
@@ -24265,6 +25918,15 @@
* FS/FS/ClientAPI/MyAccount.pm: quiet self-service server cancels
+2003-09-25 02:40 ivan
+
+ * httemplate/docs/upgrade-1.4.2.html: 1.4.2 upgrade
+
+2003-09-25 02:39 ivan
+
+ * httemplate/docs/upgrade9.html: update upgrade docs for bind
+ exports
+
2003-09-24 10:20 ivan
* FS/FS/part_export/shellcommands.pm: don't change dir either when
@@ -24293,6 +25955,11 @@
* httemplate/misc/download-batch.cgi: preliminary batch download
+2003-09-20 18:22 ivan
+
+ * httemplate/browse/cust_pay_batch.cgi: add link to preliminary
+ batch download
+
2003-09-19 05:40 ivan
* FS/FS/cust_main.pm: quiet option to cancel method
@@ -24516,7 +26183,8 @@
* FS/FS/CGI.pm, bin/masonize, httemplate/index.html,
httemplate/elements/header.html,
httemplate/elements/menubar.html, httemplate/elements/pager.html,
- httemplate/elements/table.html, httemplate/search/sql.html,
+ httemplate/elements/table.html, httemplate/search/sql.cgi,
+ httemplate/search/sql.html,
httemplate/search/elements/search.html: - (finish) includes!
(closes: Bug#551) - (finish) moving SQL search to including
generic elements/search.html - new elements: menubar.html,
@@ -24525,7 +26193,8 @@
2003-08-07 19:02 ivan
- * bin/masonize, httemplate/autohandler,
+ * bin/masonize, htetc/global.asa, httemplate/autohandler,
+ httemplate/graph/money_time-graph.cgi,
httemplate/graph/money_time.cgi, httemplate/search/sql.html,
httemplate/search/elements/search.html: - fix Mason profiling to
pass-through images (for graph/) - fix graph/money-time.cgi use
@@ -24538,17 +26207,20 @@
2003-08-07 06:08 ivan
- * htetc/handler.pl, httemplate/view/cust_main.cgi: - turn on
- profiling with mason like with Apache::ASP (redirects now
- working) - fix mason error with new view/cust_main.cgi UI
+ * htetc/global.asa, htetc/handler.pl,
+ httemplate/view/cust_main.cgi: - turn on profiling with mason
+ like with Apache::ASP (redirects now working) - fix mason error
+ with new view/cust_main.cgi UI
2003-08-07 05:47 ivan
- * Makefile, htetc/handler.pl, httemplate/autohandler,
- httemplate/index.html: - switch to mason by default - minimum
- mason version 1.1 (and doc) - evaluate .html files with mason/asp
- - turn on profiling with mason like with Apache::ASP (redirects
- not working) - (start of) includes
+ * Makefile, htetc/global.asa, htetc/handler.pl,
+ htetc/handler.pl-1.0x, httemplate/autohandler,
+ httemplate/index.html, httemplate/docs/install.html,
+ httemplate/docs/upgrade10.html: - switch to mason by default -
+ minimum mason version 1.1 (and doc) - evaluate .html files with
+ mason/asp - turn on profiling with mason like with Apache::ASP
+ (redirects not working) - (start of) includes
2003-08-05 14:00 ivan
@@ -24557,7 +26229,7 @@
2003-08-05 13:06 ivan
- * htetc/handler.pl: no svc_acct_sm in 1.5
+ * htetc/: handler.pl, handler.pl-1.0x: no svc_acct_sm in 1.5
2003-08-05 12:07 ivan
@@ -24599,10 +26271,12 @@
FS/FS/router.pm, FS/FS/session.pm, FS/FS/svc_Common.pm,
FS/FS/svc_acct.pm, FS/FS/svc_acct_pop.pm, FS/FS/svc_broadband.pm,
FS/FS/svc_domain.pm, FS/FS/svc_forward.pm, FS/FS/svc_www.pm,
- FS/FS/type_pkgs.pm, FS/bin/freeside-setup, htetc/handler.pl,
- httemplate/index.html, httemplate/browse/part_svc.cgi,
+ FS/FS/type_pkgs.pm, FS/bin/freeside-setup, htetc/global.asa,
+ htetc/handler.pl, htetc/handler.pl-1.0x, httemplate/index.html,
+ httemplate/browse/part_svc.cgi,
httemplate/browse/part_virtual_field.cgi,
- httemplate/browse/router.cgi, httemplate/edit/part_svc.cgi,
+ httemplate/browse/router.cgi, httemplate/docs/upgrade10.html,
+ httemplate/edit/part_svc.cgi,
httemplate/edit/part_virtual_field.cgi,
httemplate/edit/router.cgi, httemplate/edit/svc_acct.cgi,
httemplate/edit/svc_broadband.cgi, httemplate/edit/svc_www.cgi,
@@ -24612,6 +26286,14 @@
httemplate/view/svc_forward.cgi, httemplate/view/svc_www.cgi:
Virtual field merge
+2003-08-04 17:00 khoff
+
+ * FS/FS/part_router_field.pm, FS/FS/part_sb_field.pm,
+ FS/FS/router_field.pm, FS/FS/sb_field.pm,
+ httemplate/browse/part_sb_field.cgi,
+ httemplate/edit/part_router_field.cgi,
+ httemplate/edit/part_sb_field.cgi: Virtual field merge
+
2003-07-25 09:26 ivan
* FS/FS/svc_acct.pm: typo
@@ -24645,52 +26327,60 @@
2003-07-15 06:30 ivan
- * rt/: Makefile, bin/mason_handler.fcgi, bin/mason_handler.scgi,
- bin/rt-mailgate, etc/schema.Pg, lib/RT.pm, lib/RT/Record.pm:
- reverting to vendor branch rt 3.0.4, hopefully
-
-2003-07-15 06:16 ivan
-
- * rt/: config.log, config.status, bin/mason_handler.svc,
- bin/rt-commit-handler, bin/rt-crontool, etc/RT_Config.pm,
- etc/RT_Config.pm.in, etc/RT_SiteConfig.pm,
- html/Admin/Users/Modify.html, html/Elements/Footer,
- html/Elements/Header, html/Elements/Menu,
- html/Elements/PageLayout, html/Elements/SelectDate,
- html/Elements/SimpleSearch, html/Elements/Tabs,
- html/Elements/TitleBoxStart, html/Search/Bulk.html,
- html/Ticket/Create.html, html/Ticket/Display.html,
- html/Ticket/Elements/ShowSummary, html/Ticket/Elements/Tabs,
- html/User/Prefs.html, lib/RT/Groups_Overlay.pm,
- lib/RT/SearchBuilder.pm, lib/RT/Ticket_Overlay.pm,
- lib/RT/Transaction_Overlay.pm, lib/RT/User_Overlay.pm,
- lib/RT/Users_Overlay.pm, lib/t/02regression.t, lib/t/03web.pl,
- lib/t/04_send_email.pl, sbin/rt-setup-database.in: Initial
- revision
+ * rt/: ChangeLog, Makefile, README, TODO, bin/initacls.Oracle,
+ bin/initacls.Pg, bin/initacls.mysql, bin/mason_handler.fcgi,
+ bin/mason_handler.scgi, bin/rt, bin/rt-mailgate, bin/rtadmin,
+ bin/webmux.pl, docs/rt.gif, docs/design_docs/acls,
+ docs/design_docs/basic-definitions.txt,
+ docs/design_docs/cli_spec, docs/design_docs/evil_plans,
+ docs/design_docs/local_hacking, etc/acl.Oracle, etc/acl.Pg,
+ etc/acl.mysql, etc/config.pm, etc/schema.Oracle, etc/schema.Pg,
+ etc/schema.mysql, etc/schema.pm, lib/MANIFEST, lib/MANIFEST.SKIP,
+ lib/Makefile.PL, lib/RT.pm, lib/test.pl, lib/RT/ACE.pm,
+ lib/RT/ACL.pm, lib/RT/Attachment.pm, lib/RT/Attachments.pm,
+ lib/RT/CurrentUser.pm, lib/RT/Date.pm, lib/RT/EasySearch.pm,
+ lib/RT/Group.pm, lib/RT/GroupMember.pm, lib/RT/GroupMembers.pm,
+ lib/RT/Groups.pm, lib/RT/Handle.pm, lib/RT/Keyword.pm,
+ lib/RT/KeywordSelect.pm, lib/RT/KeywordSelects.pm,
+ lib/RT/Keywords.pm, lib/RT/Link.pm, lib/RT/Links.pm,
+ lib/RT/ObjectKeyword.pm, lib/RT/ObjectKeywords.pm,
+ lib/RT/Queue.pm, lib/RT/Queues.pm, lib/RT/Record.pm,
+ lib/RT/Scrip.pm, lib/RT/ScripAction.pm, lib/RT/ScripActions.pm,
+ lib/RT/ScripCondition.pm, lib/RT/ScripConditions.pm,
+ lib/RT/Scrips.pm, lib/RT/Template.pm, lib/RT/Templates.pm,
+ lib/RT/TestHarness.pm, lib/RT/Ticket.pm, lib/RT/Tickets.pm,
+ lib/RT/Transaction.pm, lib/RT/Transactions.pm, lib/RT/User.pm,
+ lib/RT/Users.pm, lib/RT/Watcher.pm, lib/RT/Watchers.pm,
+ lib/RT/Action/Autoreply.pm, lib/RT/Action/Generic.pm,
+ lib/RT/Action/Notify.pm, lib/RT/Action/NotifyAsComment.pm,
+ lib/RT/Action/OpenDependent.pm, lib/RT/Action/ResolveMembers.pm,
+ lib/RT/Action/SendEmail.pm, lib/RT/Action/SendPasswordEmail.pm,
+ lib/RT/Action/StallDependent.pm,
+ lib/RT/Condition/AnyTransaction.pm, lib/RT/Condition/Generic.pm,
+ lib/RT/Condition/NewDependency.pm,
+ lib/RT/Condition/StatusChange.pm, lib/RT/Interface/CLI.pm,
+ lib/RT/Interface/Email.pm, lib/RT/Interface/Web.pm: reverting to
+ vendor branch rt 3.0.4, hopefully
2003-07-15 06:16 ivan
- * rt/: COPYING, Makefile.in, README, aclocal.m4, Changelog,
- configure, configure.ac, install-sh, bin/mason_handler.fcgi.in,
- bin/mason_handler.scgi.in, bin/mason_handler.svc.in,
+ * rt/: Makefile.in, aclocal.m4, config, config.layout, Changelog,
+ config.log, config.pld, config.status, configure, configure.ac,
+ install-sh, bin/mason_handler.fcgi.in, bin/mason_handler.scgi.in,
+ bin/mason_handler.svc, bin/mason_handler.svc.in,
+ bin/rt-commit-handler, bin/rt-commit-handler.in,
bin/rt-crontool.in, bin/rt-mailgate.in, bin/webmux.pl.in,
- docs/README.docs, docs/Security, docs/design_docs/CARS,
- docs/design_docs/TransactionTypes.txt, docs/design_docs/acls,
- docs/design_docs/approval_notices,
+ bin/rt-crontool, docs/design_docs/approval_notices,
docs/design_docs/approval_template, docs/design_docs/cf_search,
- docs/design_docs/cli_spec, docs/design_docs/cvs_integration,
- docs/design_docs/delegation, docs/design_docs/evil_plans,
- docs/design_docs/groups_notes,
- docs/design_docs/link-definitions.txt,
+ docs/design_docs/delegation, docs/design_docs/groups_notes,
docs/design_docs/recursive_group_membership_algorithm,
docs/design_docs/rql_parser_machine.graphviz,
docs/design_docs/string-extraction-guide.txt,
- docs/design_docs/subscription-definitions.txt,
- docs/design_docs/ticket_templates, docs/design_docs/users,
- etc/acl.Oracle, etc/acl.Pg, etc/acl.mysql, etc/constraints.mysql,
- etc/initialdata, etc/rt.spec, etc/schema.SQLite,
- etc/schema.mysql, html/autohandler, html/index.html, html/l,
- html/Admin/index.html, html/Admin/Elements/AddCustomFieldValue,
+ docs/design_docs/ticket_templates, etc/RT_Config.pm,
+ etc/RT_Config.pm.in, etc/RT_SiteConfig.pm, etc/constraints.mysql,
+ etc/initialdata, etc/schema.SQLite, etc/upgrade/2.1.71,
+ html/autohandler, html/index.html, html/l, html/Admin/index.html,
+ html/Admin/Elements/AddCustomFieldValue,
html/Admin/Elements/CreateUserCalled,
html/Admin/Elements/EditCustomField,
html/Admin/Elements/EditCustomFieldValues,
@@ -24702,7 +26392,9 @@
html/Admin/Elements/GroupTabs, html/Admin/Elements/Header,
html/Admin/Elements/ListGlobalCustomFields,
html/Admin/Elements/ListGlobalScrips,
+ html/Admin/Elements/ModifyQueue,
html/Admin/Elements/ModifyTemplate,
+ html/Admin/Elements/ModifyUser,
html/Admin/Elements/QueueRightsForUser,
html/Admin/Elements/QueueTabs,
html/Admin/Elements/SelectCustomFieldType,
@@ -24719,6 +26411,8 @@
html/Admin/Elements/SelectTemplate,
html/Admin/Elements/SelectUsers, html/Admin/Elements/SystemTabs,
html/Admin/Elements/Tabs, html/Admin/Elements/UserTabs,
+ html/Admin/Global/CustomField.html,
+ html/Admin/Global/CustomFields.html,
html/Admin/Global/GroupRights.html, html/Admin/Global/Scrip.html,
html/Admin/Global/Scrips.html, html/Admin/Global/Template.html,
html/Admin/Global/Templates.html,
@@ -24734,6 +26428,7 @@
html/Admin/Queues/Template.html,
html/Admin/Queues/Templates.html,
html/Admin/Queues/UserRights.html, html/Admin/Queues/index.html,
+ html/Admin/Users/Modify.html, html/Admin/Users/Prefs.html,
html/Admin/Users/index.html, html/Approvals/Display.html,
html/Approvals/index.html, html/Approvals/Elements/Approve,
html/Approvals/Elements/PendingMyApproval,
@@ -24741,14 +26436,16 @@
html/Approvals/Elements/Tabs, html/Elements/BevelBoxRaisedEnd,
html/Elements/BevelBoxRaisedStart, html/Elements/Callback,
html/Elements/Checkbox, html/Elements/CreateTicket,
- html/Elements/Error, html/Elements/GotoTicket,
+ html/Elements/Error, html/Elements/Footer,
+ html/Elements/GotoTicket, html/Elements/Header,
html/Elements/ListActions, html/Elements/Login,
- html/Elements/MessageBox, html/Elements/MyRequests,
- html/Elements/MyTickets, html/Elements/Quicksearch,
+ html/Elements/Menu, html/Elements/MessageBox,
+ html/Elements/MyRequests, html/Elements/MyTickets,
+ html/Elements/PageLayout, html/Elements/Quicksearch,
html/Elements/Refresh, html/Elements/Section,
html/Elements/SelectAttachmentField, html/Elements/SelectBoolean,
html/Elements/SelectCustomFieldOperator,
- html/Elements/SelectCustomFieldValue,
+ html/Elements/SelectCustomFieldValue, html/Elements/SelectDate,
html/Elements/SelectDateRelation, html/Elements/SelectDateType,
html/Elements/SelectEqualityOperator, html/Elements/SelectGroups,
html/Elements/SelectLinkType, html/Elements/SelectMatch,
@@ -24758,11 +26455,23 @@
html/Elements/SelectTicketSortBy,
html/Elements/SelectTicketTypes, html/Elements/SelectUsers,
html/Elements/SelectWatcherType,
- html/Elements/SetupSessionCookie, html/Elements/Submit,
- html/Elements/TitleBoxEnd, html/NoAuth/Logout.html,
- html/NoAuth/Reminder.html, html/NoAuth/images/bplogo.gif,
- html/NoAuth/images/favicon.png,
- html/REST/1.0/NoAuth/mail-gateway, html/SelfService/Closed.html,
+ html/Elements/SetupSessionCookie, html/Elements/ShadedBox,
+ html/Elements/ShadedInputRow, html/Elements/ShadedRow,
+ html/Elements/SimpleSearch, html/Elements/Submit,
+ html/Elements/Tabs, html/Elements/TitleBoxEnd,
+ html/Elements/TitleBoxStart, html/Elements/ViewUser,
+ html/NoAuth/Logout.html, html/NoAuth/Reminder.html,
+ html/NoAuth/webrt.css, html/NoAuth/images/back_home.gif,
+ html/NoAuth/images/bplogo.gif, html/NoAuth/images/favicon.png,
+ html/NoAuth/images/head_requestracker.gif,
+ html/NoAuth/images/rt.jpg, html/NoAuth/images/space.gif,
+ html/NoAuth/images/spacer.gif,
+ html/NoAuth/images/squares_blue.gif,
+ html/REST/1.0/NoAuth/mail-gateway, html/Search/Bulk.html,
+ html/Search/Listing.html, html/Search/Elements/PickRestriction,
+ html/Search/Elements/TicketHeader,
+ html/Search/Elements/TicketHeaderCell,
+ html/Search/Elements/TicketRow, html/SelfService/Closed.html,
html/SelfService/Create.html, html/SelfService/Display.html,
html/SelfService/Error.html, html/SelfService/Prefs.html,
html/SelfService/Update.html, html/SelfService/index.html,
@@ -24770,7 +26479,8 @@
html/SelfService/Elements/GotoTicket,
html/SelfService/Elements/Header,
html/SelfService/Elements/MyRequests,
- html/SelfService/Elements/Tabs, html/Ticket/History.html,
+ html/SelfService/Elements/Tabs, html/Ticket/Create.html,
+ html/Ticket/Display.html, html/Ticket/History.html,
html/Ticket/Modify.html, html/Ticket/ModifyAll.html,
html/Ticket/ModifyDates.html, html/Ticket/ModifyLinks.html,
html/Ticket/ModifyPeople.html, html/Ticket/Update.html,
@@ -24779,79 +26489,78 @@
html/Ticket/Elements/EditBasics,
html/Ticket/Elements/EditCustomField,
html/Ticket/Elements/EditCustomFields,
- html/Ticket/Elements/EditDates, html/Ticket/Elements/EditPeople,
+ html/Ticket/Elements/EditDates, html/Ticket/Elements/EditLinks,
+ html/Ticket/Elements/EditPeople,
html/Ticket/Elements/EditWatchers,
html/Ticket/Elements/ShowAttachments,
html/Ticket/Elements/ShowBasics,
html/Ticket/Elements/ShowCustomFields,
html/Ticket/Elements/ShowDates,
html/Ticket/Elements/ShowDependencies,
- html/Ticket/Elements/ShowHistory,
+ html/Ticket/Elements/ShowHistory, html/Ticket/Elements/ShowLink,
+ html/Ticket/Elements/ShowLinks,
+ html/Ticket/Elements/ShowMemberOf,
html/Ticket/Elements/ShowMembers,
html/Ticket/Elements/ShowMessageHeaders,
html/Ticket/Elements/ShowMessageStanza,
html/Ticket/Elements/ShowPeople,
+ html/Ticket/Elements/ShowReferences,
html/Ticket/Elements/ShowRequestor,
- html/Ticket/Elements/ShowTransaction, html/User/Delegation.html,
+ html/Ticket/Elements/ShowSummary,
+ html/Ticket/Elements/ShowTransaction, html/Ticket/Elements/Tabs,
+ html/User/Delegation.html, html/User/Prefs.html,
html/User/Elements/DelegateRights, html/User/Elements/GroupTabs,
html/User/Elements/Tabs, html/User/Groups/Members.html,
html/User/Groups/Modify.html, html/User/Groups/index.html,
- lib/RT.pm.in, lib/RT/ACE.pm, lib/RT/ACE_Overlay.pm,
- lib/RT/ACL.pm, lib/RT/ACL_Overlay.pm, lib/RT/Attachment.pm,
- lib/RT/Attachment_Overlay.pm, lib/RT/Attachments.pm,
- lib/RT/Attachments_Overlay.pm, lib/RT/Base.pm,
- lib/RT/CachedGroupMember.pm, lib/RT/CachedGroupMember_Overlay.pm,
+ lib/RT.pm.in, lib/RT/ACE_Overlay.pm, lib/RT/ACL_Overlay.pm,
+ lib/RT/Attachment_Overlay.pm, lib/RT/Attachments_Overlay.pm,
+ lib/RT/Base.pm, lib/RT/CachedGroupMember.pm,
+ lib/RT/CachedGroupMember_Overlay.pm,
lib/RT/CachedGroupMembers.pm,
- lib/RT/CachedGroupMembers_Overlay.pm, lib/RT/CurrentUser.pm,
- lib/RT/CustomField.pm, lib/RT/CustomFieldValue.pm,
- lib/RT/CustomFieldValues.pm, lib/RT/CustomFieldValues_Overlay.pm,
+ lib/RT/CachedGroupMembers_Overlay.pm, lib/RT/CustomField.pm,
+ lib/RT/CustomFieldValue.pm, lib/RT/CustomFieldValues.pm,
+ lib/RT/CustomFieldValues_Overlay.pm,
lib/RT/CustomField_Overlay.pm, lib/RT/CustomFields.pm,
- lib/RT/CustomFields_Overlay.pm, lib/RT/Date.pm,
- lib/RT/EmailParser.pm, lib/RT/Group.pm, lib/RT/GroupMember.pm,
- lib/RT/GroupMember_Overlay.pm, lib/RT/GroupMembers.pm,
- lib/RT/GroupMembers_Overlay.pm, lib/RT/Group_Overlay.pm,
- lib/RT/Groups.pm, lib/RT/Handle.pm, lib/RT/I18N.pm,
- lib/RT/Link.pm, lib/RT/Link_Overlay.pm, lib/RT/Links.pm,
- lib/RT/Links_Overlay.pm, lib/RT/Principal.pm,
- lib/RT/Principal_Overlay.pm, lib/RT/Principals.pm,
- lib/RT/Principals_Overlay.pm, lib/RT/Queue.pm,
- lib/RT/Queue_Overlay.pm, lib/RT/Queues.pm,
- lib/RT/Queues_Overlay.pm, lib/RT/Scrip.pm, lib/RT/ScripAction.pm,
- lib/RT/ScripAction_Overlay.pm, lib/RT/ScripActions.pm,
- lib/RT/ScripActions_Overlay.pm, lib/RT/ScripCondition.pm,
- lib/RT/ScripCondition_Overlay.pm, lib/RT/ScripConditions.pm,
+ lib/RT/CustomFields_Overlay.pm, lib/RT/EmailParser.pm,
+ lib/RT/GroupMember_Overlay.pm, lib/RT/GroupMembers_Overlay.pm,
+ lib/RT/Group_Overlay.pm, lib/RT/Groups_Overlay.pm,
+ lib/RT/I18N.pm, lib/RT/Link_Overlay.pm, lib/RT/Links_Overlay.pm,
+ lib/RT/Principal.pm, lib/RT/Principal_Overlay.pm,
+ lib/RT/Principals.pm, lib/RT/Principals_Overlay.pm,
+ lib/RT/Queue_Overlay.pm, lib/RT/Queues_Overlay.pm,
+ lib/RT/ScripAction_Overlay.pm, lib/RT/ScripActions_Overlay.pm,
+ lib/RT/ScripCondition_Overlay.pm,
lib/RT/ScripConditions_Overlay.pm, lib/RT/Scrip_Overlay.pm,
- lib/RT/Scrips.pm, lib/RT/Scrips_Overlay.pm, lib/RT/System.pm,
- lib/RT/Template.pm, lib/RT/Template_Overlay.pm,
- lib/RT/Templates.pm, lib/RT/Templates_Overlay.pm,
- lib/RT/Ticket.pm, lib/RT/Tickets.pm, lib/RT/Tickets_Overlay.pm,
- lib/RT/Tickets_Overlay_SQL.pm, lib/RT/Transaction.pm,
- lib/RT/Transactions.pm, lib/RT/Transactions_Overlay.pm,
- lib/RT/URI.pm, lib/RT/User.pm, lib/RT/Users.pm,
- lib/RT/Action/AutoOpen.pm, lib/RT/Action/Autoreply.pm,
- lib/RT/Action/CreateTickets.pm,
- lib/RT/Action/EscalatePriority.pm, lib/RT/Action/Generic.pm,
- lib/RT/Action/Notify.pm, lib/RT/Action/NotifyAsComment.pm,
- lib/RT/Action/ResolveMembers.pm, lib/RT/Action/SendEmail.pm,
- lib/RT/Action/SetPriority.pm, lib/RT/Action/UserDefined.pm,
- lib/RT/Condition/AnyTransaction.pm,
- lib/RT/Condition/BeforeDue.pm, lib/RT/Condition/Generic.pm,
+ lib/RT/Scrips_Overlay.pm, lib/RT/SearchBuilder.pm,
+ lib/RT/System.pm, lib/RT/Template_Overlay.pm,
+ lib/RT/Templates_Overlay.pm, lib/RT/TicketCustomFieldValue.pm,
+ lib/RT/TicketCustomFieldValue_Overlay.pm,
+ lib/RT/TicketCustomFieldValues.pm,
+ lib/RT/TicketCustomFieldValues_Overlay.pm,
+ lib/RT/Ticket_Overlay.pm, lib/RT/Tickets_Overlay.pm,
+ lib/RT/Tickets_Overlay_SQL.pm, lib/RT/Transaction_Overlay.pm,
+ lib/RT/Transactions_Overlay.pm, lib/RT/URI.pm,
+ lib/RT/User_Overlay.pm, lib/RT/Users_Overlay.pm,
+ lib/RT/Action/AutoOpen.pm, lib/RT/Action/CreateTickets.pm,
+ lib/RT/Action/EscalatePriority.pm, lib/RT/Action/SetPriority.pm,
+ lib/RT/Action/UserDefined.pm, lib/RT/Condition/BeforeDue.pm,
lib/RT/Condition/Overdue.pm, lib/RT/Condition/OwnerChange.pm,
lib/RT/Condition/PriorityExceeds.pm,
- lib/RT/Condition/QueueChange.pm,
- lib/RT/Condition/StatusChange.pm,
- lib/RT/Condition/UserDefined.pm, lib/RT/I18N/cs.pm,
- lib/RT/I18N/cs.po, lib/RT/I18N/de.po, lib/RT/I18N/en.po,
- lib/RT/I18N/es.po, lib/RT/I18N/fi.po, lib/RT/I18N/fr.po,
- lib/RT/I18N/he.po, lib/RT/I18N/i_default.pm, lib/RT/I18N/ja.po,
- lib/RT/I18N/nl.po, lib/RT/I18N/no.po, lib/RT/I18N/pt_br.po,
- lib/RT/I18N/ru.po, lib/RT/I18N/zh_cn.po, lib/RT/I18N/zh_tw.po,
- lib/RT/Interface/CLI.pm, lib/RT/Interface/Email.pm,
- lib/RT/Interface/Web.pm, lib/RT/Interface/Email/Auth/MailFrom.pm,
+ lib/RT/Condition/QueueChange.pm, lib/RT/Condition/UserDefined.pm,
+ lib/RT/I18N/cs.pm, lib/RT/I18N/cs.po, lib/RT/I18N/de.po,
+ lib/RT/I18N/en.po, lib/RT/I18N/es.po, lib/RT/I18N/fi.po,
+ lib/RT/I18N/fr.po, lib/RT/I18N/he.po, lib/RT/I18N/i_default.pm,
+ lib/RT/I18N/ja.po, lib/RT/I18N/nl.po, lib/RT/I18N/no.po,
+ lib/RT/I18N/pt_br.po, lib/RT/I18N/ru.po, lib/RT/I18N/zh_cn.po,
+ lib/RT/I18N/zh_tw.po, lib/RT/Interface/Email/Auth/MailFrom.pm,
lib/RT/Interface/Email/Filter/SpamAssassin.pm,
lib/RT/Search/ActiveTicketsInQueue.pm, lib/RT/Search/Generic.pm,
lib/RT/URI/base.pm, lib/RT/URI/fsck_com_rt.pm, lib/t/00smoke.t,
- lib/t/01harness.t, lib/t/data/multipart-alternative-with-umlaut,
+ lib/t/00smoke.t.in, lib/t/01harness.t, lib/t/01harness.t.in,
+ lib/t/02regression.t, lib/t/02regression.t.in, lib/t/03web.pl,
+ lib/t/03web.pl.in, lib/t/04_send_email.pl,
+ lib/t/04_send_email.pl.in,
+ lib/t/data/multipart-alternative-with-umlaut,
lib/t/data/nested-mime-sample, lib/t/data/nested-rfc-822,
lib/t/data/new-ticket-from-iso-8859-1,
lib/t/data/new-ticket-from-iso-8859-1-full,
@@ -24866,13 +26575,15 @@
lib/t/data/8859-15-message-series/msg5,
lib/t/data/8859-15-message-series/msg6,
lib/t/data/8859-15-message-series/msg7,
- lib/t/regression/mime_tests, m4/rt_enable_layout.m4,
- m4/rt_expand_var.m4, m4/rt_layout.m4,
+ lib/t/regression/00placeholder, lib/t/regression/mime_tests,
+ m4/rt_enable_layout.m4, m4/rt_expand_var.m4, m4/rt_layout.m4,
m4/rt_subst_expanded_arg.m4, sbin/extract-message-catalog,
sbin/extract_pod_tests, sbin/factory, sbin/license_tag,
- sbin/regression_harness, sbin/rt-test-dependencies.in,
+ sbin/regression_harness, sbin/rt-setup-database,
+ sbin/rt-setup-database.in, sbin/rt-test-dependencies.in,
autom4te.cache/output.0, autom4te.cache/requests,
- autom4te.cache/traces.0: import of rt 3.0.4
+ autom4te.cache/traces.0, sbin/rt-test-dependencies: Initial
+ revision
2003-07-15 04:23 ivan
@@ -24925,10 +26636,18 @@
* httemplate/view/cust_main.cgi: don't bother displaying comments
that are only whitespace/newlines
+2003-07-03 20:34 ivan
+
+ * etc/acp_logfile-parse: removing obsolete file
+
2003-07-03 20:31 ivan
* etc/abbr_state.txt: adding states
+2003-07-03 20:27 ivan
+
+ * etc/example-direct-cardin: removing ancient cybercash example
+
2003-07-03 18:37 ivan
* FS/FS/svc_acct_pop.pm: don't populate the whole initial list if
@@ -24939,6 +26658,10 @@
* FS/FS/svc_acct_pop.pm: optimize javascript to handle large
numbers of POPs
+2003-07-03 16:00 ivan
+
+ * htetc/global.asa: working DBIx::Profile again
+
2003-07-02 05:58 ivan
* FS/FS/part_pkg.pm: tyop
@@ -24950,7 +26673,7 @@
2003-07-02 05:34 ivan
- * README: change license to GPL only
+ * Artistic, README: change license to GPL only
2003-07-01 02:00 ivan
@@ -24973,7 +26696,8 @@
2003-06-30 06:18 ivan
- * FS/MANIFEST: removing deprecated freeside-overdue
+ * FS/: MANIFEST, bin/freeside-overdue: removing deprecated
+ freeside-overdue
2003-06-30 05:22 ivan
@@ -25018,6 +26742,20 @@
* FS/FS/cust_main.pm, httemplate/misc/bill.cgi: fix the credit card
retry on change or manual "retry_card" to ONCE per invoice
+2003-06-22 02:11 ivan
+
+ * bin/create-history-tables: skip pg_ tables also (ewww, showing up
+ in reverse-engineered schema)
+
+2003-06-22 02:04 ivan
+
+ * bin/create-history-tables: skip history tables that exist
+ already; easier to re-run now
+
+2003-06-13 19:04 ivan
+
+ * httemplate/docs/upgrade9.html: cust_bill2 index
+
2003-06-13 19:02 ivan
* FS/bin/freeside-setup: add index on cust_bill._date
@@ -25124,6 +26862,11 @@
* FS/FS/cust_svc.pm: add "$ignore_quantity" bypass
+2003-06-08 17:59 ivan
+
+ * httemplate/docs/install.html: documentation update from "Jesse D.
+ Guardiani" <jesse@wingnet.net>, thanks
+
2003-06-06 18:58 ivan
* FS/FS/cust_main.pm: and fix the error message
@@ -25147,6 +26890,11 @@
* FS/FS/part_export/cp.pm: add suspend/unsuspend capability to CP
export
+2003-06-05 21:42 ivan
+
+ * htetc/global.asa: database profiling bs i should just switch to
+ mason
+
2003-06-04 17:22 khoff
* FS/FS/cust_pkg.pm: order/cancel packages rewritten
@@ -25172,6 +26920,18 @@
* Makefile: 1.5.0pre2 (too late, hehe)
+2003-06-03 02:34 ivan
+
+ * bin/svc_acct_sm.import: removing (very) deprecated import
+
+2003-06-03 00:54 ivan
+
+ * httemplate/docs/upgrade10.html: upgrade docs
+
+2003-06-02 23:10 ivan
+
+ * httemplate/docs/upgrade10.html: slightly better upgrade docs
+
2003-06-02 23:09 ivan
* FS/bin/freeside-setup: use serial for primary keys in new tables
@@ -25189,11 +26949,6 @@
* FS/FS/cust_pkg.pm: add last_bill field to manpage
-2003-05-30 02:40 ivan
-
- * httemplate/docs/man/FS/part_export/.cvs_is_on_crack: force
- inclusion of httemplate/docs/man hierarchy
-
2003-05-30 02:22 ivan
* FS/FS/part_export/sqlradius.pm: sqlradius exports include "op"
@@ -25208,6 +26963,7 @@
* FS/FS/cust_main.pm, FS/FS/ClientAPI/MyAccount.pm,
fs_selfservice/FS-SelfService/cgi/make_payment.html,
fs_selfservice/FS-SelfService/cgi/payment_results.html,
+ fs_selfservice/FS-SelfService/cgi/process_payment.html,
fs_selfservice/FS-SelfService/cgi/selfservice.cgi: working
self-service self-payments!
@@ -25224,6 +26980,7 @@
* FS/FS/cust_main.pm, FS/FS/ClientAPI/MyAccount.pm,
fs_selfservice/FS-SelfService/cgi/make_payment.html,
+ fs_selfservice/FS-SelfService/cgi/process_payment.html,
fs_selfservice/FS-SelfService/cgi/selfservice.cgi: first crack at
payment processing with self-service (step two of the process)
@@ -25317,12 +27074,13 @@
2003-05-11 15:25 ivan
- * htetc/handler.pl: handler.pl updates from Richard Siddall
- <richard.siddall@elirion.net>
+ * htetc/: handler.pl, handler.pl-1.0x: handler.pl updates from
+ Richard Siddall <richard.siddall@elirion.net>
2003-05-09 23:45 ivan
- * httemplate/view/cust_main.cgi: first pass at new package list UI
+ * httemplate/view/: cust_main.cgi, cust_pkg.cgi: first pass at new
+ package list UI
2003-05-09 22:41 ivan
@@ -25353,6 +27111,19 @@
* Makefile, FS/FS/Record.pm: general Pg 7.3 fix for setting int
columns to '' / NULL
+2003-05-06 14:15 ivan
+
+ * httemplate/view/cust_main_alt.cgi: don't create new files in lieu
+ of branches
+
+2003-05-06 13:33 khoff
+
+ * httemplate/view/cust_main_alt.cgi: Can't pull out of thin air.
+
+2003-05-04 13:58 khoff
+
+ * httemplate/view/cust_main_alt.cgi: proposed cust_main.cgi
+
2003-05-02 19:06 ivan
* FS/FS/part_export/infostreet.pm, httemplate/edit/svc_acct.cgi:
@@ -25424,7 +27195,8 @@
2003-04-23 16:12 ivan
- * Makefile, htetc/handler.pl: compatible with mason 1.1! closes:
+ * Makefile, htetc/handler.pl, htetc/handler.pl-1.0x,
+ httemplate/docs/install.html: compatible with mason 1.1! closes:
bug#492
2003-04-23 15:16 ivan
@@ -25453,13 +27225,15 @@
2003-04-21 21:39 ivan
- * FS/: MANIFEST, FS/Conf.pm, FS/part_export.pm, FS/svc_domain.pm,
- FS/svc_forward.pm, FS/part_export/domain_shellcommands.pm,
- FS/part_export/forward_shellcommands.pm,
- t/part_export-forward_shellcommands.t: - mysql 4.1 is available;
- update documentation - remove last vestiges of 1.3-style
- qmail/vpopmail exports from svc_domain and svc_forward; add
- appropriate exports (closes: Bug#299)
+ * FS/MANIFEST, FS/FS/Conf.pm, FS/FS/part_export.pm,
+ FS/FS/svc_domain.pm, FS/FS/svc_forward.pm,
+ FS/FS/part_export/domain_shellcommands.pm,
+ FS/FS/part_export/forward_shellcommands.pm,
+ FS/t/part_export-forward_shellcommands.t,
+ httemplate/docs/install.html: - mysql 4.1 is available; update
+ documentation - remove last vestiges of 1.3-style qmail/vpopmail
+ exports from svc_domain and svc_forward; add appropriate
+ exports (closes: Bug#299)
2003-04-21 15:40 ivan
@@ -25475,7 +27249,8 @@
2003-04-21 14:29 khoff
- * httemplate/edit/process/generic.cgi: Navigation fixes.
+ * httemplate/edit/: part_router_field.cgi, process/generic.cgi:
+ Navigation fixes.
2003-04-21 14:13 khoff
@@ -25489,8 +27264,9 @@
2003-04-21 13:53 ivan
* FS/FS/Conf.pm, FS/FS/cust_main.pm, FS/FS/part_bill_event.pm,
- FS/bin/freeside-daily, FS/bin/freeside-setup,
- httemplate/docs/schema.html, httemplate/edit/cust_main.cgi,
+ FS/bin/freeside-daily, FS/bin/freeside-expiration-alerter,
+ FS/bin/freeside-setup, httemplate/docs/schema.html,
+ httemplate/edit/cust_main.cgi,
httemplate/edit/part_bill_event.cgi,
httemplate/edit/process/cust_main.cgi,
httemplate/search/cust_main.cgi, httemplate/view/cust_main.cgi:
@@ -25538,9 +27314,9 @@
2003-04-01 00:03 ivan
* FS/FS/Record.pm, httemplate/docs/index.html,
- httemplate/view/cust_main.cgi: - update qsearch for Pg 7.3 -
- preliminary 1.5.0 upgrade docs - syntax error in main customer
- view
+ httemplate/docs/upgrade10.html, httemplate/view/cust_main.cgi: -
+ update qsearch for Pg 7.3 - preliminary 1.5.0 upgrade docs -
+ syntax error in main customer view
2003-03-31 22:55 ivan
@@ -25552,9 +27328,9 @@
* FS/FS/cust_main.pm, FS/FS/cust_pkg.pm, debian/changelog,
debian/control, httemplate/edit/REAL_cust_pkg.cgi,
httemplate/edit/process/REAL_cust_pkg.cgi,
- httemplate/search/cust_pkg.cgi, httemplate/view/cust_main.cgi:
- correct last_bill problems with $0 invoice (non-existant) edge
- cases
+ httemplate/search/cust_pkg.cgi, httemplate/view/cust_main.cgi,
+ httemplate/view/cust_pkg.cgi: correct last_bill problems with $0
+ invoice (non-existant) edge cases
2003-03-31 15:49 ivan
@@ -25614,6 +27390,10 @@
bin/apache.export, bin/bind.export, bin/bsdshell.export,
bin/sysvshell.export: apache export!
+2003-03-11 16:44 ivan
+
+ * httemplate/docs/upgrade9.html: doc from 1.4 branch
+
2003-03-11 03:40 ivan
* FS/FS/svc_domain.pm: another pg7.3 fix
@@ -25650,13 +27430,32 @@
FS/FS/cust_bill_pkg.pm, FS/FS/cust_bill_pkg_detail.pm,
FS/FS/cust_main.pm, FS/bin/freeside-setup,
FS/t/cust_bill_pkg_detail.t, httemplate/docs/schema.html,
- httemplate/edit/part_pkg.cgi: time/data detail on invoices
+ httemplate/docs/upgrade10.html, httemplate/edit/part_pkg.cgi:
+ time/data detail on invoices
+
+2003-02-05 15:22 khoff
+
+ * FS/FS/ac.pm, FS/FS/ac_block.pm, FS/FS/ac_field.pm,
+ FS/FS/ac_type.pm, FS/FS/part_ac_field.pm,
+ httemplate/browse/ac.cgi, httemplate/browse/ac_type.cgi,
+ httemplate/edit/ac.cgi, httemplate/edit/ac_type.cgi,
+ httemplate/edit/process/ac.cgi,
+ httemplate/edit/process/ac_block.cgi,
+ httemplate/edit/process/ac_field.cgi,
+ httemplate/edit/process/ac_type.cgi,
+ httemplate/edit/process/part_ac_field.cgi: svc_broadband rewrite
2003-02-05 15:17 khoff
- * FS/FS/addr_block.pm, FS/FS/part_svc_router.pm, FS/FS/router.pm,
+ * FS/FS/addr_block.pm, FS/FS/part_router_field.pm,
+ FS/FS/part_sb_field.pm, FS/FS/part_svc_router.pm,
+ FS/FS/router.pm, FS/FS/router_field.pm, FS/FS/sb_field.pm,
FS/FS/svc_broadband.pm, httemplate/browse/addr_block.cgi,
- httemplate/browse/router.cgi, httemplate/edit/router.cgi,
+ httemplate/browse/generic.cgi,
+ httemplate/browse/part_sb_field.cgi,
+ httemplate/browse/router.cgi,
+ httemplate/edit/part_router_field.cgi,
+ httemplate/edit/part_sb_field.cgi, httemplate/edit/router.cgi,
httemplate/edit/svc_broadband.cgi,
httemplate/edit/process/addr_block/add.cgi,
httemplate/edit/process/addr_block/allocate.cgi,
@@ -25664,14 +27463,19 @@
FS/bin/freeside-setup, httemplate/edit/process/generic.cgi,
httemplate/edit/process/router.cgi,
httemplate/edit/process/svc_broadband.cgi,
- httemplate/edit/process/addr_block/split.cgi, htetc/handler.pl,
- httemplate/index.html, httemplate/view/svc_broadband.cgi:
- svc_broadband rewrite
+ httemplate/edit/process/addr_block/split.cgi, htetc/global.asa,
+ htetc/handler.pl, httemplate/index.html,
+ httemplate/view/svc_broadband.cgi: svc_broadband rewrite
2003-02-05 14:06 khoff
* FS/FS/cust_svc.pm: ip_netmask is gone now
+2003-02-04 14:04 ivan
+
+ * htetc/global.asa, httemplate/docs/install.html: 1.5-specific
+ fixes
+
2003-01-27 23:47 ivan
* FS/bin/freeside-setup: eek, and this is what caused connectup to
@@ -25699,8 +27503,9 @@
2003-01-14 01:26 ivan
* FS/MANIFEST, FS/bin/freeside-selfservice-server,
- init.d/freeside-init: move freeside-selfservice-server to proper
- MakeMaker install location
+ fs_selfservice/freeside-selfservice-server, init.d/freeside-init:
+ move freeside-selfservice-server to proper MakeMaker install
+ location
2003-01-14 00:49 ivan
@@ -25738,9 +27543,9 @@
2002-12-24 14:41 ivan
- * FS/bin/freeside-setup, httemplate/view/cust_main.cgi:
- optimization for ginourmous numbers of packages for intergate,
- whew
+ * README.1.5.0pre1, FS/bin/freeside-setup,
+ httemplate/view/cust_main.cgi: optimization for ginourmous
+ numbers of packages for intergate, whew
2002-12-23 15:56 ivan
@@ -25764,6 +27569,12 @@
* FS/FS/cust_pkg.pm: added stuff for selfservice_server-quiet,
signup_server-quiet, and emailcancel messages.
+2002-12-23 06:38 steve
+
+ * fs_selfservice/freeside-selfservice-server: added stuff for
+ selfservice_server-quiet, signup_server-quiet, and emailcancel
+ messages.
+
2002-12-23 06:22 steve
* FS/FS/: cust_bill.pm, Conf.pm: added stuff for
@@ -25853,6 +27664,11 @@
* FS/: MANIFEST, bin/freeside-sqlradius-seconds: adding
freeside-sqlradius-seconds
+2002-12-16 22:36 ivan
+
+ * httemplate/docs/install.html: add PerlModule commands to install
+ instructions
+
2002-12-16 13:52 ivan
* FS/FS/part_svc.pm, httemplate/edit/part_svc.cgi: fix for Pg 7.3,
@@ -25864,8 +27680,8 @@
2002-12-16 02:47 ivan
- * httemplate/graph/money_time.cgi: working date range selector that
- defaults to the past year!
+ * httemplate/graph/: money_time-graph.cgi, money_time.cgi: working
+ date range selector that defaults to the past year!
2002-12-14 13:18 ivan
@@ -25885,6 +27701,10 @@
* httemplate/misc/: meta-import.cgi, process/meta-import.cgi:
beginning of web-based data importer
+2002-12-09 02:54 ivan
+
+ * httemplate/docs/install.html: doc
+
2002-12-04 04:43 ivan
* bin/bind.export: really fixed now
@@ -25904,7 +27724,8 @@
2002-11-27 21:10 ivan
- * FS/FS/Conf.pm: deprecate username_policy
+ * FS/FS/Conf.pm, httemplate/docs/upgrade8.html: deprecate
+ username_policy
2002-11-26 03:58 ivan
@@ -25968,8 +27789,9 @@
2002-11-20 01:07 ivan
- * FS/bin/freeside-setup: ugh... need to increase length of payinfo
- field in cust_pay and cust_refund for ACH
+ * FS/bin/freeside-setup, httemplate/docs/upgrade9.html: ugh... need
+ to increase length of payinfo field in cust_pay and cust_refund
+ for ACH
2002-11-19 14:55 ivan
@@ -26036,6 +27858,10 @@
* FS/FS/cust_main.pm: doc
+2002-11-05 21:41 ivan
+
+ * httemplate/graph/money_time-graph.cgi: lala
+
2002-11-05 20:23 ivan
* FS/FS/part_pkg.pm: safe regex for sqlradius hour/data billing,
@@ -26072,10 +27898,18 @@
* FS/bin/freeside-sqlradius-radacctd: lost?
+2002-11-04 18:15 ivan
+
+ * httemplate/graph/money_time-graph.cgi: local kludge
+
2002-11-04 15:40 ivan
* FS/FS/CGI.pm: balance on small_custview
+2002-11-04 13:20 ivan
+
+ * httemplate/docs/upgrade9.html: doc
+
2002-11-04 12:51 ivan
* httemplate/view/svc_acct.cgi: fix cosmetic bug on online time
@@ -26083,7 +27917,8 @@
2002-11-01 16:13 ivan
- * httemplate/graph/money_time.cgi: whew, glad i had a copy of this
+ * httemplate/graph/: money_time-graph.cgi, money_time.cgi: whew,
+ glad i had a copy of this
2002-10-28 05:22 ivan
@@ -26144,8 +27979,8 @@
2002-10-19 20:28 ivan
- * FS/FS/: part_export.pm, part_export/vpopmail.pm: vpopmail restart
- export option
+ * FS/FS/part_export.pm, FS/FS/part_export/vpopmail.pm,
+ eg/vpopmailrestart: vpopmail restart export option
2002-10-18 09:54 ivan
@@ -26199,6 +28034,11 @@
httemplate/view/svc_acct.cgi: radacct update: use sqlradius for
datasrc, not plandata options (whew)
+2002-10-17 04:17 ivan
+
+ * httemplate/search/cust_bill.cgi: another mason fix, this one from
+ 5
+
2002-10-15 02:54 ivan
* FS/FS/cust_bill.pm: ach fix s/ECHECK/CHECK/
@@ -26224,7 +28064,15 @@
2002-10-13 00:14 ivan
- * httemplate/docs/session.html: doh
+ * httemplate/docs/: session.html, upgrade9.html: doh
+
+2002-10-13 00:13 ivan
+
+ * httemplate/docs/upgrade9.html: msgcat docs for upgrade
+
+2002-10-12 23:49 ivan
+
+ * httemplate/docs/install.html: don't use ILIKE (7.1-ism) anymore
2002-10-12 18:14 ivan
@@ -26242,8 +28090,9 @@
2002-10-12 06:46 ivan
- * httemplate/: edit/cust_main.cgi, view/cust_main.cgi:
- dayphone/nightphone as customizable labels, closes: Bug#464
+ * bin/populate-msgcat, httemplate/edit/cust_main.cgi,
+ httemplate/view/cust_main.cgi: dayphone/nightphone as
+ customizable labels, closes: Bug#464
2002-10-12 06:26 ivan
@@ -26321,7 +28170,8 @@
2002-10-04 05:56 ivan
* FS/FS/type_pkgs.pm, FS/FS/part_export/sqlradius.pm,
- FS/bin/freeside-setup, httemplate/edit/process/cust_pkg.cgi,
+ FS/bin/freeside-setup, httemplate/docs/install.html,
+ httemplate/edit/process/cust_pkg.cgi,
httemplate/misc/change_pkg.cgi, httemplate/search/cust_main.cgi,
httemplate/view/cust_main.cgi: working on the road: - easier
"change package" link for changing one package to another -
@@ -26355,6 +28205,11 @@
* FS/FS/UID.pm: don't chop blanks
+2002-09-26 23:00 ivan
+
+ * htetc/global.asa: only load Devel::AutoProfiler if it is
+ installed
+
2002-09-26 22:36 ivan
* FS/bin/freeside-adduser: lock mapsecrets file
@@ -26377,7 +28232,7 @@
2002-09-25 02:11 ivan
- * Makefile: doc
+ * Makefile, httemplate/docs/install.html: doc
2002-09-25 02:09 ivan
@@ -26390,8 +28245,9 @@
2002-09-23 07:27 ivan
- * FS/FS/CGI.pm, htetc/handler.pl: global.asa changes for profiling
- redirects header-handling changes necessary for chart .cgis
+ * FS/FS/CGI.pm, htetc/global.asa, htetc/handler.pl: global.asa
+ changes for profiling redirects header-handling changes necessary
+ for chart .cgis
2002-09-23 01:50 ivan
@@ -26399,12 +28255,14 @@
2002-09-21 04:17 ivan
- * FS/bin/freeside-setup, httemplate/docs/schema.dia,
- httemplate/docs/schema.html, FS/FS/cust_bill.pm,
- FS/FS/cust_bill_pkg.pm, FS/FS/cust_main.pm,
- FS/FS/cust_main_county.pm,
- httemplate/browse/cust_main_county.cgi: all taxes now have names.
- closes: Bug#15
+ * README.1.5.0pre1, FS/bin/freeside-setup,
+ httemplate/docs/schema.dia, httemplate/docs/schema.html,
+ FS/FS/cust_bill.pm, FS/FS/cust_bill_pkg.pm, FS/FS/cust_main.pm,
+ FS/FS/cust_main_county.pm, bin/create-history-tables,
+ httemplate/browse/cust_main_county.cgi,
+ httemplate/edit/cust_main_county.cgi,
+ httemplate/edit/process/cust_main_county.cgi: all taxes now have
+ names. closes: Bug#15
2002-09-20 08:49 ivan
@@ -26424,10 +28282,11 @@
2002-09-20 08:47 ivan
- * FS/: MANIFEST, bin/freeside-addoutsourceuser,
- bin/freeside-deloutsource, bin/freeside-deloutsourceuser,
- bin/freeside-deluser, bin/freeside-setup: add freeside-deluser,
- freeside-deloutsource and freeside-deloutsourceuser
+ * FS/MANIFEST, FS/bin/freeside-addoutsourceuser,
+ FS/bin/freeside-deloutsource, FS/bin/freeside-deloutsourceuser,
+ FS/bin/freeside-deluser, FS/bin/freeside-setup,
+ bin/populate-msgcat: add freeside-deluser, freeside-deloutsource
+ and freeside-deloutsourceuser
2002-09-20 08:46 ivan
@@ -26439,17 +28298,29 @@
2002-09-20 05:50 ivan
- * FS/bin/freeside-setup: move from bin/fs-setup to
+ * FS/bin/freeside-setup, bin/fs-setup,
+ httemplate/docs/install.html: move from bin/fs-setup to
FS/bin/freeside-setup
+2002-09-20 05:04 ivan
+
+ * README.1.5.0pre1, httemplate/docs/install.html: doc NetAddr::IP
+ dependancy
+
2002-09-20 03:16 ivan
- * FS/FS/UID.pm: change otaker fields to 32 chars
+ * README.1.5.0pre1, FS/FS/UID.pm, bin/fs-setup: change otaker
+ fields to 32 chars
2002-09-19 06:34 ivan
- * FS/FS/Record.pm: use database SERIAL or AUTO_INCREMENT for
- primary keys, finally, yay! closes: bug#69
+ * bin/fs-setup, FS/FS/Record.pm, bin/dbdef-create: use database
+ SERIAL or AUTO_INCREMENT for primary keys, finally, yay! closes:
+ bug#69
+
+2002-09-19 06:25 ivan
+
+ * README.1.5.0pre1: preliminary upgrade instructions
2002-09-19 01:43 ivan
@@ -26459,6 +28330,10 @@
* FS/FS/svc_acct.pm: remove extra definition of $cust_pkg
+2002-09-19 00:15 ivan
+
+ * httemplate/view/cust_pkg.cgi: cancel later in view UI... hmm
+
2002-09-18 15:50 ivan
* FS/FS/Conf.pm, FS/FS/cust_main_invoice.pm, FS/FS/svc_acct.pm,
@@ -26473,7 +28348,8 @@
2002-09-18 05:10 ivan
- * httemplate/docs/: index.html, legacy.html: doc
+ * httemplate/docs/: index.html, legacy.html, upgrade4.html,
+ upgrade5.html, upgrade6.html: doc
2002-09-17 03:21 ivan
@@ -26485,10 +28361,15 @@
* FS/FS.pm, FS/MANIFEST, FS/FS/InitHandler.pm, FS/FS/cust_pkg.pm,
FS/FS/part_export.pm, FS/FS/part_svc.pm, FS/FS/svc_acct.pm,
- httemplate/index.html, httemplate/docs/schema.dia,
- httemplate/docs/schema.html, httemplate/edit/part_svc.cgi,
- httemplate/edit/process/part_svc.cgi, httemplate/misc/link.cgi,
- httemplate/search/svc_domain.cgi: remove svc_acct_sm
+ FS/FS/svc_acct_sm.pm, FS/t/svc_acct_sm.t, httemplate/index.html,
+ httemplate/docs/schema.dia, httemplate/docs/schema.html,
+ httemplate/edit/part_svc.cgi, httemplate/edit/svc_acct_sm.cgi,
+ httemplate/edit/process/part_svc.cgi,
+ httemplate/edit/process/svc_acct_sm.cgi,
+ httemplate/misc/link.cgi, httemplate/search/svc_acct_sm.cgi,
+ httemplate/search/svc_acct_sm.html,
+ httemplate/search/svc_domain.cgi,
+ httemplate/view/svc_acct_sm.cgi: remove svc_acct_sm
2002-09-16 17:40 ivan
@@ -26501,6 +28382,10 @@
stop
overwriting existing invoice destinations
+2002-09-16 02:27 ivan
+
+ * FS/bin/freeside-expiration-alerter: skip empty expiration dates
+
2002-09-11 02:28 ivan
* httemplate/browse/svc_acct_pop.cgi: mason error
@@ -26514,18 +28399,34 @@
* FS/FS/cust_bill.pm: Business::OnlinePaymet fix for processors w/o
order numbers, like VirtualNet
+2002-09-09 17:37 ivan
+
+ * httemplate/docs/upgrade9.html: doc: need Net::SSH 0.07 for 1.4.1
+
2002-09-09 16:05 khoff
- * httemplate/: edit/svc_broadband.cgi,
+ * httemplate/: browse/ac.cgi, browse/ac_type.cgi, edit/ac.cgi,
+ edit/ac_type.cgi, edit/svc_broadband.cgi, edit/process/ac.cgi,
+ edit/process/ac_block.cgi, edit/process/ac_field.cgi,
+ edit/process/ac_type.cgi, edit/process/part_ac_field.cgi,
edit/process/svc_broadband.cgi, view/svc_broadband.cgi:
svc_broadband merge
2002-09-09 16:01 khoff
- * FS/FS/cust_svc.pm, FS/FS/part_export.pm, httemplate/index.html,
+ * FS/FS/cust_svc.pm, FS/FS/part_export.pm, bin/fs-setup,
+ htetc/global.asa, httemplate/index.html,
httemplate/edit/part_svc.cgi,
- httemplate/edit/process/part_svc.cgi, FS/FS/svc_broadband.pm:
- svc_broadband merge
+ httemplate/edit/process/part_svc.cgi, FS/FS/ac.pm,
+ FS/FS/ac_block.pm, FS/FS/ac_field.pm, FS/FS/ac_type.pm,
+ FS/FS/part_ac_field.pm, FS/FS/svc_broadband.pm: svc_broadband
+ merge
+
+2002-09-09 15:57 ivan
+
+ * FS/bin/: freeside-cc-receipts-report, freeside-credit-report,
+ freeside-receivables-report, freeside-tax-report: allow . in
+ untaint_argv, for usernames
2002-09-09 15:56 khoff
@@ -26571,7 +28472,7 @@
2002-09-06 19:27 ivan
- * httemplate/docs/index.html: 1.4.1
+ * httemplate/docs/: index.html, upgrade9.html: 1.4.1
2002-09-06 19:19 ivan
@@ -26592,6 +28493,10 @@
* FS/FS/cust_bill.pm: Business::OnlinePayment::VitualNet
compatibility
+2002-09-05 06:59 ivan
+
+ * ANNOUCE.1.4.0: naw
+
2002-09-05 06:50 ivan
* httemplate/browse/part_svc.cgi: don't show "clone an existing
@@ -26783,14 +28688,52 @@
2002-08-11 23:17 ivan
- * rt/: Makefile, bin/mason_handler.fcgi, bin/mason_handler.scgi,
- bin/rt-mailgate, etc/schema.Pg, lib/RT.pm, lib/RT/Record.pm:
- import rt 2.0.14
+ * rt/: COPYING, ChangeLog, Makefile, README, TODO,
+ bin/initacls.Oracle, bin/initacls.Pg, bin/initacls.mysql,
+ bin/mason_handler.fcgi, bin/mason_handler.scgi, bin/rt,
+ bin/rt-mailgate, bin/rtadmin, bin/webmux.pl, docs/README.docs,
+ docs/Security, docs/rt.gif, docs/design_docs/CARS,
+ docs/design_docs/TransactionTypes.txt, docs/design_docs/acls,
+ docs/design_docs/basic-definitions.txt,
+ docs/design_docs/cli_spec, docs/design_docs/cvs_integration,
+ docs/design_docs/evil_plans,
+ docs/design_docs/link-definitions.txt,
+ docs/design_docs/local_hacking,
+ docs/design_docs/subscription-definitions.txt,
+ docs/design_docs/users, etc/acl.Oracle, etc/acl.Pg,
+ etc/acl.mysql, etc/config.pm, etc/rt.spec, etc/schema.Oracle,
+ etc/schema.Pg, etc/schema.mysql, etc/schema.pm, lib/MANIFEST,
+ lib/MANIFEST.SKIP, lib/Makefile.PL, lib/RT.pm, lib/test.pl,
+ lib/RT/ACE.pm, lib/RT/ACL.pm, lib/RT/Attachment.pm,
+ lib/RT/Attachments.pm, lib/RT/CurrentUser.pm, lib/RT/Date.pm,
+ lib/RT/EasySearch.pm, lib/RT/Group.pm, lib/RT/GroupMember.pm,
+ lib/RT/GroupMembers.pm, lib/RT/Groups.pm, lib/RT/Handle.pm,
+ lib/RT/Keyword.pm, lib/RT/KeywordSelect.pm,
+ lib/RT/KeywordSelects.pm, lib/RT/Keywords.pm, lib/RT/Link.pm,
+ lib/RT/Links.pm, lib/RT/ObjectKeyword.pm,
+ lib/RT/ObjectKeywords.pm, lib/RT/Queue.pm, lib/RT/Queues.pm,
+ lib/RT/Record.pm, lib/RT/Scrip.pm, lib/RT/ScripAction.pm,
+ lib/RT/ScripActions.pm, lib/RT/ScripCondition.pm,
+ lib/RT/ScripConditions.pm, lib/RT/Scrips.pm, lib/RT/Template.pm,
+ lib/RT/Templates.pm, lib/RT/TestHarness.pm, lib/RT/Ticket.pm,
+ lib/RT/Tickets.pm, lib/RT/Transaction.pm, lib/RT/Transactions.pm,
+ lib/RT/User.pm, lib/RT/Users.pm, lib/RT/Watcher.pm,
+ lib/RT/Watchers.pm, lib/RT/Action/Autoreply.pm,
+ lib/RT/Action/Generic.pm, lib/RT/Action/Notify.pm,
+ lib/RT/Action/NotifyAsComment.pm, lib/RT/Action/OpenDependent.pm,
+ lib/RT/Action/ResolveMembers.pm, lib/RT/Action/SendEmail.pm,
+ lib/RT/Action/SendPasswordEmail.pm,
+ lib/RT/Action/StallDependent.pm,
+ lib/RT/Condition/AnyTransaction.pm, lib/RT/Condition/Generic.pm,
+ lib/RT/Condition/NewDependency.pm,
+ lib/RT/Condition/StatusChange.pm, lib/RT/Interface/CLI.pm,
+ lib/RT/Interface/Email.pm, lib/RT/Interface/Web.pm: import rt
+ 2.0.14
2002-08-02 17:39 ivan
- * httemplate/docs/legacy.html: remove some extra modules from
- install doc
+ * httemplate/docs/: install.html, legacy.html: remove some extra
+ modules from install doc
2002-07-31 11:55 ivan
@@ -26815,6 +28758,14 @@
* FS/FS/: part_export.pm, part_export/shellcommands.pm:
shellcommands edit gecos field too
+2002-07-25 18:38 ivan
+
+ * httemplate/docs/install.html: tyop
+
+2002-07-25 18:31 ivan
+
+ * httemplate/docs/install.html: tyop
+
2002-07-23 05:37 ivan
* FS/FS/svc_acct.pm: fix small bugs in duplicate username checking
@@ -26824,9 +28775,16 @@
* FS/t/ClientAPI.t, fs_selfservice/FS-SelfService/cgi/passwd.html:
adding
+2002-07-22 03:41 ivan
+
+ * httemplate/docs/install.html: no mysql in 1.4.0 release.
+ hopefully 1.4.1
+
2002-07-22 03:20 ivan
- * Makefile: 1.4.0
+ * ANNOUCE.1.4.0, Makefile, README.1.4.0pre11, README.1.4.0pre12,
+ README.1.4.0pre13, README.1.4.0pre14, README.1.4.0pre8,
+ README.1.4.0pre9: 1.4.0
2002-07-22 03:18 ivan
@@ -26843,8 +28801,8 @@
2002-07-16 05:28 ivan
- * fs_selfservice/: DEPLOY, fs_passwd_test,
- FS-SelfService/SelfService.pm,
+ * fs_selfservice/: DEPLOY, freeside-selfservice-server,
+ fs_passwd_test, FS-SelfService/SelfService.pm,
FS-SelfService/freeside-selfservice-clientd,
FS-SelfService/cgi/login.html, FS-SelfService/cgi/myaccount.html,
FS-SelfService/cgi/selfservice.cgi,
@@ -26864,7 +28822,7 @@
2002-07-15 01:28 ivan
- * fs_selfservice/: fs_passwd_test,
+ * fs_selfservice/: freeside-selfservice-server, fs_passwd_test,
FS-SelfService/freeside-selfservice-clientd: working framework,
no hung clients, whew
@@ -26872,9 +28830,15 @@
* bin/bind.import: finally a working DNS::ZoneParse
+2002-07-13 17:28 ivan
+
+ * httemplate/docs/: install.html, upgrade8.html: no mason 1.1x yet
+ :(
+
2002-07-11 06:52 ivan
- * fs_selfservice/: DEPLOY, fs_passwd_test, FS-SelfService/MANIFEST,
+ * fs_selfservice/: DEPLOY, freeside-selfservice-server,
+ fs_passwd_test, FS-SelfService/MANIFEST,
FS-SelfService/SelfService.pm,
FS-SelfService/freeside-selfservice-clientd: finally working
async framework
@@ -26897,20 +28861,110 @@
* httemplate/edit/: REAL_cust_pkg.cgi, process/REAL_cust_pkg.cgi:
edit expiration dates
+2002-07-08 03:52 ivan
+
+ * httemplate/search/cust_bill.cgi: remove perl-side sort routines,
+ no longer needed
+
2002-07-08 03:01 ivan
* FS/FS/part_export.pm: default linux/netbsd shellcommand userdel
should remove home directories
+2002-07-08 01:39 ivan
+
+ * httemplate/docs/install.html: new and improved instructions! now
+ even more idiot proof!
+
2002-07-07 10:49 ivan
* FS/FS/svc_acct.pm: rewrite uid-dup checking to be
new-export-aware, closes: #431
+2002-07-07 07:33 ivan
+
+ * httemplate/search/cust_bill.cgi: clean up after rewrite... turned
+ out rather nice
+
+2002-07-07 07:28 ivan
+
+ * httemplate/search/cust_bill.cgi: fixing 30/60/90/120...
+
+2002-07-07 07:26 ivan
+
+ * httemplate/search/cust_bill.cgi: just might work
+
+2002-07-07 07:24 ivan
+
+ * httemplate/search/cust_bill.cgi: that would be nice...
+
+2002-07-07 07:18 ivan
+
+ * httemplate/search/cust_bill.cgi: fix 30/60/90/120 browses
+
+2002-07-07 07:14 ivan
+
+ * httemplate/search/cust_bill.cgi: UI
+
+2002-07-07 07:12 ivan
+
+ * httemplate/search/cust_bill.cgi: totals and order by
+
+2002-07-07 07:00 ivan
+
+ * httemplate/search/cust_bill.cgi: try for correct totals
+
+2002-07-07 06:52 ivan
+
+ * httemplate/search/cust_bill.cgi: don't recalculate owed
+
+2002-07-07 06:31 ivan
+
+ * httemplate/search/cust_bill.cgi: comma
+
+2002-07-07 06:30 ivan
+
+ * httemplate/search/cust_bill.cgi: calculate owed as subquery here
+ too
+
+2002-07-07 06:25 ivan
+
+ * httemplate/search/cust_bill.cgi: don't forget to where the where
+ clause
+
+2002-07-07 06:23 ivan
+
+ * httemplate/search/cust_bill.cgi: try for working paged invoices,
+ this time with subqueries
+
+2002-07-07 04:45 ivan
+
+ * httemplate/search/cust_bill.cgi: wtf?
+
+2002-07-07 04:30 ivan
+
+ * httemplate/search/cust_bill.cgi: invoice search with possibly
+ working pager
+
+2002-07-07 04:03 ivan
+
+ * httemplate/search/cust_bill.cgi: move query logic from perl to
+ sql for scalability
+
+2002-07-06 05:53 ivan
+
+ * httemplate/docs/install.html: new! improved! now even more
+ idiot-proof!
+
2002-07-06 05:15 ivan
* Makefile: beta2
+2002-07-06 05:13 ivan
+
+ * bin/fs-setup: fix Can't use an undefined value as an ARRAY
+ reference at ./fs-setup line 209, <STDIN> line 3.
+
2002-07-06 04:08 ivan
* httemplate/: edit/svc_forward.cgi, view/svc_forward.cgi: fix UI
@@ -26923,12 +28977,16 @@
2002-07-06 01:29 ivan
- * httemplate/view/cust_main.cgi: speling
+ * httemplate/view/: cust_pkg.cgi, cust_main.cgi: speling
2002-07-06 00:32 ivan
* httemplate/edit/part_pkg.cgi: fix speling
+2002-07-06 00:31 ivan
+
+ * ANNOUCE.1.4.0: this file should probably go away soon...
+
2002-07-06 00:30 ivan
* FS/FS/: Conf.pm, part_export.pm, svc_www.pm,
@@ -26947,8 +29005,9 @@
2002-07-04 03:35 ivan
* httemplate/browse/: agent.cgi, agent_type.cgi,
- part_bill_event.cgi, part_export.cgi, part_pkg.cgi, part_svc.cgi,
- svc_acct_pop.cgi: move "add" links to the top
+ part_bill_event.cgi, part_export.cgi, part_pkg.cgi,
+ part_referral.cgi, part_svc.cgi, svc_acct_pop.cgi: move "add"
+ links to the top
2002-07-03 07:45 ivan
@@ -27029,6 +29088,10 @@
* FS/FS/part_export.pm: fix usermod commands for freebsd
+2002-07-02 07:38 ivan
+
+ * ANNOUCE.1.4.0: beta1!
+
2002-07-02 07:37 ivan
* Makefile: beta1!!
@@ -27066,6 +29129,10 @@
* FS/bin/freeside-queued: grr old openssh grr freebsd
+2002-07-02 03:01 ivan
+
+ * httemplate/docs/install.html: freeside group
+
2002-07-02 02:42 ivan
* FS/bin/freeside-queued: fleabsd grr
@@ -27103,7 +29170,7 @@
2002-06-30 04:01 ivan
- * CREDITS: administrivia
+ * ANNOUCE.1.4.0, CREDITS: administrivia
2002-06-30 00:17 ivan
@@ -27130,7 +29197,12 @@
2002-06-28 13:31 ivan
- * FS/FS/svc_acct.pm: better error message for illegal password
+ * FS/FS/svc_acct.pm, bin/populate-msgcat: better error message for
+ illegal password
+
+2002-06-28 13:23 ivan
+
+ * bin/fs-setup: not anymore...
2002-06-28 13:21 ivan
@@ -27186,8 +29258,8 @@
2002-06-26 00:42 ivan
- * bin/: bsdshell.export, sysvshell.export: shell.export ->
- bsdshell.export & sysvshell.export
+ * bin/: bsdshell.export, shell.export, sysvshell.export:
+ shell.export -> bsdshell.export & sysvshell.export
2002-06-25 20:53 ivan
@@ -27265,6 +29337,10 @@
* FS/FS/svc_acct.pm: better error messages on uid duplicates... uid
stuff still needs to be rewritten for new exports
+2002-06-21 02:28 ivan
+
+ * httemplate/docs/upgrade8.html: don't forget part_svc in upgrades
+
2002-06-21 02:15 ivan
* bin/passwd.import: oops
@@ -27278,15 +29354,23 @@
* bin/passwd.import: tiny bit better passwd.import
+2002-06-21 02:03 ivan
+
+ * httemplate/docs/upgrade8.html: doc
+
2002-06-21 01:29 ivan
- * httemplate/index.html: uid search on main menu, updated upgrade
- docs
+ * httemplate/: index.html, docs/upgrade8.html: uid search on main
+ menu, updated upgrade docs
2002-06-20 15:35 ivan
* FS/FS/part_export/infostreet.pm: fix infostreet contact field foo
+2002-06-20 15:31 ivan
+
+ * httemplate/docs/install.html: doc
+
2002-06-19 18:29 ivan
* FS/FS/part_export.pm, FS/FS/part_export/shellcommands.pm,
@@ -27334,7 +29418,7 @@
2002-06-14 04:26 ivan
- * Makefile: 1.4.0pre14
+ * ANNOUCE.1.4.0, Makefile, README.1.4.0pre14: 1.4.0pre14
2002-06-14 04:22 ivan
@@ -27356,7 +29440,11 @@
2002-06-13 20:12 ivan
- * httemplate/index.html: remove classic interface
+ * httemplate/: classic.html, index.html: remove classic interface
+
+2002-06-13 19:52 ivan
+
+ * httemplate/docs/: install.html, mysql.html: mysql support!
2002-06-13 19:25 ivan
@@ -27396,9 +29484,22 @@
* FS/FS/cust_main.pm: fix problems with code that resets invoice
events
+2002-06-11 11:32 ivan
+
+ * bin/shell.export: don't export empty files
+
+2002-06-11 11:25 ivan
+
+ * bin/shell.export: use FS::cust_svc and FS::svc_acct
+
+2002-06-11 11:23 ivan
+
+ * bin/shell.export: bsd only for now
+
2002-06-11 11:20 ivan
- * bin/bind.export: perl 5.005 needs an explicit mask for mkdir
+ * bin/: bind.export, shell.export: perl 5.005 needs an explicit
+ mask for mkdir
2002-06-11 02:51 ivan
@@ -27406,7 +29507,7 @@
2002-06-11 02:46 ivan
- * bin/bind.export: add preliminary bsd shell export
+ * bin/: bind.export, shell.export: add preliminary bsd shell export
2002-06-11 02:14 ivan
@@ -27476,14 +29577,14 @@
2002-06-09 18:39 khoff
- * FS/FS/part_pkg.pm, FS/FS/pkg_svc.pm,
+ * FS/FS/part_pkg.pm, FS/FS/pkg_svc.pm, bin/fs-setup,
httemplate/browse/part_pkg.cgi, httemplate/docs/schema.html,
httemplate/edit/part_pkg.cgi: Rollback part_pkg.def_svcpart
changes.
2002-06-08 00:48 khoff
- * FS/FS/part_pkg.pm, FS/FS/pkg_svc.pm,
+ * FS/FS/part_pkg.pm, FS/FS/pkg_svc.pm, bin/fs-setup,
httemplate/browse/part_pkg.cgi, httemplate/docs/schema.html,
httemplate/edit/part_pkg.cgi: Default svcpart support for
part_pkg. Fixes 'bug' with new customer and online signup.
@@ -27497,6 +29598,11 @@
* httemplate/search/: cust_main.cgi, cust_pkg.cgi, svc_acct.cgi:
more mysql goodness, thanks dale
+2002-06-04 10:37 ivan
+
+ * httemplate/docs/install.html: small doc patch from
+ baloo@gimpgirl.org
+
2002-06-04 07:35 ivan
* FS/FS/: cust_credit.pm, cust_pay.pm: fix unsuspendauto
@@ -27512,6 +29618,10 @@
* conf/declinetemplate: misspelling
+2002-05-31 15:37 ivan
+
+ * bin/fs-setup: no state necessary in batch cards (i18n)
+
2002-05-31 13:34 ivan
* FS/FS/part_export.pm: dammit i want to catch export subclass
@@ -27579,12 +29689,15 @@
2002-05-28 21:40 ivan
- * fs_selfservice/FS-SelfService/: Changes, MANIFEST, Makefile.PL,
- SelfService.pm, test.pl: add fs_selfservice
+ * fs_selfservice/: freeside-selfservice-server,
+ FS-SelfService/Changes, FS-SelfService/MANIFEST,
+ FS-SelfService/Makefile.PL, FS-SelfService/SelfService.pm,
+ FS-SelfService/test.pl: add fs_selfservice
2002-05-28 14:22 ivan
- * FS/FS/svc_acct.pm: better error message for "Illegal password"
+ * FS/FS/svc_acct.pm, bin/populate-msgcat: better error message for
+ "Illegal password"
2002-05-28 00:55 ivan
@@ -27599,8 +29712,8 @@
2002-05-23 06:00 ivan
- * FS/FS/domain_record.pm, bin/bind.import,
- httemplate/edit/process/domain_record.cgi,
+ * ANNOUCE.1.4.0, FS/FS/domain_record.pm, bin/bind.import,
+ bin/svc_domain.import, httemplate/edit/process/domain_record.cgi,
httemplate/view/svc_domain.cgi: bind: allow adding slave domains
too
@@ -27633,11 +29746,19 @@
* FS/FS/part_export/sqlradius.pm: 5.6-isms
+2002-05-20 04:02 ivan
+
+ * bin/svc_domain.import: [no log message]
+
2002-05-18 02:51 ivan
* FS/FS/: cust_bill.pm, cust_pay.pm, svc_domain.pm: Mail::Internet
1.44
+2002-05-17 06:51 ivan
+
+ * httemplate/docs/install.html: tyop
+
2002-05-16 20:47 ivan
* FS/FS/svc_acct.pm: freebsd `toor' user
@@ -27648,6 +29769,11 @@
t/part_export-bsdshell.t, t/part_export-textradius.t: adding
(stub) bsdshell and textradius exports
+2002-05-16 07:28 ivan
+
+ * bin/svc_acct.export: ip address is added by radius_reply method
+ already
+
2002-05-16 07:27 ivan
* FS/MANIFEST, eg/export_template.pm: add (stub) bsdshell and
@@ -27668,6 +29794,10 @@
* FS/FS/svc_acct.pm: allow freebsd `toor' root user
+2002-05-16 00:53 ivan
+
+ * httemplate/docs/upgrade8.html: upgrade docs: run populate-msgcat
+
2002-05-15 07:00 ivan
* FS/FS/: queue.pm, part_export/sqlradius.pm: use job dependancies
@@ -27676,12 +29806,13 @@
2002-05-15 06:24 ivan
- * Makefile, FS/FS.pm, FS/MANIFEST, FS/FS/queue.pm,
- FS/FS/queue_depend.pm, FS/FS/part_export/sqlradius.pm,
- FS/bin/freeside-queued, FS/t/queue_depend.t,
- eg/export_template.pm, httemplate/docs/schema.dia,
- httemplate/docs/schema.html, httemplate/docs/schema.png: queue
- dependancies
+ * ANNOUCE.1.4.0, Makefile, README.1.4.0pre13, FS/FS.pm,
+ FS/MANIFEST, FS/FS/queue.pm, FS/FS/queue_depend.pm,
+ FS/FS/part_export/sqlradius.pm, FS/bin/freeside-queued,
+ FS/t/queue_depend.t, bin/fs-setup, eg/export_template.pm,
+ httemplate/docs/install.html, httemplate/docs/schema.dia,
+ httemplate/docs/schema.html, httemplate/docs/schema.png,
+ httemplate/docs/upgrade8.html: queue dependancies
2002-05-14 00:36 ivan
@@ -27708,6 +29839,10 @@
* Makefile: INSTALLGROUP
+2002-05-09 09:41 ivan
+
+ * bin/populate-msgcat: permissions
+
2002-05-09 08:26 ivan
* Makefile: final make release?
@@ -27725,6 +29860,12 @@
* httemplate/: edit/cust_main.cgi, view/cust_main.cgi:
s/Referral/Advertising source/
+2002-05-09 08:14 ivan
+
+ * httemplate/docs/: install.html, mysql.html: attempt to avoid
+ people installing and asking for help with MySQL despite the VERY
+ FUCKING CLEAR instructions that it isn't supported.
+
2002-05-09 08:12 ivan
* FS/FS/cust_main_county.pm: don't duplicate state/county/country
@@ -27733,13 +29874,15 @@
2002-05-09 05:38 ivan
* FS/FS/Conf.pm, FS/FS/cust_main.pm, FS/FS/cust_main_county.pm,
- FS/FS/part_pkg.pm, FS/t/cust_tax_exempt.t, htetc/handler.pl,
- httemplate/browse/agent.cgi,
+ FS/FS/part_pkg.pm, FS/t/cust_tax_exempt.t, htetc/global.asa,
+ htetc/handler.pl, httemplate/browse/agent.cgi,
httemplate/browse/cust_main_county.cgi,
httemplate/edit/agent.cgi, httemplate/edit/cust_main.cgi,
httemplate/edit/cust_main_county-expand.cgi,
+ httemplate/edit/cust_main_county.cgi,
httemplate/edit/part_pkg.cgi,
- httemplate/edit/process/cust_main_county-expand.cgi: texas tax!
+ httemplate/edit/process/cust_main_county-expand.cgi,
+ httemplate/edit/process/cust_main_county.cgi: texas tax!
2002-05-06 06:36 ivan
@@ -27748,10 +29891,12 @@
2002-05-04 08:00 ivan
- * FS/FS.pm, FS/MANIFEST, FS/FS/cust_main_county.pm,
- FS/FS/cust_tax_exempt.pm, FS/FS/part_pkg.pm,
+ * README.1.4.0pre12, FS/FS.pm, FS/MANIFEST,
+ FS/FS/cust_main_county.pm, FS/FS/cust_tax_exempt.pm,
+ FS/FS/part_pkg.pm, FS/t/cust_tax_exempt.pm, bin/fs-setup,
httemplate/docs/admin.html, httemplate/docs/schema.dia,
- httemplate/docs/schema.html: schema changes for proper texas tax
+ httemplate/docs/schema.html, httemplate/docs/upgrade8.html:
+ schema changes for proper texas tax
2002-05-03 18:11 ivan
@@ -27762,6 +29907,10 @@
* httemplate/search/cust_pkg.cgi: fix ranges on cust_pkg search
+2002-05-03 17:49 ivan
+
+ * httemplate/search/cust_pkg.html: point at correct .cgi
+
2002-05-03 17:47 ivan
* FS/FS/cust_pkg.pm: prevent stuff passed from template/user from
@@ -27769,15 +29918,16 @@
2002-05-03 17:32 ivan
- * httemplate/search/cust_pkg.cgi: lilunixbtch: trying to pull
- accounts based on next billdate tofu_beast420: hmm a report
- ordered by next bill date? tofu_beast420: i don't know how you'd
- do that per _customer_ since a customer could have lots of
- packages, but you could do a per-package report maybe?
+ * httemplate/search/: cust_pkg.cgi, cust_pkg.html: lilunixbtch:
+ trying to pull accounts based on next billdate tofu_beast420: hmm
+ a report ordered by next bill date? tofu_beast420: i don't know
+ how you'd do that per _customer_ since a customer could have lots
+ of packages, but you could do a per-package report maybe?
2002-04-29 22:43 ivan
- * FS/FS/part_export.pm: better BIND integration
+ * FS/FS/part_export.pm, bin/svc_domain.import: better BIND
+ integration
2002-04-26 04:14 ivan
@@ -27804,8 +29954,8 @@
2002-04-24 02:03 ivan
- * FS/FS/cust_main.pm: msgcat error for credit card expiration
- (closes: Bug#407)
+ * FS/FS/cust_main.pm, bin/populate-msgcat: msgcat error for credit
+ card expiration (closes: Bug#407)
2002-04-23 00:32 ivan
@@ -27843,13 +29993,14 @@
2002-04-20 05:37 ivan
- * FS/FS/part_export.pm, httemplate/edit/part_export.cgi: bind
- export
+ * ANNOUCE.1.4.0, FS/FS/part_export.pm,
+ httemplate/edit/part_export.cgi: bind export
2002-04-20 04:57 ivan
* FS/FS/domain_record.pm, FS/FS/part_export.pm, bin/passwd.import,
- bin/svc_domain.erase, httemplate/docs/legacy.html:
+ bin/svc_domain.erase, bin/svc_domain.import,
+ httemplate/docs/legacy.html:
working BIND import
2002-04-20 03:49 ivan
@@ -27864,6 +30015,14 @@
* FS/FS/domain_record.pm: allow uppercase zones...
+2002-04-19 23:34 ivan
+
+ * bin/populate-msgcat: perms
+
+2002-04-19 23:33 ivan
+
+ * bin/fs-setup: fixup fs-setup
+
2002-04-19 19:06 ivan
* FS/FS/: cust_pkg.pm, cust_svc.pm: fix problem with edge case
@@ -27903,6 +30062,35 @@
* FS/FS/Record.pm: get rid of debugging cruft
+2002-04-16 22:48 ivan
+
+ * fs_passwd/fs_passwdd: forgotten semicolon
+
+2002-04-16 22:46 ivan
+
+ * fs_passwd/fs_passwdd: also untaint pid
+
+2002-04-16 22:44 ivan
+
+ * fs_passwd/fs_passwdd: *sigh*
+
+2002-04-16 22:42 ivan
+
+ * fs_passwd/fs_passwdd:
+ okay pid file has a change of working now
+
+2002-04-16 22:39 ivan
+
+ * fs_passwd/fs_passwdd: tyop
+
+2002-04-16 22:22 ivan
+
+ * fs_passwd/fs_passwdd: pid file foo
+
+2002-04-16 18:14 ivan
+
+ * fs_passwd/fs_passwd_server: kill off ssh kid on exit...
+
2002-04-16 17:25 ivan
* httemplate/search/cust_main.cgi: better ordering in search
@@ -27919,9 +30107,9 @@
2002-04-16 15:52 ivan
- * FS/FS/: Conf.pm, cust_bill.pm: further authorize.net description
- debugging (agent??) and get rid of bad unique index on
- cust_bill_event
+ * README.1.4.0pre12, FS/FS/Conf.pm, FS/FS/cust_bill.pm,
+ bin/fs-setup: further authorize.net description debugging
+ (agent??) and get rid of bad unique index on cust_bill_event
2002-04-16 15:38 ivan
@@ -27945,14 +30133,18 @@
* FS/FS/Conf.pm, FS/FS/cust_bill.pm, FS/FS/cust_bill_event.pm,
httemplate/index.html, httemplate/search/cust_bill_event.cgi,
httemplate/search/cust_bill_event.html,
+ httemplate/search/report_cc.html,
+ httemplate/search/report_credit.html,
httemplate/search/report_tax.html, httemplate/view/cust_bill.cgi:
report on failed billing events...
2002-04-16 02:38 ivan
- * FS/FS/Conf.pm, FS/FS/cust_bill.pm, conf/declinetemplate: - send a
- notice to the customer when their card is declined - closes:
- Bug#351 - freeside-expiration-alerter works fine, closes: Bug#7
+ * FS/FS/Conf.pm, FS/FS/cust_bill.pm,
+ FS/bin/freeside-expiration-alerter, conf/declinetemplate,
+ httemplate/docs/billing.html: - send a notice to the customer
+ when their card is declined - closes: Bug#351 -
+ freeside-expiration-alerter works fine, closes: Bug#7
2002-04-16 01:52 ivan
@@ -27975,16 +30167,22 @@
FS/FS/part_export/vpopmail.pm, FS/t/part_export-cp.t,
FS/t/part_export-cyrus.t, FS/t/part_export-shellcommands.t,
FS/t/part_export-vpopmail.t, eg/export_template.pm,
- httemplate/docs/legacy.html, httemplate/docs/schema.dia,
- httemplate/docs/schema.html, httemplate/docs/schema.png: - move
- cyrus, shellcommands, CP exports exports to new-style - skeleton
- files for vpopmail exports - documentation updates - add big
- schema diagram to docs
+ httemplate/docs/billing.html, httemplate/docs/legacy.html,
+ httemplate/docs/schema.dia, httemplate/docs/schema.html,
+ httemplate/docs/schema.png: - move cyrus, shellcommands, CP
+ exports exports to new-style - skeleton files for vpopmail
+ exports - documentation updates - add big schema diagram to docs
+
+2002-04-13 18:36 ivan
+
+ * httemplate/docs/billing.html: docu for invoice_lines(0) with no
+ arguments
2002-04-13 06:36 ivan
* FS/FS.pm, FS/FS/Conf.pm, FS/FS/part_export.pm, FS/FS/svc_acct.pm,
- FS/FS/part_export/cp.pm, FS/bin/freeside-sqlradius-reset,
+ FS/FS/part_export/cp.pm, FS/bin/freeside-overdue,
+ FS/bin/freeside-sqlradius-reset, bin/sqlradius_reset,
httemplate/edit/part_export.cgi: - documentation updates - move
Critical Path export to new-style export - bin/sqlradius_reset
gets a manpage and becomes FS/bin/freeside-sqlradius-reset
@@ -28015,8 +30213,9 @@
* FS/MANIFEST, FS/FS/Msgcat.pm, FS/FS/Record.pm,
FS/FS/cust_main.pm, FS/FS/cust_main_invoice.pm, FS/FS/msgcat.pm,
FS/FS/part_export.pm, FS/FS/svc_acct.pm, FS/t/Msgcat.t,
- htetc/handler.pl, httemplate/browse/part_svc.cgi,
- httemplate/edit/part_export.cgi, httemplate/edit/part_svc.cgi,
+ htetc/global.asa, htetc/handler.pl,
+ httemplate/browse/part_svc.cgi, httemplate/edit/part_export.cgi,
+ httemplate/edit/part_svc.cgi,
httemplate/edit/process/agent_type.cgi,
httemplate/edit/process/part_export.cgi,
httemplate/edit/process/part_svc.cgi,
@@ -28027,11 +30226,12 @@
2002-04-11 15:05 ivan
- * FS/FS.pm, FS/MANIFEST, FS/FS/export_svc.pm, FS/FS/part_export.pm,
- FS/FS/part_svc.pm, FS/t/export_svc.t, httemplate/index.html,
+ * README.1.4.0pre12, FS/FS.pm, FS/MANIFEST, FS/FS/export_svc.pm,
+ FS/FS/part_export.pm, FS/FS/part_svc.pm, FS/t/export_svc.t,
+ bin/fs-setup, bin/sqlradius_reset, httemplate/index.html,
httemplate/browse/part_export.cgi,
httemplate/browse/part_svc.cgi, httemplate/docs/schema.html,
- httemplate/edit/part_export.cgi,
+ httemplate/docs/upgrade8.html, httemplate/edit/part_export.cgi,
httemplate/edit/process/part_export.cgi,
httemplate/misc/delete-part_export.cgi: (almost) everything for
bug#375 - create export_svc table - part_svc to part_export is
@@ -28055,10 +30255,11 @@
2002-04-10 06:42 ivan
- * FS/FS/Conf.pm, FS/FS/Record.pm, FS/FS/cust_main.pm,
- FS/FS/cust_main_invoice.pm, FS/FS/svc_acct.pm,
- FS/FS/svc_acct_pop.pm, httemplate/browse/msgcat.cgi,
- httemplate/docs/signup.html, httemplate/edit/msgcat.cgi,
+ * ANNOUCE.1.4.0, README.1.4.0pre12, FS/FS/Conf.pm, FS/FS/Record.pm,
+ FS/FS/cust_main.pm, FS/FS/cust_main_invoice.pm,
+ FS/FS/svc_acct.pm, FS/FS/svc_acct_pop.pm, bin/populate-msgcat,
+ httemplate/browse/msgcat.cgi, httemplate/docs/signup.html,
+ httemplate/docs/upgrade8.html, httemplate/edit/msgcat.cgi,
httemplate/edit/process/msgcat.cgi: bulk checkin from working on
the road:
@@ -28072,6 +30273,11 @@
on errors - httemplate/edit/process/msgcat.cgi - don't update
identical fields
+2002-04-10 01:39 ivan
+
+ * bin/fs-setup: fix mistake in part_pop_local schema (not used by
+ anyone really so no big deal)
+
2002-04-06 22:23 ivan
* FS/FS/: Conf.pm, cust_bill.pm, cust_pay.pm: send email on signup
@@ -28079,8 +30285,9 @@
2002-04-06 21:56 ivan
- * FS/FS/Conf.pm, FS/FS/msgcat.pm, conf/show-msgcat-codes,
- httemplate/browse/msgcat.cgi, httemplate/edit/msgcat.cgi,
+ * FS/FS/Conf.pm, FS/FS/msgcat.pm, bin/populate-msgcat,
+ conf/show-msgcat-codes, httemplate/browse/msgcat.cgi,
+ httemplate/docs/install.html, httemplate/edit/msgcat.cgi,
httemplate/edit/process/msgcat.cgi: working message catalogs (not
used for enough yet) - almost (but not quite) closes Bug#385 -
still have to catalog the backend things triggered by signup
@@ -28107,9 +30314,9 @@
2002-04-06 12:37 ivan
- * httemplate/docs/signup.html: big signup server cleanups. uses
- Storable for network protocol now. - makes Bugs 384 & 385 easier
- - closes: Bug#382
+ * httemplate/docs/: install.html, signup.html: big signup server
+ cleanups. uses Storable for network protocol now. - makes Bugs
+ 384 & 385 easier - closes: Bug#382
2002-04-05 16:08 ivan
@@ -28118,13 +30325,16 @@
2002-04-05 15:51 ivan
- * CREDITS, Makefile, FS/MANIFEST, FS/FS/Conf.pm, FS/FS/msgcat.pm,
- FS/FS/svc_acct.pm, FS/t/msgcat.t, bin/freeside-session-kill,
- conf/locale, eg/table_template-svc.pm, eg/table_template.pm,
- htetc/handler.pl, httemplate/index.html,
- httemplate/browse/cust_main_county.cgi,
- httemplate/browse/msgcat.cgi, httemplate/browse/svc_acct_pop.cgi,
- httemplate/docs/schema.html, httemplate/edit/svc_acct.cgi,
+ * ANNOUCE.1.4.0, CREDITS, Makefile, README.1.4.0pre12, FS/MANIFEST,
+ FS/FS/Conf.pm, FS/FS/msgcat.pm, FS/FS/svc_acct.pm, FS/t/msgcat.t,
+ bin/freeside-session-kill, bin/fs-setup, bin/populate-msgcat,
+ bin/sqlradius_reset, conf/locale, eg/table_template-svc.pm,
+ eg/table_template.pm, htetc/global.asa, htetc/handler.pl,
+ httemplate/index.html, httemplate/browse/cust_main_county.cgi,
+ httemplate/browse/msgcat.cgi,
+ httemplate/browse/part_referral.cgi,
+ httemplate/browse/svc_acct_pop.cgi, httemplate/docs/schema.html,
+ httemplate/docs/upgrade8.html, httemplate/edit/svc_acct.cgi,
httemplate/view/svc_acct.cgi: - add message catalog table &
beginning of web interface - add security_phrase and conf option
to svc_acct.pm - random other stuff
@@ -28140,23 +30350,32 @@
2002-04-05 08:37 ivan
- * eg/export_template.pm, FS/t/part_export-infostreet.t,
- FS/t/part_export-sqlradius.t: oops forgot these from working on
- the road
+ * eg/export_template.pm, httemplate/search/sql.cgi,
+ FS/t/part_export-infostreet.t, FS/t/part_export-sqlradius.t: oops
+ forgot these from working on the road
2002-04-04 16:42 ivan
* FS/MANIFEST, FS/FS/part_export.pm,
FS/FS/part_export/infostreet.pm, FS/FS/part_export/sqlradius.pm,
- httemplate/index.html, httemplate/edit/part_export.cgi: Checkin
- of disparate changes from working on the road: - generic SQL
- query - move exports out to their own files - small cleanup of
- selfadmin server
+ httemplate/index.html, httemplate/docs/install.html,
+ httemplate/edit/part_export.cgi: Checkin of disparate changes
+ from working on the road: - generic SQL query - move exports out
+ to their own files - small cleanup of selfadmin server
+
+2002-03-29 18:35 ivan
+
+ * httemplate/edit/part_referral.cgi: finish up
+ s/referral/advertising source/
2002-03-29 09:27 ivan
- * htetc/handler.pl, httemplate/search/svc_acct.cgi: fix unlinked
- svc browse!
+ * htetc/global.asa, htetc/handler.pl,
+ httemplate/search/svc_acct.cgi: fix unlinked svc browse!
+
+2002-03-27 16:18 ivan
+
+ * ANNOUCE.1.4.0: still pretty much just notes...
2002-03-26 23:08 ivan
@@ -28166,11 +30385,17 @@
2002-03-26 21:36 ivan
* FS/FS/cust_main.pm, FS/FS/part_referral.pm,
- httemplate/index.html, httemplate/docs/admin.html:
+ httemplate/index.html, httemplate/browse/part_referral.cgi,
+ httemplate/docs/admin.html, httemplate/edit/part_referral.cgi:
s/referral/advertising source/
yes, the name sucks. got a better one?
+2002-03-26 15:18 ivan
+
+ * fs_passwd/fs_passwd.cgi: yay works now... just forgot to send
+ http header
+
2002-03-26 08:24 ivan
* httemplate/search/cust_main.cgi: simple visual fix: &nbsp; for
@@ -28184,6 +30409,10 @@
* httemplate/docs/passwd.html: doc
+2002-03-26 05:04 ivan
+
+ * bin/create-history-tables: error message typo
+
2002-03-26 04:35 ivan
* httemplate/docs/admin.html: s/Add/Provision/
@@ -28191,9 +30420,9 @@
2002-03-25 16:32 ivan
* FS/FS/part_export.pm, FS/bin/freeside-queued,
- httemplate/edit/part_export.cgi: further export bugfixing add 10
- kid limit to freeside-queued sqlradius_reset now works (closes:
- Bug#372)
+ bin/sqlradius_reset, httemplate/edit/part_export.cgi: further
+ export bugfixing add 10 kid limit to freeside-queued
+ sqlradius_reset now works (closes: Bug#372)
2002-03-25 16:26 ivan
@@ -28205,6 +30434,10 @@
search/cust_main.cgi: customers by otaker report (ugly
search/cust_main.cgi mods; revert if they cause problems)
+2002-03-24 15:16 ivan
+
+ * bin/: icradius_reset, sqlradius_reset: s/icradius/sqlradius/
+
2002-03-24 12:00 ivan
* httemplate/: edit/cust_main.cgi, search/svc_acct.cgi,
@@ -28251,11 +30484,12 @@
2002-03-22 10:56 ivan
- * Makefile, FS/MANIFEST, FS/FS/cust_main_county.pm,
- FS/FS/svc_acct.pm, FS/t/radius_usergroup.t,
- httemplate/docs/schema.html, httemplate/edit/part_svc.cgi,
- httemplate/edit/svc_acct.cgi, httemplate/view/svc_acct.cgi:
- RADIUS groups on the way!
+ * Makefile, README.1.4.0pre12, FS/MANIFEST,
+ FS/FS/cust_main_county.pm, FS/FS/svc_acct.pm,
+ FS/t/radius_usergroup.t, bin/create-history-tables, bin/fs-setup,
+ httemplate/docs/schema.html, httemplate/docs/upgrade8.html,
+ httemplate/edit/part_svc.cgi, httemplate/edit/svc_acct.cgi,
+ httemplate/view/svc_acct.cgi: RADIUS groups on the way!
2002-03-22 04:49 ivan
@@ -28273,9 +30507,12 @@
2002-03-20 13:31 ivan
- * FS/FS/Conf.pm, FS/FS/part_export.pm, FS/FS/part_export_option.pm,
- FS/FS/part_svc.pm, FS/FS/svc_acct.pm, FS/bin/freeside-queued,
- htetc/handler.pl, httemplate/edit/part_export.cgi,
+ * README.1.4.0pre12, FS/FS/Conf.pm, FS/FS/part_export.pm,
+ FS/FS/part_export_option.pm, FS/FS/part_svc.pm,
+ FS/FS/svc_acct.pm, FS/bin/freeside-queued, bin/icradius_reset,
+ bin/svc_acct.export, htetc/global.asa, htetc/handler.pl,
+ httemplate/docs/export.html, httemplate/docs/upgrade8.html,
+ httemplate/edit/part_export.cgi,
httemplate/edit/process/part_export.cgi: new export! infostreet
and sqlradius provisioning switched over (Bug #299 - doesn't
close it, but all the groundwork is done)
@@ -28311,6 +30548,11 @@
* FS/FS/: Conf.pm, Record.pm, cust_bill.pm, cust_pay.pm: fixes: bug
#348 - adds the ability to email on deleted payments.
+2002-03-18 11:40 ivan
+
+ * httemplate/search/cust_main-quickpay.html: update quickpay for
+ current search capabilities
+
2002-03-18 09:50 ivan
* httemplate/config/config.cgi:
@@ -28319,6 +30561,10 @@
in config editor, initial newlines in <textarea>s are lost. even
if you didn't mean to edit them you remove that..
+2002-03-18 08:07 ivan
+
+ * bin/backup-freeside: removing backup-freeside script from here
+
2002-03-18 08:05 ivan
* FS/FS/: svc_Common.pm, svc_acct.pm: handle inserting cust_svc and
@@ -28341,11 +30587,11 @@
2002-03-18 01:10 ivan
- * FS/FS/Conf.pm, FS/FS/svc_domain.pm,
+ * README.1.4.0pre12, FS/FS/Conf.pm, FS/FS/svc_domain.pm,
httemplate/config/config-process.cgi,
- httemplate/config/config-view.cgi, httemplate/config/config.cgi:
- new config value `defaultrecords', documentation, javascript
- config file editor
+ httemplate/config/config-view.cgi, httemplate/config/config.cgi,
+ httemplate/docs/upgrade8.html: new config value `defaultrecords',
+ documentation, javascript config file editor
2002-03-17 00:33 ivan
@@ -28359,15 +30605,24 @@
2002-03-12 07:33 ivan
- * htetc/handler.pl, httemplate/edit/part_pkg.cgi,
- httemplate/edit/part_svc.cgi: abstract stupid HTML layer trick
- out to HTML::Widgets::SelectLayers
+ * README.1.4.0pre12, htetc/global.asa, htetc/handler.pl,
+ httemplate/docs/install.html, httemplate/docs/upgrade8.html,
+ httemplate/edit/part_pkg.cgi, httemplate/edit/part_svc.cgi:
+ abstract stupid HTML layer trick out to
+ HTML::Widgets::SelectLayers
2002-03-09 02:19 khoff
* FS/FS/: Conf.pm, svc_domain.pm: Support for default CNAME/A
records
+2002-03-07 11:50 jeff
+
+ * FS/bin/: freeside-cc-receipts-report, freeside-credit-report,
+ freeside-expiration-alerter, freeside-receivables-report,
+ freeside-tax-report: less shelling, more perly - abolish some
+ pipes to sendmail
+
2002-03-07 06:13 ivan
* FS/FS/cust_bill.pm: better error msgs for mail errors
@@ -28381,14 +30636,36 @@
* conf/invoice_from: oops, missing invoice_from
+2002-03-06 15:31 ivan
+
+ * httemplate/docs/upgrade8.html: add freeside-expiration-alerter to
+ upgrade8.html
+
2002-03-06 14:44 jeff
- * FS/MANIFEST, FS/FS/Conf.pm, conf/alerter_template,
+ * README.1.4.0pre12, FS/MANIFEST, FS/FS/Conf.pm,
+ FS/bin/freeside-expiration-alerter, conf/alerter_template,
httemplate/docs/admin.html: billing expiration alerts
+2002-03-05 16:17 ivan
+
+ * FS/bin/: freeside-cc-receipts-report, freeside-credit-report,
+ freeside-receivables-report, freeside-tax-report: remove CVS Log
+ tag
+
2002-03-05 15:13 jeff
- * httemplate/search/report_tax.cgi: consistency is nice
+ * FS/bin/freeside-cc-receipts-report,
+ FS/bin/freeside-credit-report,
+ FS/bin/freeside-receivables-report, FS/bin/freeside-tax-report,
+ httemplate/search/report_cc.cgi,
+ httemplate/search/report_credit.cgi,
+ httemplate/search/report_tax.cgi: consistency is nice
+
+2002-03-05 01:44 ivan
+
+ * FS/bin/freeside-receivables-report: yes i have crazy customers
+ with 8-digit customer numbers
2002-03-04 14:10 ivan
@@ -28396,8 +30673,14 @@
2002-03-04 04:48 ivan
- * Makefile, FS/FS/Record.pm, FS/FS/nas.pm, bin/fs-radius-add-check,
- bin/fs-radius-add-reply: [no log message]
+ * Makefile, README.1.4.0pre12, FS/FS/Record.pm, FS/FS/nas.pm,
+ bin/create-history-tables, bin/fs-radius-add-check,
+ bin/fs-radius-add-reply, bin/fs-setup,
+ httemplate/docs/upgrade8.html: [no log message]
+
+2002-03-03 15:46 ivan
+
+ * httemplate/docs/install.html: docu
2002-02-28 15:30 ivan
@@ -28450,7 +30733,8 @@
2002-02-27 14:39 ivan
- * FS/FS/cust_bill_event.pm, httemplate/docs/schema.html,
+ * README.1.4.0pre12, FS/FS/cust_bill_event.pm, bin/fs-setup,
+ httemplate/docs/schema.html, httemplate/docs/upgrade8.html,
httemplate/view/cust_bill.cgi: add status and statustext fields
to cust_bill_event
@@ -28463,10 +30747,16 @@
* FS/: FS/cust_main.pm, bin/freeside-daily: better debugging
+2002-02-27 09:07 khoff
+
+ * httemplate/docs/upgrade8.html: Should be "CREATE TABLE" not
+ "CREATE INDEX" for part_export_option
+
2002-02-26 14:09 ivan
- * httemplate/search/: report_receivables.cgi, report_tax.cgi: fixup
- reports for templated webUI
+ * httemplate/search/: report_cc.cgi, report_credit.cgi,
+ report_receivables.cgi, report_tax.cgi: fixup reports for
+ templated webUI
2002-02-26 03:53 ivan
@@ -28511,8 +30801,9 @@
2002-02-23 14:36 ivan
- * httemplate/search/: report_receivables.cgi, report_tax.cgi: take
- hardcoded paths out of report cgis
+ * httemplate/search/: report_cc.cgi, report_credit.cgi,
+ report_receivables.cgi, report_tax.cgi: take hardcoded paths out
+ of report cgis
2002-02-23 03:56 ivan
@@ -28545,17 +30836,27 @@
2002-02-22 18:14 jeff
- * FS/FS/UID.pm, httemplate/search/report_receivables.cgi,
+ * FS/FS/UID.pm, bin/svc_acct.export,
+ httemplate/search/report_cc.cgi,
+ httemplate/search/report_credit.cgi,
+ httemplate/search/report_receivables.cgi,
httemplate/search/report_tax.cgi: report fixes and cruft removal
2002-02-22 18:02 ivan
- * httemplate/index.html: UI work on main menu, remove Archive::Tar
- from docs
+ * httemplate/: index.html, docs/install.html, docs/upgrade8.html:
+ UI work on main menu, remove Archive::Tar from docs
2002-02-22 15:18 jeff
- * FS/MANIFEST, httemplate/index.html,
+ * FS/MANIFEST, FS/bin/freeside-cc-receipts-report,
+ FS/bin/freeside-credit-report,
+ FS/bin/freeside-receivables-report, FS/bin/freeside-tax-report,
+ conf/report_template, httemplate/classic.html,
+ httemplate/index.html, httemplate/search/report_cc.cgi,
+ httemplate/search/report_cc.html,
+ httemplate/search/report_credit.cgi,
+ httemplate/search/report_credit.html,
httemplate/search/report_receivables.cgi,
httemplate/search/report_tax.cgi,
httemplate/search/report_tax.html: add some reporting features
@@ -28587,6 +30888,10 @@
* FS/FS/svc_acct.pm: freeside *SUSPENDED* -> CP set_mailbox_status
OTHER/OTHER_BOUNCE
+2002-02-21 23:50 ivan
+
+ * bin/fs-setup: doh
+
2002-02-21 22:42 ivan
* FS/FS/queue.pm: UI in joblisting: don't split ( retry | remove )
@@ -28609,7 +30914,8 @@
2002-02-21 17:07 ivan
- * FS/FS/Conf.pm, httemplate/view/cust_main.cgi: UI work:
+ * FS/FS/Conf.pm, httemplate/view/cust_main.cgi,
+ httemplate/view/cust_pkg.cgi: UI work:
make all functions of view/cust_pkg.cgi available on
view/cust_main.cgi - having them one link down in "Edit" is
@@ -28617,6 +30923,15 @@
closes: Bug#325
+2002-02-21 15:17 ivan
+
+ * bin/fs-setup: queue.svcnum is nullable too, oops
+
+2002-02-21 13:43 ivan
+
+ * bin/fs-setup: looks like statustext field is missing NULL flag in
+ fs-setup
+
2002-02-20 14:03 ivan
* httemplate/index.html: invoice reports belong here too
@@ -28636,13 +30951,16 @@
2002-02-19 17:03 ivan
- * CREDITS, FS/FS/CGI.pm, FS/FS/Record.pm, FS/FS/queue.pm,
- FS/FS/svc_acct.pm, FS/FS/svc_domain.pm, FS/FS/svc_forward.pm,
- FS/bin/freeside-queued, htetc/handler.pl, httemplate/index.html,
- httemplate/misc/queue.cgi, httemplate/view/svc_acct.cgi,
- httemplate/view/svc_domain.cgi, httemplate/view/svc_forward.cgi,
- httemplate/view/svc_www.cgi: use Net::SSH::ssh_cmd for all job
- queueing rather than local duplicated ssh subs
+ * CREDITS, README.1.4.0pre11, README.1.4.0pre8, FS/FS/CGI.pm,
+ FS/FS/Record.pm, FS/FS/queue.pm, FS/FS/svc_acct.pm,
+ FS/FS/svc_domain.pm, FS/FS/svc_forward.pm,
+ FS/bin/freeside-queued, bin/fs-setup, htetc/global.asa,
+ htetc/handler.pl, httemplate/index.html,
+ httemplate/browse/queue.cgi, httemplate/misc/queue.cgi,
+ httemplate/view/svc_acct.cgi, httemplate/view/svc_domain.cgi,
+ httemplate/view/svc_forward.cgi, httemplate/view/svc_www.cgi: use
+ Net::SSH::ssh_cmd for all job queueing rather than local
+ duplicated ssh subs
queue daemon updates: retry & remove links work, bubble up error
message to webinterface, link to svcnum & have job listings on
@@ -28652,13 +30970,17 @@
2002-02-19 15:43 ivan
- * httemplate/docs/schema.html: set EVERYTHING=1 for your own
- mod_perl compile
+ * httemplate/docs/: install.html, schema.html, upgrade8.html: set
+ EVERYTHING=1 for your own mod_perl compile
2002-02-18 23:51 ivan
* httemplate/index.html: oops
+2002-02-18 23:00 ivan
+
+ * httemplate/classic.html: TMTOWTDI
+
2002-02-18 20:43 ivan
* httemplate/index.html: new main menu!
@@ -28700,8 +31022,8 @@
2002-02-18 00:39 ivan
* FS/FS/Conf.pm, FS/FS/part_bill_event.pm, FS/FS/part_pkg.pm,
- httemplate/edit/part_pkg.cgi: safe web demo operation! closes:
- Bug#217
+ htetc/global.asa, httemplate/edit/part_pkg.cgi: safe web demo
+ operation! closes: Bug#217
fix bug in edit/part_pkg: s/bkg/pkg/
@@ -28713,6 +31035,11 @@
* httemplate/edit/part_svc.cgi: fix modified <SELECT>s under
netcape4, use one for svc_acct.popnum too
+2002-02-17 17:26 ivan
+
+ * README.1.4.0pre11, httemplate/docs/install.html,
+ httemplate/docs/upgrade8.html: rsync docs
+
2002-02-17 16:21 jeff
* Makefile: keep accidentally checking in Makefile changes, gotta
@@ -28720,8 +31047,8 @@
2002-02-17 16:13 jeff
- * Makefile, FS/FS/Conf.pm: trading in tar for rsync for improved
- vpopmail support
+ * Makefile, FS/FS/Conf.pm, bin/svc_acct.export, eg/vpopmailrestart:
+ trading in tar for rsync for improved vpopmail support
2002-02-17 13:01 ivan
@@ -28729,13 +31056,31 @@
2002-02-17 11:12 ivan
- * FS/MANIFEST: get ride of CGIwrapper.pm
+ * README.1.4.0pre9, FS/MANIFEST, FS/FS/CGIwrapper.pm,
+ FS/t/CGIwrapper.t: get ride of CGIwrapper.pm
2002-02-17 11:07 jeff
* FS/FS/svc_forward.pm: queue svc_forward remote commands; better
commands too
+2002-02-16 13:47 ivan
+
+ * htetc/global.asa: work with current Apache::ASP
+
+2002-02-16 10:14 ivan
+
+ * TODO: now in RT2!
+
+2002-02-15 23:27 ivan
+
+ * httemplate/docs/install.html: install warnings about mysql
+
+2002-02-15 12:21 jeff
+
+ * bin/svc_acct.export: remove arbitary uid requirement for vpasswd
+ generation
+
2002-02-15 11:34 ivan
* Makefile: keep accidentally checking in Makefile changes, gotta
@@ -28745,6 +31090,10 @@
* Makefile, FS/FS/Conf.pm, FS/FS/svc_acct.pm: CP provisioning!!
+2002-02-14 14:37 jeff
+
+ * bin/svc_acct.export: fix bug in multiline radiusprepend
+
2002-02-14 10:06 ivan
* bin/: fs-radius-add-check, fs-radius-add-reply: docs? haha
@@ -28766,18 +31115,33 @@
Bill' );): Illegal or empty (text) comment: at
/usr/local/lib/perl5/site_perl/5.005/FS/cust_main.pm line 1141.
+2002-02-12 10:37 ivan
+
+ * bin/svc_acct.export: fixes:
+
+ In string, @domain now must be written as \@domain at
+ ./svc_acct.export line 292, near "^append @domain" Global symbol
+ "@domain" requires explicit package name at ./svc_acct.export
+ line 292. Execution of ./svc_acct.export aborted due to
+ compilation errors.
+
2002-02-11 21:58 ivan
- * httemplate/docs/admin.html: fixes: bug#331
+ * README.1.4.0pre9, bin/fs-setup, httemplate/docs/admin.html:
+ fixes: bug#331
2002-02-11 20:49 ivan
* httemplate/edit/part_bill_event.cgi: oops
+2002-02-11 19:29 ivan
+
+ * README.1.4.0pre8, README.1.4.0pre9: 1.4.0pre9!!!
+
2002-02-11 18:11 ivan
- * FS/FS/Conf.pm, httemplate/config/config.cgi: add username_policy
- "@append domain"
+ * FS/FS/Conf.pm, bin/svc_acct.export, httemplate/config/config.cgi:
+ add username_policy "@append domain"
add "select" config type, mmm
@@ -28846,7 +31210,8 @@
2002-02-10 11:58 ivan
- * FS/MANIFEST, FS/bin/freeside-daily,
+ * FS/MANIFEST, FS/bin/freeside-bill, FS/bin/freeside-daily,
+ httemplate/docs/billing.html, httemplate/docs/upgrade8.html,
httemplate/edit/process/part_bill_event.cgi: update billing
documentation for the new world of invoice events added
freeside-daily replacing freeside-bill for the new world of
@@ -28854,9 +31219,10 @@
2002-02-10 10:56 ivan
- * FS/FS/cust_pay.pm, httemplate/edit/cust_pay.cgi: use unique
- tokens to prevent double-submission of payments in the web UI
- (closes: Bug#320)
+ * README.1.4.0pre9, FS/FS/cust_pay.pm, bin/fs-setup,
+ httemplate/docs/upgrade8.html, httemplate/edit/cust_pay.cgi: use
+ unique tokens to prevent double-submission of payments in the web
+ UI (closes: Bug#320)
2002-02-10 09:30 ivan
@@ -28891,8 +31257,11 @@
* htetc/handler.pl, httemplate/browse/agent.cgi,
httemplate/browse/agent_type.cgi,
httemplate/browse/cust_main_county.cgi,
- httemplate/browse/nas.cgi, httemplate/browse/part_bill_event.cgi,
- httemplate/browse/part_pkg.cgi, httemplate/browse/part_svc.cgi,
+ httemplate/browse/cust_pay_batch.cgi, httemplate/browse/nas.cgi,
+ httemplate/browse/part_bill_event.cgi,
+ httemplate/browse/part_pkg.cgi,
+ httemplate/browse/part_referral.cgi,
+ httemplate/browse/part_svc.cgi, httemplate/browse/queue.cgi,
httemplate/browse/svc_acct_pop.cgi,
httemplate/config/config-process.cgi,
httemplate/config/config-view.cgi, httemplate/config/config.cgi,
@@ -28903,20 +31272,26 @@
httemplate/edit/cust_credit_bill.cgi,
httemplate/edit/cust_main.cgi,
httemplate/edit/cust_main_county-expand.cgi,
+ httemplate/edit/cust_main_county.cgi,
httemplate/edit/cust_pay.cgi, httemplate/edit/cust_pkg.cgi,
httemplate/edit/part_bill_event.cgi,
- httemplate/edit/part_pkg.cgi, httemplate/edit/part_svc.cgi,
- httemplate/edit/svc_acct.cgi, httemplate/edit/svc_acct_pop.cgi,
- httemplate/edit/svc_domain.cgi, httemplate/edit/svc_forward.cgi,
+ httemplate/edit/part_pkg.cgi, httemplate/edit/part_referral.cgi,
+ httemplate/edit/part_svc.cgi, httemplate/edit/svc_acct.cgi,
+ httemplate/edit/svc_acct_pop.cgi,
+ httemplate/edit/svc_acct_sm.cgi, httemplate/edit/svc_domain.cgi,
+ httemplate/edit/svc_forward.cgi,
httemplate/edit/process/quick-cust_pkg.cgi,
httemplate/misc/bill.cgi, httemplate/misc/cancel-unaudited.cgi,
httemplate/misc/catchall.cgi,
httemplate/misc/delete-customer.cgi, httemplate/misc/link.cgi,
httemplate/misc/process/link.cgi,
- httemplate/search/cust_main.cgi, httemplate/search/cust_pay.cgi,
- httemplate/search/cust_pkg.cgi, httemplate/search/svc_acct.cgi,
+ httemplate/search/cust_bill.cgi, httemplate/search/cust_main.cgi,
+ httemplate/search/cust_pay.cgi, httemplate/search/cust_pkg.cgi,
+ httemplate/search/svc_acct.cgi,
+ httemplate/search/svc_acct_sm.cgi,
httemplate/search/svc_domain.cgi, httemplate/view/cust_bill.cgi,
- httemplate/view/cust_main.cgi, httemplate/view/svc_acct.cgi,
+ httemplate/view/cust_main.cgi, httemplate/view/cust_pkg.cgi,
+ httemplate/view/svc_acct.cgi, httemplate/view/svc_acct_sm.cgi,
httemplate/view/svc_domain.cgi, httemplate/view/svc_forward.cgi,
httemplate/view/svc_www.cgi: *finally* seems to be working under
Mason. sheesh. *finally* seems to be working under Mason.
@@ -28932,8 +31307,11 @@
* htetc/handler.pl, httemplate/browse/agent.cgi,
httemplate/browse/agent_type.cgi,
httemplate/browse/cust_main_county.cgi,
- httemplate/browse/nas.cgi, httemplate/browse/part_bill_event.cgi,
- httemplate/browse/part_pkg.cgi, httemplate/browse/part_svc.cgi,
+ httemplate/browse/cust_pay_batch.cgi, httemplate/browse/nas.cgi,
+ httemplate/browse/part_bill_event.cgi,
+ httemplate/browse/part_pkg.cgi,
+ httemplate/browse/part_referral.cgi,
+ httemplate/browse/part_svc.cgi, httemplate/browse/queue.cgi,
httemplate/browse/svc_acct_pop.cgi, httemplate/edit/agent.cgi,
httemplate/edit/agent_type.cgi,
httemplate/edit/cust_bill_pay.cgi,
@@ -28941,11 +31319,14 @@
httemplate/edit/cust_credit_bill.cgi,
httemplate/edit/cust_main.cgi,
httemplate/edit/cust_main_county-expand.cgi,
+ httemplate/edit/cust_main_county.cgi,
httemplate/edit/cust_pay.cgi, httemplate/edit/cust_pkg.cgi,
httemplate/edit/part_bill_event.cgi,
- httemplate/edit/part_pkg.cgi, httemplate/edit/part_svc.cgi,
- httemplate/edit/svc_acct.cgi, httemplate/edit/svc_acct_pop.cgi,
- httemplate/edit/svc_domain.cgi, httemplate/edit/svc_forward.cgi,
+ httemplate/edit/part_pkg.cgi, httemplate/edit/part_referral.cgi,
+ httemplate/edit/part_svc.cgi, httemplate/edit/svc_acct.cgi,
+ httemplate/edit/svc_acct_pop.cgi,
+ httemplate/edit/svc_acct_sm.cgi, httemplate/edit/svc_domain.cgi,
+ httemplate/edit/svc_forward.cgi,
httemplate/edit/process/REAL_cust_pkg.cgi,
httemplate/edit/process/agent.cgi,
httemplate/edit/process/agent_type.cgi,
@@ -28955,26 +31336,33 @@
httemplate/edit/process/cust_main.cgi,
httemplate/edit/process/cust_main_county-collapse.cgi,
httemplate/edit/process/cust_main_county-expand.cgi,
+ httemplate/edit/process/cust_main_county.cgi,
httemplate/edit/process/cust_pay.cgi,
httemplate/edit/process/cust_pkg.cgi,
httemplate/edit/process/part_pkg.cgi,
+ httemplate/edit/process/part_referral.cgi,
httemplate/edit/process/quick-cust_pkg.cgi,
httemplate/edit/process/svc_acct.cgi,
httemplate/edit/process/svc_acct_pop.cgi,
+ httemplate/edit/process/svc_acct_sm.cgi,
httemplate/edit/process/svc_domain.cgi,
httemplate/edit/process/svc_forward.cgi,
httemplate/misc/bill.cgi, httemplate/misc/cancel-unaudited.cgi,
- httemplate/misc/catchall.cgi,
+ httemplate/misc/cancel_pkg.cgi, httemplate/misc/catchall.cgi,
httemplate/misc/delete-cust_pay.cgi,
- httemplate/misc/delete-customer.cgi, httemplate/misc/link.cgi,
- httemplate/misc/print-invoice.cgi,
+ httemplate/misc/delete-customer.cgi,
+ httemplate/misc/expire_pkg.cgi, httemplate/misc/link.cgi,
+ httemplate/misc/print-invoice.cgi, httemplate/misc/susp_pkg.cgi,
httemplate/misc/unsusp_pkg.cgi,
httemplate/misc/process/catchall.cgi,
httemplate/misc/process/delete-customer.cgi,
- httemplate/misc/process/link.cgi, httemplate/search/cust_pay.cgi,
+ httemplate/misc/process/link.cgi,
+ httemplate/search/cust_bill.cgi, httemplate/search/cust_pay.cgi,
httemplate/search/cust_pkg.cgi, httemplate/search/svc_acct.cgi,
+ httemplate/search/svc_acct_sm.cgi,
httemplate/search/svc_domain.cgi, httemplate/view/cust_bill.cgi,
- httemplate/view/cust_main.cgi, httemplate/view/svc_acct.cgi,
+ httemplate/view/cust_main.cgi, httemplate/view/cust_pkg.cgi,
+ httemplate/view/svc_acct.cgi, httemplate/view/svc_acct_sm.cgi,
httemplate/view/svc_domain.cgi, httemplate/view/svc_forward.cgi,
httemplate/view/svc_www.cgi: removed <!-- $Id$ --> from all files
to fix any redirects, whew
@@ -29008,11 +31396,18 @@
add new comission plans
+2002-02-09 17:47 ivan
+
+ * README.1.4.0pre8, httemplate/docs/upgrade8.html,
+ FS/bin/freeside-bill: remove -i option from freeside-bill
+ (obsoleted by invoice events)
+
2002-02-09 10:24 ivan
- * FS/FS/CGI.pm, htetc/handler.pl,
+ * FS/FS/CGI.pm, htetc/global.asa, htetc/handler.pl,
httemplate/edit/process/agent_type.cgi,
httemplate/edit/process/cust_main_county-expand.cgi,
+ httemplate/edit/process/cust_main_county.cgi,
httemplate/edit/process/cust_pay.cgi,
httemplate/edit/process/part_pkg.cgi,
httemplate/search/cust_main.cgi, httemplate/search/cust_pkg.cgi,
@@ -29031,8 +31426,9 @@
2002-02-09 09:03 ivan
- * FS/FS/CGI.pm, htetc/handler.pl: okay, both Apache::ASP and Mason
- should set no-cache headers now (closes: Bug#23)
+ * FS/FS/CGI.pm, htetc/global.asa, htetc/handler.pl: okay, both
+ Apache::ASP and Mason should set no-cache headers now (closes:
+ Bug#23)
2002-02-07 14:30 ivan
@@ -29056,13 +31452,18 @@
2002-02-06 07:49 ivan
- * Makefile: documentation building Makefile patch
+ * Makefile, httemplate/docs/install.html: documentation building
+ Makefile patch
2002-02-06 07:36 ivan
* FS/FS/part_bill_event.pm: part_bill_event.plan can contain
punctuation
+2002-02-06 07:07 ivan
+
+ * bin/fs-setup: tyop
+
2002-02-06 06:58 ivan
* FS/bin/freeside-adduser: fix for non-file auth
@@ -29072,24 +31473,54 @@
* FS/FS/Record.pm: better error messages if you haven't run
fs-setup ?
+2002-02-05 10:24 ivan
+
+ * httemplate/docs/install.html: &nbsp; for commands; confusing
+ otherwise
+
+2002-02-05 10:04 ivan
+
+ * httemplate/docs/install.html: doc
+
2002-02-05 08:48 ivan
- * fs_passwd/fs_passwd, httemplate/docs/passwd.html: web-based
+ * fs_passwd/fs_passwd, fs_passwd/fs_passwd.cgi,
+ fs_passwd/fs_passwd.html, httemplate/docs/passwd.html: web-based
password changer!
+2002-02-05 03:06 ivan
+
+ * httemplate/docs/upgrade8.html: don't need DBIx::DataSource for
+ upgrades
+
+2002-02-05 01:46 ivan
+
+ * httemplate/docs/: install.html, upgrade8.html: doc
+
+2002-02-04 23:57 ivan
+
+ * README.1.4.0pre8, httemplate/docs/upgrade8.html: fix
+ part_export_option indices
+
+2002-02-04 10:12 ivan
+
+ * httemplate/docs/install.html: doc update
+
2002-02-04 09:06 ivan
- * Makefile: 1.4.0pre8!
+ * Makefile, README.1.4.0pre4567-8, README.1.4.0pre8: 1.4.0pre8!
2002-02-04 09:04 ivan
- * httemplate/edit/part_bill_event.cgi: have fs-setup create the
+ * bin/fs-setup, httemplate/docs/upgrade8.html,
+ httemplate/edit/part_bill_event.cgi: have fs-setup create the
necessary "default" billing events documentation on necessary
"default" billing events
2002-02-04 08:44 ivan
- * httemplate/edit/part_bill_event.cgi,
+ * httemplate/docs/install.html, httemplate/docs/upgrade8.html,
+ httemplate/edit/part_bill_event.cgi,
httemplate/view/cust_bill.cgi, FS/FS/cust_bill.pm,
FS/FS/cust_main.pm: billing events!
@@ -29101,22 +31532,27 @@
2002-01-30 06:18 ivan
- * FS/FS/CGI.pm, htetc/handler.pl, httemplate/browse/agent.cgi,
- httemplate/browse/agent_type.cgi,
+ * FS/FS/CGI.pm, htetc/global.asa, htetc/handler.pl,
+ httemplate/browse/agent.cgi, httemplate/browse/agent_type.cgi,
httemplate/browse/cust_main_county.cgi,
- httemplate/browse/nas.cgi, httemplate/browse/part_bill_event.cgi,
- httemplate/browse/part_pkg.cgi, httemplate/browse/part_svc.cgi,
- httemplate/browse/svc_acct_pop.cgi, httemplate/edit/agent.cgi,
- httemplate/edit/agent_type.cgi,
+ httemplate/browse/cust_pay_batch.cgi, httemplate/browse/nas.cgi,
+ httemplate/browse/part_bill_event.cgi,
+ httemplate/browse/part_pkg.cgi,
+ httemplate/browse/part_referral.cgi,
+ httemplate/browse/part_svc.cgi, httemplate/browse/queue.cgi,
+ httemplate/browse/svc_acct_pop.cgi, httemplate/docs/install.html,
+ httemplate/edit/agent.cgi, httemplate/edit/agent_type.cgi,
httemplate/edit/cust_bill_pay.cgi,
httemplate/edit/cust_credit.cgi,
httemplate/edit/cust_credit_bill.cgi,
httemplate/edit/cust_main.cgi,
httemplate/edit/cust_main_county-expand.cgi,
+ httemplate/edit/cust_main_county.cgi,
httemplate/edit/cust_pay.cgi, httemplate/edit/cust_pkg.cgi,
httemplate/edit/part_bill_event.cgi,
- httemplate/edit/part_svc.cgi, httemplate/edit/svc_acct.cgi,
- httemplate/edit/svc_acct_pop.cgi, httemplate/edit/svc_domain.cgi,
+ httemplate/edit/part_referral.cgi, httemplate/edit/part_svc.cgi,
+ httemplate/edit/svc_acct.cgi, httemplate/edit/svc_acct_pop.cgi,
+ httemplate/edit/svc_acct_sm.cgi, httemplate/edit/svc_domain.cgi,
httemplate/edit/svc_forward.cgi,
httemplate/edit/process/agent.cgi,
httemplate/edit/process/agent_type.cgi,
@@ -29126,26 +31562,33 @@
httemplate/edit/process/cust_main.cgi,
httemplate/edit/process/cust_main_county-collapse.cgi,
httemplate/edit/process/cust_main_county-expand.cgi,
+ httemplate/edit/process/cust_main_county.cgi,
httemplate/edit/process/cust_pay.cgi,
httemplate/edit/process/cust_pkg.cgi,
httemplate/edit/process/part_pkg.cgi,
+ httemplate/edit/process/part_referral.cgi,
httemplate/edit/process/quick-cust_pkg.cgi,
httemplate/edit/process/svc_acct.cgi,
httemplate/edit/process/svc_acct_pop.cgi,
+ httemplate/edit/process/svc_acct_sm.cgi,
httemplate/edit/process/svc_domain.cgi,
httemplate/edit/process/svc_forward.cgi,
httemplate/misc/bill.cgi, httemplate/misc/cancel-unaudited.cgi,
- httemplate/misc/catchall.cgi,
- httemplate/misc/delete-customer.cgi, httemplate/misc/link.cgi,
- httemplate/misc/print-invoice.cgi,
+ httemplate/misc/cancel_pkg.cgi, httemplate/misc/catchall.cgi,
+ httemplate/misc/delete-customer.cgi,
+ httemplate/misc/expire_pkg.cgi, httemplate/misc/link.cgi,
+ httemplate/misc/print-invoice.cgi, httemplate/misc/susp_pkg.cgi,
httemplate/misc/unsusp_pkg.cgi,
httemplate/misc/process/catchall.cgi,
httemplate/misc/process/delete-customer.cgi,
httemplate/misc/process/link.cgi,
- httemplate/search/cust_main.cgi, httemplate/search/cust_pay.cgi,
- httemplate/search/cust_pkg.cgi, httemplate/search/svc_acct.cgi,
+ httemplate/search/cust_bill.cgi, httemplate/search/cust_main.cgi,
+ httemplate/search/cust_pay.cgi, httemplate/search/cust_pkg.cgi,
+ httemplate/search/svc_acct.cgi,
+ httemplate/search/svc_acct_sm.cgi,
httemplate/search/svc_domain.cgi, httemplate/view/cust_bill.cgi,
- httemplate/view/cust_main.cgi, httemplate/view/svc_acct.cgi,
+ httemplate/view/cust_main.cgi, httemplate/view/cust_pkg.cgi,
+ httemplate/view/svc_acct.cgi, httemplate/view/svc_acct_sm.cgi,
httemplate/view/svc_domain.cgi, httemplate/view/svc_forward.cgi,
httemplate/view/svc_www.cgi: remove use Module; and $cgi =
new CGI; &cgisuidsetup(); from all templates. should work
@@ -29153,15 +31596,17 @@
2002-01-29 09:42 ivan
- * FS/FS/part_bill_event.pm, httemplate/docs/schema.html: weight,
- plan and plandata fields in part_bill_event
+ * README.1.4.0pre4567-8, FS/FS/part_bill_event.pm, bin/fs-setup,
+ httemplate/docs/schema.html, httemplate/docs/upgrade8.html:
+ weight, plan and plandata fields in part_bill_event
2002-01-29 08:33 ivan
* Makefile, FS/FS.pm, FS/FS/Record.pm, FS/FS/cust_main.pm,
FS/FS/cust_pay.pm, FS/FS/cust_pkg.pm, FS/FS/cust_svc.pm,
- FS/FS/svc_acct.pm, bin/pod2x, htetc/handler.pl,
+ FS/FS/svc_acct.pm, bin/pod2x, htetc/global.asa, htetc/handler.pl,
httemplate/index.html, httemplate/browse/part_bill_event.cgi,
+ httemplate/docs/install.html,
httemplate/edit/part_bill_event.cgi,
httemplate/edit/part_pkg.cgi,
httemplate/edit/process/part_bill_event.cgi: - web interface for
@@ -29173,6 +31618,10 @@
interface - cust_pay::upgrade_replace doesn't error out if
history includes overapplied payments
+2002-01-29 03:11 ivan
+
+ * bin/fs-setup: oops bad column type for part_bill_event.payby
+
2002-01-28 03:24 ivan
* FS/FS/Record.pm: oops, syntax error in new() check for missing
@@ -29180,14 +31629,17 @@
2002-01-27 22:57 ivan
- * FS/FS/cust_bill.pm, FS/FS/cust_credit.pm, FS/FS/cust_pay.pm,
- FS/FS/cust_refund.pm, FS/FS/part_pkg.pm, FS/FS/part_svc.pm,
- httemplate/docs/schema.html: book closing schema changes
+ * README.1.4.0pre4567-8, FS/FS/cust_bill.pm, FS/FS/cust_credit.pm,
+ FS/FS/cust_pay.pm, FS/FS/cust_refund.pm, FS/FS/part_pkg.pm,
+ FS/FS/part_svc.pm, bin/fs-setup, httemplate/docs/schema.html,
+ httemplate/docs/upgrade8.html: book closing schema changes
2002-01-27 21:15 ivan
- * FS/FS/part_export.pm, FS/FS/part_export_option.pm,
- httemplate/docs/schema.html: part_export schema changes
+ * README.1.4.0pre4567-8, FS/FS/part_export.pm,
+ FS/FS/part_export_option.pm, bin/fs-setup,
+ httemplate/docs/schema.html, httemplate/docs/upgrade8.html:
+ part_export schema changes
2002-01-25 17:52 ivan
@@ -29247,7 +31699,8 @@
2002-01-22 06:42 ivan
- * httemplate/docs/index.html: remove old upgrade docs
+ * httemplate/docs/: index.html, upgrade.html, upgrade2.html,
+ upgrade3.html: remove old upgrade docs
2002-01-21 03:30 ivan
@@ -29263,8 +31716,17 @@
2002-01-14 12:28 ivan
- * FS/FS/: Conf.pm, svc_acct.pm: pay some attention to 1.4 RADIUS
- SQL export
+ * FS/FS/Conf.pm, FS/FS/svc_acct.pm, httemplate/docs/export.html:
+ pay some attention to 1.4 RADIUS SQL export
+
+2002-01-14 06:29 ivan
+
+ * FS/bin/freeside-overdue: fix -l option
+
+2002-01-11 23:23 ivan
+
+ * httemplate/docs/upgrade8.html: fix upgrade8.html to be in
+ agreement with fs-setup
2002-01-09 05:29 ivan
@@ -29275,20 +31737,27 @@
2002-01-03 09:40 ivan
- * FS/MANIFEST, FS/FS/cust_bill_event.pm, FS/FS/part_bill_event.pm,
- FS/t/cust_bill_event.t, FS/t/part_bill_event.t,
- httemplate/docs/schema.html: more schema changes:
- part_bill_event and cust_bill_event tables
+ * README.1.4.0pre2-3, README.1.4.0pre3-4, README.1.4.0pre4567-8,
+ FS/MANIFEST, FS/FS/cust_bill_event.pm, FS/FS/part_bill_event.pm,
+ FS/t/cust_bill_event.t, FS/t/part_bill_event.t, bin/fs-setup,
+ httemplate/docs/schema.html, httemplate/docs/upgrade8.html: more
+ schema changes: part_bill_event and cust_bill_event tables
remove old 1.4.0pre READMEs
+2001-12-28 07:17 ivan
+
+ * FS/bin/freeside-overdue: update usage message
+
2001-12-28 07:14 ivan
- * FS/FS/cust_main.pm: force printing in freeside-overdue
+ * FS/: FS/cust_main.pm, bin/freeside-overdue: force printing in
+ freeside-overdue
2001-12-28 06:40 ivan
- * FS/FS/cust_main.pm, httemplate/edit/cust_main.cgi,
+ * FS/FS/cust_main.pm, FS/bin/freeside-bill,
+ FS/bin/freeside-overdue, httemplate/edit/cust_main.cgi,
httemplate/edit/part_pkg.cgi: add more options to
freeside-overdue
@@ -29301,17 +31770,18 @@
2001-12-27 01:26 ivan
- * FS/FS/Record.pm, FS/FS/part_pkg.pm, FS/FS/part_svc.pm,
- httemplate/browse/part_pkg.cgi, httemplate/browse/part_svc.cgi,
- httemplate/edit/agent_type.cgi, httemplate/edit/cust_main.cgi,
- httemplate/edit/cust_pkg.cgi, httemplate/edit/part_pkg.cgi,
- httemplate/edit/part_svc.cgi,
+ * README.1.4.0pre4567-8, FS/FS/Record.pm, FS/FS/part_pkg.pm,
+ FS/FS/part_svc.pm, FS/bin/freeside-overdue, bin/fs-setup,
+ htetc/global.asa, httemplate/browse/part_pkg.cgi,
+ httemplate/browse/part_svc.cgi, httemplate/edit/agent_type.cgi,
+ httemplate/edit/cust_main.cgi, httemplate/edit/cust_pkg.cgi,
+ httemplate/edit/part_pkg.cgi, httemplate/edit/part_svc.cgi,
httemplate/edit/process/part_pkg.cgi,
httemplate/view/cust_main.cgi: service and package disable!
2001-12-26 15:59 ivan
- * httemplate/docs/schema.html: doc
+ * httemplate/docs/: install.html, schema.html, upgrade8.html: doc
2001-12-26 07:41 ivan
@@ -29323,22 +31793,28 @@
2001-12-26 07:08 ivan
- * FS/MANIFEST: add freeside-overdue
+ * FS/: MANIFEST, bin/freeside-overdue: add freeside-overdue
2001-12-26 07:07 ivan
* httemplate/edit/: cust_credit.cgi, process/cust_credit.cgi: fix
posting credit
+2001-12-26 03:47 ivan
+
+ * FS/bin/freeside-overdue: don't provide example crontabs that run
+ at 4:20 _PM_
+
2001-12-26 03:17 ivan
- * FS/FS/cust_main.pm: (untested eek) freeside-overdue script &
- cust_main balance_date & total_owed_date methods
+ * FS/FS/cust_main.pm, FS/bin/freeside-overdue,
+ httemplate/docs/billing.html: (untested eek) freeside-overdue
+ script & cust_main balance_date & total_owed_date methods
2001-12-26 01:18 ivan
- * httemplate/: index.html, search/cust_pay.cgi, view/cust_main.cgi:
- search by check #
+ * httemplate/: index.html, search/cust_pay.cgi,
+ search/cust_pay.html, view/cust_main.cgi: search by check #
2001-12-25 23:53 ivan
@@ -29351,7 +31827,8 @@
2001-12-25 21:19 ivan
* httemplate/: index.html, edit/cust_pay.cgi,
- edit/process/cust_pay.cgi, search/cust_main.cgi,
+ edit/process/cust_pay.cgi, search/cust_main-payinfo.html,
+ search/cust_main-quickpay.html, search/cust_main.cgi,
search/cust_main.html: expedited check entry
2001-12-25 21:02 ivan
@@ -29360,8 +31837,9 @@
2001-12-25 20:52 ivan
- * httemplate/search/: cust_bill.html, cust_main.html: same look as
- rest of search pages
+ * httemplate/search/: cust_bill.html, svc_acct.html,
+ svc_domain.html, cust_main.html: same look as rest of search
+ pages
2001-12-25 20:25 ivan
@@ -29375,6 +31853,10 @@
* httemplate/edit/cust_pay.cgi: fix service display for duplicates
+2001-12-21 18:41 ivan
+
+ * httemplate/docs/install.html: doco on creating database manually
+
2001-12-21 13:40 ivan
* FS/FS/cust_bill.pm, httemplate/edit/cust_pay.cgi,
@@ -29521,10 +32003,20 @@
* httemplate/edit/: cust_main.cgi, svc_acct.cgi: allow >8 character
passwords in web interface
+2001-12-11 23:59 ivan
+
+ * bin/svc_acct.export: use pwd_mkdb to install
+ /etc/master.passwd.new instead of moving it into place
+
2001-12-11 13:26 ivan
* httemplate/search/svc_acct.cgi: missing space in SQL, oops
+2001-12-11 02:38 ivan
+
+ * bin/svc_acct.export, httemplate/docs/install.html: radiusprepend
+ config file for export add Archive::Tar to docs
+
2001-12-10 04:18 ivan
* FS/FS/Record.pm: Pg datatype pain
@@ -29610,14 +32102,23 @@
* FS/FS/Conf.pm, httemplate/edit/cust_main.cgi:
postalinvoicedefault config file
+2001-11-16 02:22 ivan
+
+ * httemplate/docs/billing.html: update link to Text::Template docs
+
2001-11-13 13:27 ivan
- * FS/MANIFEST: remove freeside-print-batch
+ * FS/: MANIFEST, bin/freeside-print-batch: remove
+ freeside-print-batch
2001-11-12 05:19 ivan
* FS/FS/cust_main.pm: import hack to be less strict
+2001-11-09 10:26 ivan
+
+ * httemplate/docs/install.html: Pg7 dependancy
+
2001-11-08 07:26 ivan
* FS/bin/freeside-queued: harmless typo noticed by "Edward
@@ -29643,6 +32144,11 @@
* FS/FS/UID.pm: fix error message for s/htdocs/httemplate/
+2001-11-06 09:48 ivan
+
+ * bin/fs-setup: payinfo changed from length 16 to $char_d for
+ future expansion
+
2001-11-05 13:30 ivan
* Makefile: more fixes for fresh installation
@@ -29659,6 +32165,10 @@
* Makefile, FS/FS/Record.pm: makefile fixups
+2001-11-05 10:23 ivan
+
+ * httemplate/docs/install.html: doc
+
2001-11-05 09:00 jeff
* FS/FS/svc_acct.pm: improved svc_acct replacement
@@ -29668,6 +32178,10 @@
* FS/FS/Record.pm: AUTOLOAD optimizations broke things rather
badly, oops
+2001-11-05 06:04 ivan
+
+ * FS/bin/freeside-bill: fixup getopt
+
2001-11-05 06:03 ivan
* Makefile: move sys-dependant stuff to vars
@@ -29676,6 +32190,11 @@
* FS/FS/svc_acct.pm: doc tyop
+2001-11-05 04:07 ivan
+
+ * bin/svc_domain.import: this is unfinished and untested anyway,
+ but this corrects a silly typo
+
2001-11-05 03:55 ivan
* FS/FS/cust_main.pm: better error messages for eval'ed setup/recur
@@ -29690,6 +32209,10 @@
joined searches & caching support preliminary customer browse
optimizations, much faster!
+2001-11-02 00:14 ivan
+
+ * FS/bin/freeside-print-batch: silence pod complaints
+
2001-11-01 21:28 ivan
* httemplate/config/config.cgi: note config changes need
@@ -29709,9 +32232,15 @@
* httemplate/search/cust_main.cgi: hit the database slightly less.
this page still takes forever with lots of customers.
+2001-10-31 08:52 ivan
+
+ * httemplate/browse/queue.cgi: queue display works again, even if
+ those links don't
+
2001-10-30 11:05 ivan
- * FS/FS/cust_pay_batch.pm, httemplate/index.html,
+ * FS/FS/cust_pay_batch.pm, bin/fs-setup, httemplate/index.html,
+ httemplate/browse/cust_pay_batch.cgi,
httemplate/docs/schema.html: depriciate cust_pay_batch.trancode
web interface to view pending batch
@@ -29734,22 +32263,31 @@
httemplate/browse/agent_type.cgi,
httemplate/browse/cust_main_county.cgi,
httemplate/browse/nas.cgi, httemplate/browse/part_pkg.cgi,
+ httemplate/browse/part_referral.cgi, httemplate/browse/queue.cgi,
httemplate/browse/svc_acct_pop.cgi, httemplate/edit/agent.cgi,
httemplate/edit/agent_type.cgi, httemplate/edit/cust_credit.cgi,
httemplate/edit/cust_credit_bill.cgi,
httemplate/edit/cust_main.cgi,
httemplate/edit/cust_main_county-expand.cgi,
+ httemplate/edit/cust_main_county.cgi,
httemplate/edit/cust_pay.cgi, httemplate/edit/cust_pkg.cgi,
- httemplate/edit/svc_acct.cgi, httemplate/edit/svc_acct_pop.cgi,
- httemplate/edit/svc_domain.cgi, httemplate/edit/svc_forward.cgi,
- httemplate/misc/catchall.cgi,
+ httemplate/edit/part_referral.cgi, httemplate/edit/svc_acct.cgi,
+ httemplate/edit/svc_acct_pop.cgi,
+ httemplate/edit/svc_acct_sm.cgi, httemplate/edit/svc_domain.cgi,
+ httemplate/edit/svc_forward.cgi, httemplate/misc/catchall.cgi,
httemplate/misc/delete-customer.cgi, httemplate/misc/link.cgi,
- httemplate/search/cust_main.cgi, httemplate/search/cust_pkg.cgi,
- httemplate/search/svc_acct.cgi, httemplate/search/svc_domain.cgi,
- httemplate/view/cust_bill.cgi, httemplate/view/cust_main.cgi,
- httemplate/view/svc_acct.cgi, httemplate/view/svc_domain.cgi,
- httemplate/view/svc_forward.cgi: get rid of header foo in
- individual templates
+ httemplate/search/cust_bill.cgi, httemplate/search/cust_main.cgi,
+ httemplate/search/cust_pkg.cgi, httemplate/search/svc_acct.cgi,
+ httemplate/search/svc_acct_sm.cgi,
+ httemplate/search/svc_domain.cgi, httemplate/view/cust_bill.cgi,
+ httemplate/view/cust_main.cgi, httemplate/view/cust_pkg.cgi,
+ httemplate/view/svc_acct.cgi, httemplate/view/svc_acct_sm.cgi,
+ httemplate/view/svc_domain.cgi, httemplate/view/svc_forward.cgi:
+ get rid of header foo in individual templates
+
+2001-10-30 06:28 ivan
+
+ * httemplate/docs/: install.html, upgrade8.html: docu
2001-10-30 06:20 ivan
@@ -29766,9 +32304,11 @@
2001-10-30 05:47 ivan
- * Makefile, FS/bin/freeside-adduser, conf/shells, conf/smtpmachine:
- `make create-config' installs default config (conf dir update)
- freeside-adduser uses default secrets file
+ * Makefile, FS/bin/freeside-adduser, conf/address, conf/domain,
+ conf/secrets, conf/shells, conf/smtpmachine,
+ httemplate/docs/install.html: `make create-config' installs
+ default config (conf dir update) freeside-adduser uses default
+ secrets file
2001-10-30 04:38 ivan
@@ -29776,22 +32316,29 @@
2001-10-30 04:35 ivan
- * Makefile: makefile typo
+ * Makefile, httemplate/docs/install.html: makefile typo
2001-10-30 03:47 ivan
* Makefile, FS/bin/freeside-adduser, httemplate/docs/admin.html,
- httemplate/docs/index.html: whew more install docs and automation
+ httemplate/docs/config.html, httemplate/docs/index.html,
+ httemplate/docs/install.html: whew more install docs and
+ automation
2001-10-30 02:20 ivan
- * Makefile, FS/MANIFEST, FS/FS/Conf.pm, FS/bin/freeside-adduser:
- setup/config updates. getting easier...
+ * Makefile, FS/MANIFEST, FS/FS/Conf.pm, FS/bin/freeside-adduser,
+ httemplate/docs/install.html: setup/config updates. getting
+ easier...
2001-10-29 13:22 ivan
* Makefile: fix make clean
+2001-10-29 12:54 ivan
+
+ * httemplate/docs/install.html: doc typo
+
2001-10-29 12:53 ivan
* FS/FS/svc_forward.pm: methods for getting the associated svc_acct
@@ -29803,25 +32350,31 @@
2001-10-26 03:24 ivan
- * FS/FS/CGI.pm, htetc/handler.pl, httemplate/browse/agent.cgi,
- httemplate/browse/agent_type.cgi,
+ * FS/FS/CGI.pm, htetc/global.asa, htetc/handler.pl,
+ httemplate/browse/agent.cgi, httemplate/browse/agent_type.cgi,
httemplate/browse/cust_main_county.cgi,
httemplate/browse/nas.cgi, httemplate/browse/part_pkg.cgi,
+ httemplate/browse/part_referral.cgi, httemplate/browse/queue.cgi,
httemplate/browse/svc_acct_pop.cgi, httemplate/edit/agent.cgi,
httemplate/edit/agent_type.cgi, httemplate/edit/cust_credit.cgi,
httemplate/edit/cust_credit_bill.cgi,
httemplate/edit/cust_main.cgi,
httemplate/edit/cust_main_county-expand.cgi,
+ httemplate/edit/cust_main_county.cgi,
httemplate/edit/cust_pay.cgi, httemplate/edit/cust_pkg.cgi,
- httemplate/edit/svc_acct.cgi, httemplate/edit/svc_acct_pop.cgi,
- httemplate/edit/svc_domain.cgi, httemplate/edit/svc_forward.cgi,
- httemplate/misc/catchall.cgi,
+ httemplate/edit/part_referral.cgi, httemplate/edit/svc_acct.cgi,
+ httemplate/edit/svc_acct_pop.cgi,
+ httemplate/edit/svc_acct_sm.cgi, httemplate/edit/svc_domain.cgi,
+ httemplate/edit/svc_forward.cgi, httemplate/misc/catchall.cgi,
httemplate/misc/delete-customer.cgi, httemplate/misc/link.cgi,
- httemplate/search/cust_main.cgi, httemplate/search/cust_pkg.cgi,
- httemplate/search/svc_acct.cgi, httemplate/search/svc_domain.cgi,
- httemplate/view/cust_bill.cgi, httemplate/view/cust_main.cgi,
- httemplate/view/svc_acct.cgi, httemplate/view/svc_domain.cgi,
- httemplate/view/svc_forward.cgi: cache foo *sigh*
+ httemplate/search/cust_bill.cgi, httemplate/search/cust_main.cgi,
+ httemplate/search/cust_pkg.cgi, httemplate/search/svc_acct.cgi,
+ httemplate/search/svc_acct_sm.cgi,
+ httemplate/search/svc_domain.cgi, httemplate/view/cust_bill.cgi,
+ httemplate/view/cust_main.cgi, httemplate/view/cust_pkg.cgi,
+ httemplate/view/svc_acct.cgi, httemplate/view/svc_acct_sm.cgi,
+ httemplate/view/svc_domain.cgi, httemplate/view/svc_forward.cgi:
+ cache foo *sigh*
2001-10-26 02:50 ivan
@@ -29849,9 +32402,11 @@
* FS/FS.pm, FS/MANIFEST, FS/FS/Conf.pm, FS/FS/ConfItem.pm,
FS/FS/svc_acct.pm, FS/FS/svc_domain.pm, FS/t/ConfItem.t,
- httemplate/index.html, httemplate/config/config-process.cgi,
- httemplate/config/config-view.cgi,
- httemplate/search/svc_acct.cgi: preliminary web config editor
+ bin/fs-setup, bin/svc_acct.export, httemplate/index.html,
+ httemplate/config/config-process.cgi,
+ httemplate/config/config-view.cgi, httemplate/docs/config.html,
+ httemplate/docs/install.html, httemplate/search/svc_acct.cgi:
+ preliminary web config editor
new config files: username-ampersand, passwordmax
@@ -29861,6 +32416,11 @@
documentation updates
+2001-10-23 17:59 ivan
+
+ * httemplate/browse/queue.cgi: Can't find string terminator "!"
+ anywhere before EOF at queue.cgi line 42
+
2001-10-23 13:53 ivan
* FS/bin/freeside-queued: Pg: FOR UPDATE LIMIT 1 mysql: LIMIT 1 FOR
@@ -29868,6 +32428,15 @@
greeeat.
+2001-10-23 11:57 ivan
+
+ * httemplate/docs/: config.html, install.html: document how to set
+ MySQL with BDB default tables
+
+2001-10-23 11:15 ivan
+
+ * bin/fs-setup: mysql fixes
+
2001-10-22 07:48 ivan
* FS/FS/svc_acct.pm: fix dir check
@@ -29887,18 +32456,26 @@
2001-10-20 05:17 ivan
- * FS/FS/cust_main.pm, FS/FS/part_pkg.pm, htetc/handler.pl,
+ * README.1.4.0pre3-4, FS/FS/cust_main.pm, FS/FS/part_pkg.pm,
+ bin/fs-setup, htetc/global.asa, htetc/handler.pl,
httemplate/browse/part_pkg.cgi, httemplate/docs/schema.html,
- httemplate/edit/part_pkg.cgi, httemplate/edit/svc_acct.cgi,
+ httemplate/docs/upgrade8.html, httemplate/edit/part_pkg.cgi,
+ httemplate/edit/svc_acct.cgi,
httemplate/edit/process/cust_main.cgi,
httemplate/edit/process/part_pkg.cgi: setup and recurring fee tax
exempt flags, UI to edit rework part_pkg editing UI some more
+2001-10-16 13:33 jeff
+
+ * bin/svc_acct.export: added slipip insertion for icradius and
+ vpopmail restart config
+
2001-10-15 07:58 ivan
- * FS/FS/cust_pkg.pm, htetc/handler.pl,
+ * FS/FS/cust_pkg.pm, htetc/global.asa, htetc/handler.pl,
httemplate/edit/REAL_cust_pkg.cgi,
- httemplate/edit/process/REAL_cust_pkg.cgi: date editing
+ httemplate/edit/process/REAL_cust_pkg.cgi,
+ httemplate/view/cust_pkg.cgi: date editing
2001-10-15 05:16 ivan
@@ -29925,15 +32502,22 @@
2001-10-15 03:42 ivan
- * FS/FS/cust_main.pm, FS/FS/part_pkg.pm,
- httemplate/browse/part_pkg.cgi, httemplate/docs/schema.html,
- httemplate/edit/part_pkg.cgi, httemplate/edit/part_svc.cgi,
+ * README.1.4.0pre3-4, FS/FS/cust_main.pm, FS/FS/part_pkg.pm,
+ bin/fs-setup, httemplate/browse/part_pkg.cgi,
+ httemplate/docs/config.html, httemplate/docs/schema.html,
+ httemplate/docs/upgrade8.html, httemplate/edit/part_pkg.cgi,
+ httemplate/edit/part_svc.cgi,
httemplate/edit/process/part_pkg.cgi: price plans web gui 1st
pass, oh my
+2001-10-12 08:26 ivan
+
+ * httemplate/browse/queue.cgi: add (as yet inactive) retry & remove
+ links
+
2001-10-11 10:46 ivan
- * htetc/handler.pl: price plan uI!
+ * htetc/: global.asa, handler.pl: price plan uI!
2001-10-11 10:44 ivan
@@ -29962,15 +32546,22 @@
2001-10-09 16:10 ivan
- * FS/FS/cust_credit.pm, FS/FS/cust_main.pm, FS/FS/cust_pay.pm,
- FS/FS/cust_pkg.pm, httemplate/docs/schema.html: add
- `unsuspendauto' config file: enable the automatic unsuspension of
- suspended packages when a customer's balance due changes from
- positive to zero or negative as the result of a payment or credit
+ * README.1.4.0pre3-4, FS/FS/cust_credit.pm, FS/FS/cust_main.pm,
+ FS/FS/cust_pay.pm, FS/FS/cust_pkg.pm,
+ httemplate/docs/config.html, httemplate/docs/install.html,
+ httemplate/docs/schema.html, httemplate/docs/upgrade8.html,
+ bin/fs-setup: add `unsuspendauto' config file: enable the
+ automatic unsuspension of suspended packages when a customer's
+ balance due changes from positive to zero or negative as the
+ result of a payment or credit
add cust_pkg.manual_flag to disable this behaviour per customer
package (no UI to set this yet)
+2001-10-09 06:16 ivan
+
+ * httemplate/docs/install.html: update mysql links
+
2001-10-09 00:16 ivan
* httemplate/edit/process/part_svc.cgi: that was a confusing bug to
@@ -29981,10 +32572,15 @@
* FS/FS/cust_pkg.pm: fix syntax error in newly-enabled insert sub,
sheesh
+2001-10-02 13:07 ivan
+
+ * httemplate/docs/upgrade8.html: doc clarification (?)
+
2001-10-02 09:00 jeff
- * FS/FS/cust_pay_batch.pm: add pkey to batch payments and fix a doc
- typo
+ * README.1.4.0pre3-4, FS/FS/cust_pay_batch.pm, bin/fs-setup,
+ httemplate/docs/upgrade8.html: add pkey to batch payments and fix
+ a doc typo
2001-10-02 04:10 ivan
@@ -30005,7 +32601,12 @@
2001-09-30 13:30 ivan
- * FS/FS/svc_acct.pm: username-uppercase config file
+ * FS/FS/svc_acct.pm, httemplate/docs/config.html:
+ username-uppercase config file
+
+2001-09-27 21:33 ivan
+
+ * httemplate/docs/install.html: ssh recommendations
2001-09-27 14:49 ivan
@@ -30026,12 +32627,17 @@
* httemplate/view/svc_acct.cgi: fix for pre-1.4.0 accounts with no
domsvc
+2001-09-26 04:34 ivan
+
+ * README.1.4.0pre3-4: index oops
+
2001-09-26 02:17 ivan
- * FS/FS.pm, FS/MANIFEST, FS/FS/cust_credit_bill.pm,
- FS/FS/cust_main.pm, FS/FS/part_pop_local.pm,
- FS/FS/svc_acct_pop.pm, FS/t/part_pop_local.t,
- httemplate/docs/schema.html: add part_pop_local table
+ * README.1.4.0pre3-4, FS/FS.pm, FS/MANIFEST,
+ FS/FS/cust_credit_bill.pm, FS/FS/cust_main.pm,
+ FS/FS/part_pop_local.pm, FS/FS/svc_acct_pop.pm,
+ FS/t/part_pop_local.t, bin/fs-setup, httemplate/docs/schema.html,
+ httemplate/docs/upgrade8.html: add part_pop_local table
2001-09-25 11:03 ivan
@@ -30040,12 +32646,13 @@
2001-09-25 11:01 ivan
- * FS/FS/cust_main.pm: add emailinvoiceonly config file and begin to
- use it
+ * FS/FS/cust_main.pm, httemplate/docs/config.html: add
+ emailinvoiceonly config file and begin to use it
2001-09-25 08:55 ivan
- * FS/FS/cust_main.pm: Business::OnlinePayment::BankOfAmerica
+ * FS/FS/cust_main.pm, httemplate/docs/config.html:
+ Business::OnlinePayment::BankOfAmerica
2001-09-24 17:05 ivan
@@ -30075,7 +32682,8 @@
2001-09-19 14:06 ivan
- * FS/: MANIFEST, FS/svc_acct.pm, bin/freeside-apply-credits:
+ * README.1.4.0pre3-4, FS/MANIFEST, FS/FS/svc_acct.pm,
+ FS/bin/freeside-apply-credits, httemplate/docs/config.html:
directory hashing remove jeff's lib patch from
freeside-apply-credits add freeside-apply-credits to MANIFEST
README for pre3-4
@@ -30108,9 +32716,10 @@
2001-09-16 05:45 ivan
* FS/FS/Record.pm, FS/FS/cust_main_invoice.pm, FS/FS/svc_acct.pm,
- httemplate/index.html, httemplate/search/cust_main.cgi,
- httemplate/view/cust_main.cgi: fix oops in
- FS::cust_main_invoice::replace preventing package cancellation
+ httemplate/index.html, httemplate/docs/config.html,
+ httemplate/search/cust_main.cgi, httemplate/view/cust_main.cgi:
+ fix oops in FS::cust_main_invoice::replace preventing package
+ cancellation
add toggle switch to cust_main searching to show/hide cancelled
customers. hidecancelledcustomers config file is just which
@@ -30127,6 +32736,10 @@
* FS/FS/Record.pm: s/croak/confess/
+2001-09-12 08:54 ivan
+
+ * httemplate/docs/: install.html, upgrade8.html: mason warnings
+
2001-09-12 08:45 ivan
* FS/FS/part_svc.pm: oops
@@ -30134,19 +32747,25 @@
2001-09-11 16:44 ivan
* FS/FS/part_svc.pm, httemplate/edit/svc_acct.cgi,
- httemplate/edit/svc_domain.cgi, httemplate/edit/svc_forward.cgi,
- httemplate/view/svc_acct.cgi: radius attributes & default/fixed
- values should work again now
+ httemplate/edit/svc_acct_sm.cgi, httemplate/edit/svc_domain.cgi,
+ httemplate/edit/svc_forward.cgi, httemplate/view/svc_acct.cgi:
+ radius attributes & default/fixed values should work again now
2001-09-11 15:20 ivan
* FS/FS/svc_Common.pm, bin/fs-radius-add-check,
- bin/fs-radius-add-reply: fix radius attribute adding
+ bin/fs-radius-add-reply, bin/fs-setup, bin/svc_acct.export: fix
+ radius attribute adding
2001-09-11 14:58 ivan
* FS/bin/freeside-queued: usage sub
+2001-09-11 13:59 ivan
+
+ * httemplate/edit/svc_acct_sm.cgi: persistance problem not clearing
+ variables between runs
+
2001-09-11 13:44 ivan
* httemplate/search/svc_acct.cgi: getting "you should run the
@@ -30200,17 +32819,24 @@
2001-09-11 02:56 ivan
- * httemplate/: edit/process/quick-cust_pkg.cgi, view/cust_main.cgi:
- fix quick order
+ * README.1.4.0pre2-3, httemplate/edit/process/quick-cust_pkg.cgi,
+ httemplate/view/cust_main.cgi: fix quick order
+
+2001-09-10 21:44 ivan
+
+ * httemplate/browse/queue.cgi: web queue view
2001-09-10 21:17 ivan
- * FS/FS/svc_acct.pm: username-noperiod config file
+ * FS/FS/svc_acct.pm, httemplate/docs/config.html: username-noperiod
+ config file
2001-09-10 20:15 ivan
- * FS/FS/cust_main.pm, FS/FS/svc_acct.pm, FS/bin/freeside-queued,
- httemplate/edit/part_svc.cgi: cyrus support
+ * README.1.4.0pre2-3, FS/FS/cust_main.pm, FS/FS/svc_acct.pm,
+ FS/bin/freeside-queued, httemplate/docs/config.html,
+ httemplate/docs/export.html, httemplate/edit/part_svc.cgi: cyrus
+ support
2001-09-10 18:09 ivan
@@ -30218,22 +32844,28 @@
2001-09-10 17:08 ivan
- * FS/FS.pm, FS/MANIFEST, FS/FS/Record.pm,
+ * README.1.4.0pre2-3, FS/FS.pm, FS/MANIFEST, FS/FS/Record.pm,
FS/FS/cust_credit_bill.pm, FS/FS/cust_main.pm, FS/FS/part_svc.pm,
- FS/FS/queue.pm, FS/FS/queue_arg.pm, FS/bin/freeside-queued,
- FS/t/queue.t, FS/t/queue_arg.t, htetc/handler.pl,
- httemplate/index.html, httemplate/browse/part_svc.cgi,
- httemplate/docs/schema.html, httemplate/edit/part_svc.cgi,
+ FS/FS/queue.pm, FS/FS/queue_arg.pm, FS/bin/freeside-bill,
+ FS/bin/freeside-queued, FS/t/queue.t, FS/t/queue_arg.t,
+ htetc/handler.pl, httemplate/index.html,
+ httemplate/browse/part_svc.cgi, httemplate/docs/install.html,
+ httemplate/docs/schema.html, httemplate/docs/upgrade8.html,
+ httemplate/edit/part_svc.cgi,
httemplate/edit/process/part_svc.cgi,
httemplate/search/cust_main.cgi: faster (cached) fuzzy searches
prelim. job queues! fixed part_svc editing
2001-09-10 17:07 ivan
- * bin/: freeside-init, fs-migrate-part_svc: fixing
+ * bin/: freeside-init, fs-migrate-part_svc, fs-setup: fixing
fs-migrate-part_svc updateing fs-setup for job queues
freeside-init for starting freeside-queued
+2001-09-07 17:28 khoff
+
+ * bin/fs-setup: First post. Sorry. Missing comma.
+
2001-09-07 13:49 ivan
* FS/FS/part_svc_column.pm: oops, forgot to add this
@@ -30249,22 +32881,28 @@
2001-09-07 13:17 ivan
* FS/MANIFEST, FS/FS/raddb.pm, FS/FS/svc_acct.pm, FS/t/raddb.t,
- bin/fs-radius-add-check, bin/fs-radius-add-reply,
+ bin/fs-radius-add-check, bin/fs-radius-add-reply, bin/fs-setup,
bin/generate-raddb: fix RADIUS attribute capitalization
+2001-09-06 14:43 ivan
+
+ * httemplate/docs/: install.html, postgresql.html: no more pg
+ RADIUS silliness
+
2001-09-06 14:20 ivan
* FS/FS/svc_acct.pm, httemplate/docs/schema.html: doc
2001-09-06 13:41 ivan
- * FS/FS.pm, FS/MANIFEST, FS/FS/UID.pm, FS/FS/part_svc.pm,
- FS/FS/svc_Common.pm, FS/FS/svc_acct.pm, FS/FS/svc_domain.pm,
- FS/FS/svc_forward.pm, FS/FS/svc_www.pm, FS/t/part_svc_column.t,
+ * README.1.4.0pre2-3, FS/FS.pm, FS/MANIFEST, FS/FS/UID.pm,
+ FS/FS/part_svc.pm, FS/FS/svc_Common.pm, FS/FS/svc_acct.pm,
+ FS/FS/svc_acct_sm.pm, FS/FS/svc_domain.pm, FS/FS/svc_forward.pm,
+ FS/FS/svc_www.pm, FS/t/part_svc_column.t,
bin/fs-migrate-part_svc, bin/fs-migrate-payref,
- bin/fs-radius-add-check, bin/fs-radius-add-reply,
+ bin/fs-radius-add-check, bin/fs-radius-add-reply, bin/fs-setup,
httemplate/browse/part_svc.cgi, httemplate/docs/schema.html,
- httemplate/edit/part_svc.cgi,
+ httemplate/docs/upgrade8.html, httemplate/edit/part_svc.cgi,
httemplate/edit/process/part_svc.cgi: finally fix part_svc!!!
2001-09-04 08:12 ivan
@@ -30280,17 +32918,49 @@
* FS/FS/cust_pkg.pm, httemplate/browse/agent.cgi,
httemplate/browse/agent_type.cgi, httemplate/browse/part_pkg.cgi,
+ httemplate/browse/part_referral.cgi,
httemplate/browse/part_svc.cgi, httemplate/docs/admin.html,
httemplate/edit/part_svc.cgi, httemplate/edit/svc_acct.cgi,
httemplate/edit/process/quick-cust_pkg.cgi,
httemplate/view/cust_main.cgi: new admin documentation, quick
one-pkg order
+2001-09-04 04:15 ivan
+
+ * bin/fs-setup: rar
+
+2001-09-04 04:15 ivan
+
+ * bin/fs-setup: much better
+
+2001-09-04 04:14 ivan
+
+ * bin/fs-setup: tyops
+
+2001-09-04 04:03 ivan
+
+ * bin/fs-setup, httemplate/docs/config.html: silly syntax error and
+ doc updates
+
+2001-09-04 02:55 ivan
+
+ * httemplate/docs/install.html: better installation instructions
+
+2001-09-04 02:54 ivan
+
+ * htetc/global.asa: hehe, this should help out everybody without
+ DBIx::Profile (i.e. everybody)
+
+2001-09-03 15:16 ivan
+
+ * bin/fs-setup: this too
+
2001-09-03 15:07 ivan
* FS/FS/cust_bill.pm, FS/FS/cust_bill_pay.pm, FS/FS/cust_main.pm,
- FS/FS/cust_pay.pm, FS/FS/cust_svc.pm,
- httemplate/docs/signup.html, httemplate/edit/cust_credit.cgi,
+ FS/FS/cust_pay.pm, FS/FS/cust_svc.pm, FS/bin/freeside-bill,
+ httemplate/docs/signup.html, httemplate/docs/upgrade8.html,
+ httemplate/edit/cust_credit.cgi,
httemplate/edit/cust_credit_bill.cgi,
httemplate/edit/cust_pay.cgi,
httemplate/edit/process/cust_pay.cgi, httemplate/misc/bill.cgi,
@@ -30325,19 +32995,28 @@
2001-09-01 21:25 ivan
- * FS/: FS.pm, MANIFEST, FS/cust_bill_pay.pm, FS/cust_main.pm,
- FS/cust_refund.pm, t/CGI.t, t/Conf.t, t/Record.t, t/UID.t,
- t/agent.t, t/agent_type.t, t/cust_bill.t, t/cust_bill_pay.t,
- t/cust_bill_pkg.t, t/cust_credit.t, t/cust_credit_bill.t,
- t/cust_credit_refund.t, t/cust_main.t, t/cust_main_county.t,
- t/cust_main_invoice.t, t/cust_pay.t, t/cust_pay_batch.t,
- t/cust_pkg.t, t/cust_refund.t, t/cust_svc.t, t/domain_record.t,
- t/nas.t, t/part_pkg.t, t/part_referral.t, t/part_svc.t,
- t/pkg_svc.t, t/port.t, t/prepay_credit.t, t/session.t,
- t/svc_Common.t, t/svc_acct.t, t/svc_acct_pop.t, t/svc_domain.t,
+ * FS/: FS.pm, MANIFEST, test.pl, FS/cust_bill_pay.pm,
+ FS/cust_main.pm, FS/cust_refund.pm, t/CGI.t, t/CGIwrapper.t,
+ t/Conf.t, t/Record.t, t/UID.t, t/agent.t, t/agent_type.t,
+ t/cust_bill.t, t/cust_bill_pay.t, t/cust_bill_pkg.t,
+ t/cust_credit.t, t/cust_credit_bill.t, t/cust_credit_refund.t,
+ t/cust_main.t, t/cust_main_county.t, t/cust_main_invoice.t,
+ t/cust_pay.t, t/cust_pay_batch.t, t/cust_pkg.t, t/cust_refund.t,
+ t/cust_svc.t, t/domain_record.t, t/nas.t, t/part_pkg.t,
+ t/part_referral.t, t/part_svc.t, t/pkg_svc.t, t/port.t,
+ t/prepay_credit.t, t/session.t, t/svc_Common.t, t/svc_acct.t,
+ t/svc_acct_pop.t, t/svc_acct_sm.t, t/svc_domain.t,
t/svc_forward.t, t/svc_www.t, t/type_pkgs.t: lame testsuite and
the embarassing fixes in it found
+2001-09-01 20:42 ivan
+
+ * httemplate/docs/upgrade8.html: really. backup.
+
+2001-09-01 20:20 ivan
+
+ * httemplate/docs/upgrade8.html: upgrade
+
2001-09-01 19:53 jeff
* FS/bin/freeside-apply-credits: adding a credit apply utility
@@ -30345,8 +33024,9 @@
2001-09-01 19:46 ivan
* FS/FS/cust_bill_pay.pm, FS/FS/cust_main.pm, FS/FS/cust_pay.pm,
- FS/FS/cust_refund.pm, httemplate/docs/schema.html: cust_refund
- and cust_pay get custnums
+ FS/FS/cust_refund.pm, bin/fs-setup, httemplate/docs/schema.html,
+ httemplate/docs/upgrade8.html: cust_refund and cust_pay get
+ custnums
2001-09-01 18:27 ivan
@@ -30355,13 +33035,19 @@
cust_refund.pm: more udpates for the new world of unapplied
stuff. yay.
+2001-09-01 16:41 ivan
+
+ * httemplate/docs/upgrade8.html: cust_bill_pay and
+ cust_credit_refund
+
2001-09-01 15:28 jeff
- * FS/FS/cust_main.pm: haste makes waste... and left a method out
+ * FS/FS/cust_main.pm, httemplate/docs/upgrade8.html: haste makes
+ waste... and left a method out
2001-09-01 15:18 ivan
- * FS/FS/cust_credit_bill.pm: add primary key
+ * FS/FS/cust_credit_bill.pm, bin/fs-setup: add primary key
2001-09-01 15:01 ivan
@@ -30374,7 +33060,8 @@
2001-09-01 14:52 jeff
* FS/MANIFEST, FS/FS/cust_bill.pm, FS/FS/cust_credit.pm,
- FS/FS/cust_credit_bill.pm, FS/FS/cust_main.pm,
+ FS/FS/cust_credit_bill.pm, FS/FS/cust_main.pm, bin/fs-setup,
+ httemplate/docs/upgrade8.html,
httemplate/edit/cust_credit_bill.cgi,
httemplate/edit/process/cust_credit_bill.cgi,
httemplate/view/cust_main.cgi: add cust_credit_bill relating
@@ -30384,10 +33071,14 @@
* FS/FS/cust_bill_pay.pm, FS/FS/cust_credit_refund.pm,
FS/FS/cust_main.pm, FS/FS/cust_pay.pm, FS/FS/cust_refund.pm,
- httemplate/docs/schema.html: cust_bill_pay and
+ bin/fs-setup, httemplate/docs/schema.html: cust_bill_pay and
cust_credit_refund. payments can apply to multiple invoices and
refunds can apply to multiple credits.
+2001-09-01 05:35 ivan
+
+ * httemplate/search/cust_bill.cgi: totals
+
2001-08-31 02:20 ivan
* FS/FS/Record.pm: check US zips more strictly
@@ -30423,14 +33114,21 @@
* httemplate/edit/agent.cgi: ui
+2001-08-29 01:45 ivan
+
+ * bin/fs-setup, httemplate/docs/upgrade8.html: catchall *can* be
+ NULL
+
2001-08-28 09:58 ivan
- * httemplate/: docs/signup.html, search/cust_main.cgi:
- customer-to-customer referrals in singup server
+ * httemplate/: docs/signup.html, docs/upgrade8.html,
+ search/cust_main.cgi: customer-to-customer referrals in singup
+ server
2001-08-28 07:34 ivan
- * FS/FS/cust_main.pm, httemplate/edit/cust_main.cgi,
+ * FS/FS/cust_main.pm, httemplate/docs/config.html,
+ httemplate/docs/upgrade8.html, httemplate/edit/cust_main.cgi,
httemplate/search/cust_main.cgi, httemplate/view/cust_main.cgi:
customer-to-customer referrals!
@@ -30453,10 +33151,12 @@
2001-08-21 02:34 ivan
- * FS/FS/Record.pm, FS/FS/UID.pm, httemplate/browse/agent.cgi,
+ * FS/FS/Record.pm, FS/FS/UID.pm, FS/bin/freeside-bill,
+ htetc/global.asa, httemplate/browse/agent.cgi,
httemplate/browse/agent_type.cgi,
httemplate/browse/cust_main_county.cgi,
httemplate/browse/part_pkg.cgi,
+ httemplate/browse/part_referral.cgi,
httemplate/browse/svc_acct_pop.cgi: no more &swapuid
2001-08-20 20:03 ivan
@@ -30467,13 +33167,13 @@
2001-08-20 19:44 ivan
* FS/FS/domain_record.pm, FS/FS/prepay_credit.pm, FS/FS/svc_www.pm,
- eg/TEMPLATE_cust_main.import, eg/table_template-svc.pm: remove
- $Log$
+ FS/bin/freeside-print-batch, eg/TEMPLATE_cust_main.import,
+ eg/table_template-svc.pm: remove $Log$
2001-08-20 19:43 ivan
- * bin/fs-migrate-svc_acct_sm: i think svc_acct_sm.import should go
- away, but...
+ * bin/: dbdef-create, fs-migrate-svc_acct_sm, svc_acct_sm.import: i
+ think svc_acct_sm.import should go away, but...
2001-08-20 19:32 ivan
@@ -30482,23 +33182,28 @@
2001-08-20 19:31 ivan
* httemplate/: browse/agent.cgi, browse/agent_type.cgi,
- browse/part_pkg.cgi, browse/svc_acct_pop.cgi, edit/agent.cgi,
- edit/agent_type.cgi, edit/cust_credit.cgi,
- edit/cust_main_county-expand.cgi, edit/cust_pay.cgi,
- edit/cust_pkg.cgi, edit/part_pkg.cgi, edit/svc_acct_pop.cgi,
- edit/svc_domain.cgi, edit/svc_forward.cgi,
+ browse/part_pkg.cgi, browse/part_referral.cgi,
+ browse/svc_acct_pop.cgi, edit/agent.cgi, edit/agent_type.cgi,
+ edit/cust_credit.cgi, edit/cust_main_county-expand.cgi,
+ edit/cust_main_county.cgi, edit/cust_pay.cgi, edit/cust_pkg.cgi,
+ edit/part_pkg.cgi, edit/part_referral.cgi, edit/svc_acct_pop.cgi,
+ edit/svc_acct_sm.cgi, edit/svc_domain.cgi, edit/svc_forward.cgi,
edit/process/agent.cgi, edit/process/agent_type.cgi,
- edit/process/cust_credit.cgi, edit/process/cust_pay.cgi,
- edit/process/cust_pkg.cgi, edit/process/part_pkg.cgi,
+ edit/process/cust_credit.cgi, edit/process/cust_main_county.cgi,
+ edit/process/cust_pay.cgi, edit/process/cust_pkg.cgi,
+ edit/process/part_pkg.cgi, edit/process/part_referral.cgi,
edit/process/svc_acct.cgi, edit/process/svc_acct_pop.cgi,
- edit/process/svc_domain.cgi, edit/process/svc_forward.cgi,
- misc/bill.cgi, misc/cancel-unaudited.cgi, misc/catchall.cgi,
- misc/delete-customer.cgi, misc/link.cgi, misc/print-invoice.cgi,
+ edit/process/svc_acct_sm.cgi, edit/process/svc_domain.cgi,
+ edit/process/svc_forward.cgi, misc/bill.cgi,
+ misc/cancel-unaudited.cgi, misc/cancel_pkg.cgi,
+ misc/catchall.cgi, misc/delete-customer.cgi, misc/expire_pkg.cgi,
+ misc/link.cgi, misc/print-invoice.cgi, misc/susp_pkg.cgi,
misc/unsusp_pkg.cgi, misc/process/catchall.cgi,
misc/process/delete-customer.cgi, misc/process/link.cgi,
- search/svc_domain.cgi, view/cust_bill.cgi, view/svc_acct.cgi,
- view/svc_domain.cgi, view/svc_forward.cgi: remove $Log$ messages.
- whew.
+ search/cust_bill.cgi, search/svc_acct_sm.cgi,
+ search/svc_domain.cgi, view/cust_bill.cgi, view/cust_pkg.cgi,
+ view/svc_acct.cgi, view/svc_acct_sm.cgi, view/svc_domain.cgi,
+ view/svc_forward.cgi: remove $Log$ messages. whew.
2001-08-20 19:16 ivan
@@ -30540,16 +33245,17 @@
2001-08-20 02:41 ivan
- * FS/FS/: svc_acct.pm, svc_domain.pm, svc_forward.pm: dtrt when
- deleting accouts wrt forwards, catchalls & other references to
- svc_acct records
+ * FS/FS/: svc_acct.pm, svc_acct_sm.pm, svc_domain.pm,
+ svc_forward.pm: dtrt when deleting accouts wrt forwards,
+ catchalls & other references to svc_acct records
depreciate svc_acct_sm further; move qmail catchall handling to
svc_domain
2001-08-20 02:38 ivan
- * httemplate/docs/schema.html: documentation updates
+ * httemplate/docs/: config.html, export.html, schema.html:
+ documentation updates
2001-08-19 08:53 jeff
@@ -30564,11 +33270,23 @@
httemplate/view/svc_forward.cgi: added user interface for
svc_forward and vpopmail support
+2001-08-19 06:50 ivan
+
+ * bin/fs-setup, httemplate/docs/upgrade8.html: indices on cust_main
+ ship_last and ship_country
+
2001-08-19 03:25 ivan
* bin/svc_acct.import: add system shells to @FS::svc_acct:shells on
the fly, fixes: ticket #88
+2001-08-19 02:08 ivan
+
+ * TODO: this is what i fed to RT, might as well check it in.
+
+ no further modifications to TODO. everything is in the ticketing
+ system now.
+
2001-08-19 01:32 ivan
* httemplate/search/cust_pkg.cgi: display bill and service
@@ -30599,6 +33317,7 @@
2001-08-17 04:05 ivan
* httemplate/: browse/cust_main_county.cgi,
+ edit/cust_main_county.cgi,
edit/process/cust_main_county-collapse.cgi,
edit/process/cust_main_county-expand.cgi: clean up tax rate
editing: sort by country->state->county, add "collapse state"
@@ -30607,7 +33326,7 @@
2001-08-17 03:57 ivan
- * bin/svc_acct.import: gah
+ * bin/: dbdef-create, svc_acct.export, svc_acct.import: gah
2001-08-17 03:57 ivan
@@ -30615,7 +33334,8 @@
2001-08-17 03:55 ivan
- * FS/FS/cust_main.pm: Business::OnlinePayment
+ * FS/FS/cust_main.pm, httemplate/docs/config.html:
+ Business::OnlinePayment
2001-08-17 03:53 ivan
@@ -30648,16 +33368,27 @@
* FS/FS/svc_acct.pm: untaint svcnum & domsvc
+2001-08-12 17:19 ivan
+
+ * bin/fs-setup: depriciate svc_acct_sm, add unique index for
+ username+domsvc on svc_acct, remove silly $Log$
+
2001-08-12 12:41 jeff
* FS/FS/svc_acct.pm, FS/FS/svc_domain.pm, FS/FS/svc_forward.pm,
- bin/fs-migrate-svc_acct_sm: merging vpopmail support branch
+ bin/fs-migrate-svc_acct_sm, bin/fs-setup, bin/svc_acct.export,
+ bin/svc_acct_sm.export, httemplate/docs/config.html,
+ httemplate/docs/upgrade8.html: merging vpopmail support branch
2001-08-12 01:56 ivan
* httemplate/edit/process/part_svc.cgi: don't use
Apache::ASP-specific $Redirect object
+2001-08-11 18:26 ivan
+
+ * httemplate/docs/postgresql.html: i did get it working
+
2001-08-11 17:07 ivan
* httemplate/edit/: cust_main.cgi, process/cust_main.cgi: use
@@ -30681,6 +33412,10 @@
* httemplate/browse/part_svc.cgi: missed a variable interpolation
+2001-08-10 22:53 ivan
+
+ * bin/fs-setup, httemplate/docs/upgrade8.html: add comments field
+
2001-08-10 22:52 ivan
* httemplate/: edit/cust_main.cgi, view/cust_main.cgi: add customer
@@ -30749,6 +33484,11 @@
httemplate/search/cust_main.cgi, httemplate/view/cust_main.cgi:
shipping address additions
+2001-07-30 02:53 ivan
+
+ * httemplate/docs/upgrade8.html: Pg primary key upgrade fix (create
+ fix in new DBIx::DBSchema)
+
2001-07-30 01:03 ivan
* httemplate/: .htaccess, docs/overview.dia, docs/overview.png:
@@ -30756,57 +33496,82 @@
2001-07-30 01:02 ivan
- * htetc/handler.pl: template stuffs
+ * htetc/: global.asa, handler.pl: template stuffs
2001-07-30 01:01 ivan
* Makefile: need this too!
+2001-07-30 00:42 ivan
+
+ * bin/fs-setup: need an DBIx::DBSchema with delcolumn
+
2001-07-30 00:36 ivan
* httemplate/index.html, httemplate/browse/agent.cgi,
httemplate/browse/agent_type.cgi,
httemplate/browse/cust_main_county.cgi,
httemplate/browse/nas.cgi, httemplate/browse/part_pkg.cgi,
+ httemplate/browse/part_referral.cgi,
httemplate/browse/part_svc.cgi,
httemplate/browse/svc_acct_pop.cgi, httemplate/docs/admin.html,
- httemplate/docs/index.html, httemplate/docs/legacy.html,
- httemplate/docs/passwd.html, httemplate/docs/schema.html,
- httemplate/docs/session.html, httemplate/docs/signup.html,
- bin/masonize, bin/pod2x, httemplate/edit/agent.cgi,
+ httemplate/docs/billing.html, httemplate/docs/config.html,
+ httemplate/docs/export.html, httemplate/docs/index.html,
+ httemplate/docs/install.html, httemplate/docs/legacy.html,
+ httemplate/docs/passwd.html, httemplate/docs/postgresql.html,
+ httemplate/docs/schema.html, httemplate/docs/session.html,
+ httemplate/docs/signup.html, httemplate/docs/trouble.html,
+ httemplate/docs/upgrade.html, httemplate/docs/upgrade2.html,
+ httemplate/docs/upgrade3.html, httemplate/docs/upgrade4.html,
+ httemplate/docs/upgrade5.html, httemplate/docs/upgrade6.html,
+ httemplate/docs/upgrade7.html, httemplate/docs/upgrade8.html,
+ bin/fs-setup, bin/masonize, bin/pod2x, httemplate/edit/agent.cgi,
httemplate/edit/agent_type.cgi, httemplate/edit/cust_credit.cgi,
httemplate/edit/cust_main.cgi,
httemplate/edit/cust_main_county-expand.cgi,
+ httemplate/edit/cust_main_county.cgi,
httemplate/edit/cust_pay.cgi, httemplate/edit/cust_pkg.cgi,
- httemplate/edit/part_pkg.cgi, httemplate/edit/part_svc.cgi,
- httemplate/edit/svc_acct.cgi, httemplate/edit/svc_acct_pop.cgi,
- httemplate/edit/svc_domain.cgi,
+ httemplate/edit/part_pkg.cgi, httemplate/edit/part_referral.cgi,
+ httemplate/edit/part_svc.cgi, httemplate/edit/svc_acct.cgi,
+ httemplate/edit/svc_acct_pop.cgi,
+ httemplate/edit/svc_acct_sm.cgi, httemplate/edit/svc_domain.cgi,
httemplate/edit/process/agent.cgi,
httemplate/edit/process/agent_type.cgi,
httemplate/edit/process/cust_credit.cgi,
httemplate/edit/process/cust_main.cgi,
httemplate/edit/process/cust_main_county-expand.cgi,
+ httemplate/edit/process/cust_main_county.cgi,
httemplate/edit/process/cust_pay.cgi,
httemplate/edit/process/cust_pkg.cgi,
httemplate/edit/process/part_pkg.cgi,
+ httemplate/edit/process/part_referral.cgi,
httemplate/edit/process/part_svc.cgi,
httemplate/edit/process/svc_acct.cgi,
httemplate/edit/process/svc_acct_pop.cgi,
+ httemplate/edit/process/svc_acct_sm.cgi,
httemplate/edit/process/svc_domain.cgi,
- httemplate/images/small-logo.png, httemplate/misc/bill.cgi,
- httemplate/misc/cancel-unaudited.cgi,
- httemplate/misc/delete-customer.cgi, httemplate/misc/link.cgi,
- httemplate/misc/print-invoice.cgi,
+ httemplate/images/mid-logo.png, httemplate/images/small-logo.png,
+ httemplate/misc/bill.cgi, httemplate/misc/cancel-unaudited.cgi,
+ httemplate/misc/cancel_pkg.cgi,
+ httemplate/misc/delete-customer.cgi,
+ httemplate/misc/expire_pkg.cgi, httemplate/misc/link.cgi,
+ httemplate/misc/print-invoice.cgi, httemplate/misc/susp_pkg.cgi,
httemplate/misc/unsusp_pkg.cgi,
httemplate/misc/process/delete-customer.cgi,
httemplate/misc/process/link.cgi,
+ httemplate/search/cust_bill.cgi,
httemplate/search/cust_bill.html,
+ httemplate/search/cust_main-payinfo.html,
httemplate/search/cust_main.cgi,
httemplate/search/cust_main.html, httemplate/search/cust_pkg.cgi,
- httemplate/search/svc_acct.cgi, httemplate/search/svc_domain.cgi,
- httemplate/view/cust_bill.cgi, httemplate/view/cust_main.cgi,
- httemplate/view/svc_acct.cgi, httemplate/view/svc_domain.cgi:
- templates!!!
+ httemplate/search/svc_acct.cgi, httemplate/search/svc_acct.html,
+ httemplate/search/svc_acct_sm.cgi,
+ httemplate/search/svc_acct_sm.html,
+ httemplate/search/svc_domain.cgi,
+ httemplate/search/svc_domain.html, httemplate/view/cust_bill.cgi,
+ httemplate/view/cust_main.cgi, httemplate/view/cust_pkg.cgi,
+ httemplate/view/svc_acct.cgi, httemplate/view/svc_acct_sm.cgi,
+ httemplate/view/svc_domain.cgi: templates!!!
2001-07-30 00:33 ivan
@@ -30816,14 +33581,18 @@
* INSTALL, README: templates!
+2001-07-30 00:13 ivan
+
+ * TODO: todocruft
+
2001-07-29 23:28 ivan
* FS/FS/svc_acct.pm: allow !! as password for disabled accounts
2001-07-29 23:07 ivan
- * bin/svc_acct.import: allow !! for locked accounts instead of
- changing to *SUSPENDED*
+ * bin/: svc_acct.export, svc_acct.import: allow !! for locked
+ accounts instead of changing to *SUSPENDED*
2001-07-27 10:16 ivan
@@ -30838,10 +33607,24 @@
* FS/FS/UID.pm: better error message
+2001-06-20 01:33 ivan
+
+ * bin/svc_acct.export: > Use of uninitialized value in
+ concatenation (.) at svc_acct.export line
+ > 276.
+
+2001-06-06 15:22 ivan
+
+ * TODO: templating thoughts
+
2001-06-05 14:40 ivan
- * debian/: README.Debian, changelog, control, copyright, init.d.ex,
- rules: add deb packaging foo (doesn't work yet)
+ * debian/: README.Debian, changelog, conffiles.ex, control,
+ copyright, cron.d.ex, dirs, docs, ex.doc-base.package,
+ freeside-doc.docs, freeside-doc.files, init.d.ex, manpage.1.ex,
+ manpage.sgml.ex, menu.ex, postinst.ex, postrm.ex, preinst.ex,
+ prerm.ex, rules, watch.ex: add deb packaging foo (doesn't work
+ yet)
2001-06-03 10:22 ivan
@@ -30852,6 +33635,14 @@
* README: 1.3.1!!!
+2001-06-03 07:16 ivan
+
+ * bin/fs-setup: allow empty refund reasons
+
+2001-06-03 07:15 ivan
+
+ * TODO: yes yes
+
2001-06-03 05:36 ivan
* FS/FS/svc_acct.pm: add username-letter and username-letterfirst
@@ -30896,6 +33687,10 @@
* FS/bin/freeside-email: simple program to list all email addresses
+2001-05-08 03:44 ivan
+
+ * bin/: svc_acct.export, svc_acct_sm.export: fix for OO Net::SCP
+
2001-05-07 08:42 ivan
* FS/FS/Record.pm: tyop
@@ -30965,16 +33760,19 @@
2001-04-21 18:56 ivan
- * README, FS/FS.pm, FS/MANIFEST, FS/FS/svc_acct.pm,
- FS/FS/svc_domain.pm, FS/FS/svc_www.pm, bin/svc_acct.import: get
- rid of FS::SSH.pm (became Net::SSH and Net::SCP on CPAN)
+ * README, FS/FS.pm, FS/MANIFEST, FS/FS/SSH.pm, FS/FS/svc_acct.pm,
+ FS/FS/svc_acct_sm.pm, FS/FS/svc_domain.pm, FS/FS/svc_www.pm,
+ bin/svc_acct.export, bin/svc_acct.import, bin/svc_acct_sm.export,
+ bin/svc_acct_sm.import, bin/svc_domain.import,
+ fs_passwd/fs_passwd_server: get rid of FS::SSH.pm (became
+ Net::SSH and Net::SCP on CPAN)
2001-04-21 18:38 ivan
- * FS/FS/svc_domain.pm: svc_domain needs to import dbh sub from
- Record view/cust_main.cgi needs to use ->owed method, not check
- (depriciated) owed field search/cust_bill.cgi redirect error when
- there's only one invoice
+ * TODO, FS/FS/svc_domain.pm: svc_domain needs to import dbh sub
+ from Record view/cust_main.cgi needs to use ->owed method, not
+ check (depriciated) owed field search/cust_bill.cgi redirect
+ error when there's only one invoice
2001-04-21 17:49 ivan
@@ -30984,6 +33782,10 @@
* FS/MANIFEST: no more dbdef
+2001-04-15 06:56 ivan
+
+ * TODO: [no log message]
+
2001-04-15 06:35 ivan
* FS/FS/: nas.pm, session.pm, svc_Common.pm, svc_domain.pm:
@@ -30991,21 +33793,30 @@
2001-04-15 05:56 ivan
- * FS/FS/Record.pm: s/dbdef/DBIx::DBSchema/
+ * TODO, FS/FS/Record.pm, FS/FS/dbdef.pm, FS/FS/dbdef_colgroup.pm,
+ FS/FS/dbdef_column.pm, FS/FS/dbdef_index.pm,
+ FS/FS/dbdef_table.pm, FS/FS/dbdef_unique.pm, bin/dbdef-create,
+ bin/fs-setup: s/dbdef/DBIx::DBSchema/
2001-04-15 03:33 ivan
- * CREDITS: better docs for the worst bit, finally
+ * CREDITS, TODO: better docs for the worst bit, finally
+
+2001-04-15 02:36 ivan
+
+ * bin/fs-setup:
+ http://www.sisd.com/freeside/list-archive/msg01450.html
2001-04-09 16:05 ivan
- * FS/FS/: cust_bill.pm, cust_credit.pm, cust_main.pm, cust_pay.pm,
- cust_pkg.pm, cust_refund.pm, session.pm, svc_Common.pm:
- Transactions Part I!!!
+ * TODO, FS/FS/cust_bill.pm, FS/FS/cust_credit.pm,
+ FS/FS/cust_main.pm, FS/FS/cust_pay.pm, FS/FS/cust_pkg.pm,
+ FS/FS/cust_refund.pm, FS/FS/session.pm, FS/FS/svc_Common.pm,
+ bin/fs-setup: Transactions Part I!!!
2001-04-09 08:50 ivan
- * CREDITS, FS/MANIFEST: rar
+ * CREDITS, TODO, FS/MANIFEST: rar
2001-03-30 09:33 ivan
@@ -31027,6 +33838,19 @@
* FS/FS/session.pm: silly typo, fix sent by Mack <mackn@mackn.net>,
thanks!
+2001-02-21 15:48 ivan
+
+ * bin/svc_acct.export: add icradius_secrets config file to export
+ to a non-Freeside MySQL database for ICRADIUS
+
+2001-02-20 17:48 ivan
+
+ * FS/bin/freeside-print-batch: stupid pod errors
+
+2001-02-20 17:46 ivan
+
+ * FS/FS/: Bill.pm, Invoice.pm: cruft
+
2001-02-20 17:45 ivan
* FS/FS/nas.pm: pod tyop
@@ -31060,13 +33884,13 @@
2001-02-03 06:03 ivan
- * FS/FS/Record.pm, FS/FS/UID.pm, FS/FS/cust_main.pm,
+ * FS/FS/Record.pm, FS/FS/UID.pm, FS/FS/cust_main.pm, bin/fs-setup,
bin/generate-prepay: time-based prepaid cards, session monitor.
woop!
2001-01-30 23:21 ivan
- * FS/FS/: cust_main.pm, svc_acct.pm: fix tyops
+ * TODO, FS/FS/cust_main.pm, FS/FS/svc_acct.pm: fix tyops
2001-01-30 01:08 ivan
@@ -31078,7 +33902,15 @@
2000-12-26 15:51 ivan
- * CREDITS: statedefault & referraldefault config files
+ * CREDITS, TODO: statedefault & referraldefault config files
+
+2000-12-10 17:30 ivan
+
+ * TODO: more ancient todo stuff from my inbox
+
+2000-12-10 17:10 ivan
+
+ * TODO: ancient stuff out of my inbox
2000-12-08 14:22 ivan
@@ -31088,15 +33920,19 @@
* FS/FS/Record.pm: DESTROY sub
+2000-12-03 16:13 ivan
+
+ * bin/fs-setup: fix nas.last type
+
2000-12-03 12:25 ivan
- * FS/FS/: Record.pm, nas.pm, port.pm, session.pm: session monitor
- updates
+ * TODO, FS/FS/Record.pm, FS/FS/nas.pm, FS/FS/port.pm,
+ FS/FS/session.pm: session monitor updates
2000-12-03 07:14 ivan
- * CREDITS, FS/FS/cust_bill.pm: bugfixes from Jeff Finucane
- <jeff@cmh.net>, thanks!
+ * CREDITS, FS/FS/cust_bill.pm, bin/svc_acct_sm.import: bugfixes
+ from Jeff Finucane <jeff@cmh.net>, thanks!
2000-12-03 05:45 ivan
@@ -31109,7 +33945,15 @@
2000-12-03 02:09 ivan
- * FS/MANIFEST: bad caches!
+ * FS/: MANIFEST, FS/CGIwrapper.pm: bad caches!
+
+2000-12-01 10:34 ivan
+
+ * bin/fs-setup: another tyop
+
+2000-12-01 10:33 ivan
+
+ * bin/fs-setup: tyop
2000-11-22 15:30 ivan
@@ -31117,8 +33961,12 @@
2000-11-07 07:00 ivan
- * FS/: MANIFEST, FS/Record.pm, FS/nas.pm, FS/session.pm: session
- monitor
+ * FS/MANIFEST, FS/FS/Record.pm, FS/FS/nas.pm, FS/FS/session.pm,
+ bin/fs-setup: session monitor
+
+2000-10-30 02:47 ivan
+
+ * bin/fs-setup: nas.last can't be defined NULL if indexed
2000-10-27 13:18 ivan
@@ -31127,7 +33975,12 @@
2000-10-27 13:15 ivan
- * FS/FS/Record.pm, eg/table_template.pm: session monitor
+ * TODO, FS/FS/Record.pm, bin/fs-setup, eg/table_template.pm:
+ session monitor
+
+2000-10-15 05:58 ivan
+
+ * TODO: roo
2000-10-11 17:44 ivan
@@ -31139,13 +33992,17 @@
print_text method is called, want to print overdue invoices if
printed > 0, not > 1
+2000-08-24 00:26 ivan
+
+ * TODO: untaint template source
+
2000-08-09 11:40 ivan
* conf/invoice_template: example invoice template
2000-08-09 04:30 ivan
- * FS/FS/cust_bill.pm: templatable invoices
+ * TODO, FS/FS/cust_bill.pm: templatable invoices
2000-07-17 06:51 ivan
@@ -31164,11 +34021,20 @@
* CREDITS: rawr!
+2000-07-06 21:05 ivan
+
+ * fs_passwd/fs_passwd_server: wait()ing on SIGCHLD causing hangs
+ for some folks
+
2000-07-06 06:56 ivan
* FS/FS/svc_acct.pm: mis-PODed =back should have been a =cut in
conjunction with AUTOLOAD this was sure a pain to find
+2000-07-06 06:23 ivan
+
+ * bin/svc_acct.export: tyop
+
2000-07-06 06:19 ivan
* bin/: fs-radius-add-check, fs-radius-add-reply: remove duplicate
@@ -31176,19 +34042,56 @@
2000-07-06 01:57 ivan
- * FS/FS/svc_acct.pm, bin/fs-radius-add-check,
- bin/fs-radius-add-reply: support for radius check attributes
- (except importing). poorly documented.
+ * TODO, FS/FS/svc_acct.pm, bin/fs-radius-add,
+ bin/fs-radius-add-check, bin/fs-radius-add-reply, bin/fs-setup,
+ bin/svc_acct.export: support for radius check attributes (except
+ importing). poorly documented.
+
+2000-07-05 20:37 ivan
+
+ * bin/svc_acct_sm.export: don't error out on invalid
+ svc_acct_sm.domuid's that can't be matched in svc_acct.uid - just
+ warn.
2000-07-04 06:42 ivan
* FS/FS/svc_acct.pm: noted a API inconsistancy
+2000-07-03 02:13 ivan
+
+ * bin/svc_acct_sm.export: get rid of double sendmailrestart
+ invocation; no need for multiple sessions
+
+2000-07-03 02:09 ivan
+
+ * bin/svc_acct_sm.export: typo
+
+2000-07-03 02:03 ivan
+
+ * TODO, bin/svc_acct_sm.export: added sendmailrestart and
+ sendmailconfigpath config files
+
+2000-06-30 03:37 ivan
+
+ * FS/FS/svc_acct_sm.pm: maildisablecatchall configuration file
+
+2000-06-29 08:01 ivan
+
+ * bin/svc_acct.export: another silly typo in svc_acct.export
+
+2000-06-29 07:02 ivan
+
+ * bin/svc_acct_sm.export: add sendmailrestart configuration file
+
2000-06-29 05:27 ivan
* bin/svc_acct.import: s/password/_password/ for PostgreSQL wasn't
done in the import.
+2000-06-29 05:00 ivan
+
+ * bin/fs-setup: support for pre-encrypted md5 passwords.
+
2000-06-29 04:56 ivan
* FS/FS/svc_acct.pm: md5 passwords can are 34 characters long and
@@ -31199,6 +34102,15 @@
* FS/FS/svc_domain.pm: don't block on $whois_hack trueness when
adding new domains.
+2000-06-29 03:51 ivan
+
+ * bin/svc_acct_sm.import: oops, silly mistake
+
+2000-06-29 03:48 ivan
+
+ * bin/svc_acct_sm.import: make svc_acct_sm skip blank lines in
+ sendmail import
+
2000-06-28 05:54 ivan
* FS/FS/svc_acct.pm: superfluous my()
@@ -31208,6 +34120,11 @@
* FS/FS/svc_acct.pm: bugfix to accept shells that evaluate to false
in perl, like the empty string.
+2000-06-28 05:37 ivan
+
+ * bin/svc_acct.export: add support for config option
+ textradiusprepend
+
2000-06-28 05:32 ivan
* bin/svc_acct.import: allow RADIUS lines with "Auth-Type = Local"
@@ -31218,6 +34135,18 @@
* bin/svc_acct.import: make svc_acct more forgiving about RADIUS
users files
+2000-06-28 03:51 ivan
+
+ * bin/fs-radius-add: forgot to import a sub
+
+2000-06-28 03:48 ivan
+
+ * bin/fs-radius-add: quick hack to add RADIUS attributes
+
+2000-06-27 05:15 ivan
+
+ * TODO: i18n
+
2000-06-27 05:15 ivan
* FS/FS/: Record.pm, cust_main.pm: i18
@@ -31233,14 +34162,18 @@
2000-06-23 17:28 ivan
- * FS/FS/cust_main.pm: don't use Date::Manip; report correct program
- name in freeside-bill usage msg
+ * FS/: FS/cust_main.pm, bin/freeside-bill: don't use Date::Manip;
+ report correct program name in freeside-bill usage msg
2000-06-23 05:25 ivan
- * CREDITS, FS/FS/Record.pm, FS/FS/UID.pm: FS::Record::qsearch -
- more portable, doesn't depend on $sth->execute returning a number
- of rows, uses placeholders and prepare_cached
+ * CREDITS, TODO, FS/FS/Record.pm, FS/FS/UID.pm: FS::Record::qsearch
+ - more portable, doesn't depend on $sth->execute returning a
+ number of rows, uses placeholders and prepare_cached
+
+2000-06-22 03:52 ivan
+
+ * FS/bin/freeside-bill: tyop
2000-06-20 00:13 ivan
@@ -31252,7 +34185,12 @@
2000-06-15 07:45 ivan
- * CREDITS: text updates
+ * CREDITS, TODO: text updates
+
+2000-06-15 07:07 ivan
+
+ * bin/svc_acct.export: added ICRADIUS radreply table support,
+ courtesy of Kenny Elliott
2000-06-15 06:35 ivan
@@ -31263,6 +34201,15 @@
* FS/FS/cust_main.pm: fix for ncancelled_pkgs - when called in
scalar context, was only returning second item
+2000-06-12 01:37 ivan
+
+ * bin/svc_acct_sm.export: sendmail fix from Jeff Finucane
+
+2000-05-13 14:57 ivan
+
+ * TODO, FS/bin/freeside-print-batch: add print_batch script from
+ Joel Griffiths
+
2000-05-13 14:50 ivan
* FS/FS/: CGI.pm, UID.pm: cgisuidsetup takes an Apache object as
@@ -31277,10 +34224,61 @@
* FS/FS/CGI.pm: CGI.pm detects mod_perl and calls appropriate exit
(Registry's override doesn't work here)
+2000-04-02 19:32 ivan
+
+ * FS/bin/freeside-bill: accept anything in ARGV for -d Date::Parse
+
2000-03-06 08:38 ivan
* FS/FS/svc_acct.pm: better error message. bah.
+2000-03-06 08:00 ivan
+
+ * bin/svc_acct.export: sync up with working versoin
+
+2000-03-06 07:59 ivan
+
+ * bin/svc_acct.export: finally get MySQL locking working for
+ ICRADIUS export
+
+2000-03-06 07:15 ivan
+
+ * FS/FS/SSH.pm: backout silly change
+
+2000-03-06 07:04 ivan
+
+ * FS/FS/SSH.pm: bug in IPC::Open3 documentation?
+
+2000-03-06 06:59 ivan
+
+ * bin/svc_acct.export: s/sshopen2/sshopen3/ to prevent spurious
+ mysql "Enter password: " dialog from showing up in cron/terminal
+
+2000-03-06 06:51 ivan
+
+ * bin/svc_acct.export: eek
+
+2000-03-06 06:50 ivan
+
+ * bin/svc_acct.export: oop
+
+2000-03-06 06:48 ivan
+
+ * bin/svc_acct.export: s/icradiusmachine/machine/
+
+2000-03-06 06:46 ivan
+
+ * bin/svc_acct.export: not setuid or run by malicious user - no -T
+ necessary
+
+2000-03-06 06:19 ivan
+
+ * bin/svc_acct.export: ICRADIUS export bugfix
+
+2000-03-06 06:12 ivan
+
+ * TODO, bin/svc_acct.export: ICRADIUS export support
+
2000-03-03 10:45 ivan
* FS/FS/CGI.pm: use Apache::exit instead of exit in &eidiot -
@@ -31291,6 +34289,10 @@
* FS/FS/Record.pm: changes backported from 1.2.3 release, bugfix
from web demo
+2000-03-01 23:44 ivan
+
+ * bin/fs-setup: typo forgot closing '
+
2000-03-01 00:13 ivan
* FS/: MANIFEST, FS/svc_domain.pm, FS/svc_www.pm: compilation
@@ -31299,8 +34301,9 @@
2000-02-02 21:16 ivan
* FS/FS/cust_pkg.pm, FS/FS/domain_record.pm, FS/FS/svc_domain.pm,
- FS/FS/svc_www.pm, bin/svc_acct.import: beginning of DNS and
- Apache support
+ FS/FS/svc_www.pm, bin/fs-setup, bin/svc_acct.import,
+ bin/svc_acct_sm.import, bin/svc_domain.import: beginning of DNS
+ and Apache support
2000-02-02 12:22 ivan
@@ -31309,28 +34312,53 @@
2000-01-30 21:22 ivan
- * FS/FS/: cust_main.pm, prepay_credit.pm: prepaid "internet cards"
+ * FS/FS/cust_main.pm, FS/FS/prepay_credit.pm, bin/fs-setup: prepaid
+ "internet cards"
2000-01-30 00:18 ivan
* CREDITS: [no log message]
+2000-01-29 22:11 ivan
+
+ * TODO: [no log message]
+
+2000-01-29 22:03 ivan
+
+ * bin/fs-setup: postgres 6.5 finally supports decimal(10,2)
+
2000-01-29 13:10 ivan
* FS/FS/svc_domain.pm: doc update
2000-01-28 14:53 ivan
- * FS/FS/svc_acct_pop.pm: track full phone number
+ * bin/fs-setup, FS/FS/svc_acct_pop.pm: track full phone number
2000-01-26 16:37 ivan
* README: ack
+2000-01-26 16:27 ivan
+
+ * TODO: update TODO
+
1999-11-08 13:38 ivan
* FS/FS/cust_pkg.pm: remove services using pkg_svc table now, oops!
+1999-10-04 01:23 ivan
+
+ * FS/bin/freeside-bill: silly 'use of unitialized value' errors
+
+1999-09-22 15:06 ivan
+
+ * TODO: ya todo update
+
+1999-08-26 23:25 ivan
+
+ * TODO: [no log message]
+
1999-08-23 05:26 ivan
* test/cgi-test: need to untaint the command line
@@ -31352,14 +34380,28 @@
* FS/FS/svc_acct.pm: configurable min/max username length, min
password length, periods in usernames
+1999-08-11 13:51 ivan
+
+ * FS/bin/freeside-bill: [no log message]
+
1999-08-11 13:41 ivan
- * FS/: MANIFEST, Makefile.PL, FS/svc_domain.pm: new bill script,
+ * FS/MANIFEST, FS/Makefile.PL, FS/FS/svc_domain.pm,
+ FS/bin/freeside-bill, bin/bill: new bill script,
+
+1999-08-11 07:42 ivan
+
+ * bin/backup-freeside: [no log message]
1999-08-11 06:12 ivan
* FS/FS/svc_domain.pm: require a working Net::Whois version
+1999-08-10 05:06 ivan
+
+ * fs_passwd/fs_passwdd: even though you should probably set this
+ for your installation
+
1999-08-04 05:42 ivan
* bin/pod2x: new, kludgy-but-working html generator
@@ -31379,16 +34421,20 @@
1999-08-04 02:03 ivan
- * FS/: MANIFEST, MANIFEST.SKIP, FS/CGI.pm, FS/Conf.pm,
- FS/Record.pm, FS/UID.pm, FS/agent.pm, FS/agent_type.pm,
- FS/cust_bill.pm, FS/cust_bill_pkg.pm, FS/cust_credit.pm,
- FS/cust_main.pm, FS/cust_main_county.pm, FS/cust_main_invoice.pm,
- FS/cust_pay.pm, FS/cust_pay_batch.pm, FS/cust_pkg.pm,
- FS/cust_refund.pm, FS/cust_svc.pm, FS/part_pkg.pm,
- FS/part_referral.pm, FS/part_svc.pm, FS/pkg_svc.pm,
- FS/svc_Common.pm, FS/svc_acct.pm, FS/svc_acct_pop.pm,
- FS/svc_domain.pm, FS/type_pkgs.pm: initial checkin of module
- files for proper perl installation
+ * FS/: MANIFEST, MANIFEST.SKIP, README, FS/Bill.pm, FS/CGI.pm,
+ FS/Conf.pm, FS/Invoice.pm, FS/Record.pm, FS/SSH.pm, FS/UID.pm,
+ FS/agent.pm, FS/agent_type.pm, FS/cust_bill.pm,
+ FS/cust_bill_pkg.pm, FS/cust_credit.pm, FS/cust_main.pm,
+ FS/cust_main_county.pm, FS/cust_main_invoice.pm, FS/cust_pay.pm,
+ FS/cust_pay_batch.pm, FS/cust_pkg.pm, FS/cust_refund.pm,
+ FS/cust_svc.pm, FS/dbdef.pm, FS/dbdef_colgroup.pm,
+ FS/dbdef_column.pm, FS/dbdef_index.pm, FS/dbdef_table.pm,
+ FS/dbdef_unique.pm, FS/part_pkg.pm, FS/part_referral.pm,
+ FS/part_svc.pm, FS/pkg_svc.pm, FS/svc_Common.pm, FS/svc_acct.pm,
+ FS/svc_acct_pop.pm, FS/svc_acct_sm.pm, FS/svc_domain.pm,
+ FS/type_pkgs.pm, FS/UI/Base.pm, FS/UI/CGI.pm, FS/UI/Gtk.pm,
+ FS/UI/agent.pm: initial checkin of module files for proper perl
+ installation
1999-08-04 01:03 ivan
@@ -31401,11 +34447,31 @@
1999-08-03 21:15 ivan
- * FS/: Changes, FS.pm, MANIFEST, Makefile.PL: initial h2xs
+ * FS/: Changes, FS.pm, MANIFEST, Makefile.PL, test.pl: initial h2xs
+
+1999-08-03 00:43 ivan
+
+ * TODO: use Net::Whois;
+
+1999-07-29 12:13 ivan
+
+ * TODO: [no log message]
+
+1999-07-29 01:50 ivan
+
+ * bin/fs-setup: wrong type for cust_pay_batch.exp
+
+1999-07-15 17:20 ivan
+
+ * TODO: [no log message]
+
+1999-07-15 16:50 ivan
+
+ * TODO: [no log message]
1999-07-08 04:40 ivan
- * CREDITS, README: [no log message]
+ * CREDITS, README, TODO: [no log message]
1999-07-07 19:32 ivan
@@ -31421,13 +34487,47 @@
* bin/svc_acct.import: updates to avoid -w warnings from Joel
Griffiths <griff@aver-computer.com>
+1999-07-07 18:02 ivan
+
+ * TODO: [no log message]
+
+1999-04-29 02:37 ivan
+
+ * TODO: [no log message]
+
1999-04-19 03:32 ivan
* etc/megapop.pl: if you are a megapop customer...
+1999-04-15 15:46 ivan
+
+ * bin/fs-setup: TT isn't a state!
+
+1999-04-14 06:14 ivan
+
+ * TODO: configuration option to edit referrals of existing
+ customers
+
+1999-04-14 04:27 ivan
+
+ * TODO: showpasswords config option to show passwords
+
+1999-04-14 01:58 ivan
+
+ * TODO: [no log message]
+
+1999-04-14 00:58 ivan
+
+ * bin/fs-setup: export getsecrets from FS::UID instead of calling
+ it explicitly
+
+1999-04-08 20:52 ivan
+
+ * TODO: [no log message]
+
1999-04-08 06:21 ivan
- * CREDITS: [no log message]
+ * CREDITS, conf/address: [no log message]
1999-04-08 06:11 ivan
@@ -31437,33 +34537,88 @@
* test/cgi-test: web interface tester / sample data creator
+1999-04-08 06:03 ivan
+
+ * TODO: [no log message]
+
1999-03-26 05:15 ivan
* eg/TEMPLATE_cust_main.import: s/create/new/, use all necessary
FS::table_names to avoid warnings
+1999-03-26 05:00 ivan
+
+ * fs_passwd/fs_passwd_server: s/create/new/
+
1999-03-25 00:42 ivan
- * bin/svc_acct.import: import stuff uses Term::Query and spits out
- (some kinds of) nonsensical input
+ * bin/: svc_acct.import, svc_acct_sm.import: import stuff uses
+ Term::Query and spits out (some kinds of) nonsensical input
+
+1999-03-23 16:51 ivan
+
+ * bin/svc_acct_sm.import: die if no relevant services... cvspain
1999-03-23 16:43 ivan
* bin/svc_acct.import: die if no relevant services
+1999-02-28 11:44 ivan
+
+ * bin/fs-setup: constructors s/create/new/ pointed out by "Bao C.
+ Ha" <bao@hacom.net>
+
+1999-02-27 13:06 ivan
+
+ * bin/fs-setup: cust_main.paydate should be varchar(10), not
+ @date_type ; problem reported by Ben Leibig <leibig@colorado.edu>
+
+1999-02-23 00:09 ivan
+
+ * TODO: beginnings of one-screen new customer entry and some other
+ miscellania
+
1999-02-10 01:02 ivan
* etc/sql-reserved-words.txt: some new doc files
+1999-02-10 00:27 ivan
+
+ * TODO: [no log message]
+
+1999-02-09 01:56 ivan
+
+ * TODO: [no log message]
+
1999-02-07 01:59 ivan
- * CREDITS: more mod_perl fixes, and bugfixes Peter Wemm sent via
- email
+ * CREDITS, TODO, bin/fs-setup: more mod_perl fixes, and bugfixes
+ Peter Wemm sent via email
1999-02-06 14:43 ivan
- * CREDITS: don't use [e]idiot; display error messages on the form
- page
+ * CREDITS, TODO: don't use [e]idiot; display error messages on the
+ form page
+
+1999-02-03 22:09 ivan
+
+ * bin/fs-setup: add AU provences
+
+1999-02-03 02:42 ivan
+
+ * bin/fs-setup: [no log message]
+
+1999-01-25 04:09 ivan
+
+ * TODO: yet more mod_perl stuff
+
+1999-01-18 15:05 ivan
+
+ * TODO: update TODO for stuff that was done etc.
+
+1999-01-16 19:11 ivan
+
+ * bin/fs-setup: remove preliminary completehost changes
1999-01-15 16:24 ivan
@@ -31473,21 +34628,77 @@
* CREDITS: [no log message]
+1998-12-30 15:03 ivan
+
+ * TODO: bugfixes; fields isn't exported by derived classes
+
+1998-12-29 03:59 ivan
+
+ * TODO: mostly properly OO, some work still to be done with svc_
+ stuff
+
+1998-12-15 22:05 ivan
+
+ * bin/fs-setup: add table cust_main_invoice
+
+1998-12-15 21:38 ivan
+
+ * TODO: [no log message]
+
+1998-12-15 21:32 ivan
+
+ * fs_passwd/fs_passwd_server: adminsuidsetup now requires user
+
1998-12-15 21:29 ivan
* eg/TEMPLATE_cust_main.import: adminsuidsetup now need user
+1998-12-14 20:36 ivan
+
+ * bin/fs-setup: s/croak/die/; #oops
+
+1998-12-14 20:33 ivan
+
+ * bin/fs-setup: dies if it isn't running as the freeside user
+
1998-12-09 23:23 ivan
- * bin/svc_acct.import: use FS::Conf, need user (for datasrc)
+ * bin/: svc_acct.export, svc_acct.import, svc_acct_sm.export,
+ svc_acct_sm.import: use FS::Conf, need user (for datasrc)
1998-12-01 17:23 ivan
- * CREDITS: [no log message]
+ * TODO, CREDITS: [no log message]
+
+1998-11-19 03:17 ivan
+
+ * bin/dbdef-create: adminsuidsetup requires argument
1998-11-18 01:01 ivan
- * CREDITS: i18n! i18n!
+ * CREDITS, TODO, bin/fs-setup: i18n! i18n!
+
+1998-11-15 05:18 ivan
+
+ * bin/fs-setup: remove debugging
+
+1998-11-15 01:43 ivan
+
+ * bin/fs-setup: update for new config file syntax, new
+ adminsuidsetup
+
+1998-11-14 18:53 ivan
+
+ * bin/bill: afterthought
+
+1998-11-14 18:51 ivan
+
+ * bin/bill: adminsuidsetup needs user, pod, cleanup
+
+1998-11-13 01:56 ivan
+
+ * TODO: change configuration file layout to support multiple
+ distinct databases (with own set of config files, export, etc.)
1998-11-07 17:09 ivan
@@ -31498,14 +34709,77 @@
* README: don't use depriciated FS::Bill and FS::Invoice, other
miscellania
+1998-11-07 00:25 ivan
+
+ * TODO: [no log message]
+
+1998-11-07 00:21 ivan
+
+ * bin/bill: missing use
+
+1998-11-07 00:19 ivan
+
+ * bin/bill:
+ still need to bless into FS::cust_main (for now)
+
+1998-11-07 00:08 ivan
+
+ * bin/bill:
+ Removed depriciated FS::Bill (now in FS::cust_main)
+
+1998-10-22 08:51 ivan
+
+ * bin/fs-setup: also varchar with no length specified - postgresql
+ fix broke mysql.
+
+1998-10-22 08:46 ivan
+
+ * bin/fs-setup: now smallint is illegal, so remove that too.
+
1998-10-14 00:05 ivan
- * README: 1.1.4 release, fix postgresql
+ * README, bin/fs-setup: 1.1.4 release, fix postgresql
+
+1998-10-13 05:49 ivan
+
+ * TODO: [no log message]
1998-10-13 05:07 ivan
- * bin/svc_acct.import: Assigns password from the shadow file for
- RADIUS password "UNIX"
+ * TODO, bin/svc_acct.import: Assigns password from the shadow file
+ for RADIUS password "UNIX"
+
+1998-10-13 02:17 ivan
+
+ * TODO: [no log message]
+
+1998-10-12 14:22 ivan
+
+ * TODO: [no log message]
+
+1998-10-12 14:15 ivan
+
+ * TODO: [no log message]
+
+1998-10-12 02:12 ivan
+
+ * TODO: remove adding cvs from the todo
+
+1998-10-12 02:09 ivan
+
+ * TODO: [no log message]
+
+1998-10-12 02:09 ivan
+
+ * TODO: Id to Header
+
+1998-10-12 02:07 ivan
+
+ * TODO: Test keyword substitution
+
+1998-10-12 01:59 ivan
+
+ * TODO: Commiting sample change.
1998-10-12 00:15 ivan
@@ -31513,11 +34787,16 @@
1998-10-12 00:12 ivan
- * conf/: home, lpr: Initial import into CVS
+ * conf/: address, home, lpr, secrets, smtpmachine, domain: Initial
+ revision
-1998-10-12 00:12 ivan
+1998-10-12 00:08 ivan
+
+ * TODO: Initial revision
- * conf/smtpmachine: Initial revision
+1998-10-12 00:03 ivan
+
+ * bin/fs-setup: Initial revision
1998-10-11 23:56 ivan
@@ -31527,14 +34806,26 @@
* bin/pod2x: Initial revision
+1998-09-17 22:43 ivan
+
+ * bin/svc_acct.export: Initial revision
+
1998-09-02 21:50 ivan
* CREDITS: Initial revision
+1998-08-23 20:12 ivan
+
+ * fs_passwd/fs_passwd_server: Initial revision
+
1998-08-23 20:04 ivan
* fs_passwd/fs_passwd: Initial revision
+1998-08-23 19:01 ivan
+
+ * bin/bill: Initial revision
+
1998-08-19 21:42 ivan
* eg/TEMPLATE_cust_main.import: Initial revision
@@ -31543,15 +34834,32 @@
* bin/svc_acct.import: Initial revision
+1998-08-14 15:11 ivan
+
+ * bin/svc_acct_sm.export: Initial revision
+
+1998-08-12 20:55 ivan
+
+ * Artistic: Initial revision
+
1998-07-18 00:11 ivan
- * etc/domain-template.txt: Initial import into CVS
+ * etc/domain-template.txt: Initial revision
-1998-03-22 23:46 ivan
+1998-07-17 00:43 ivan
+
+ * bin/svc_acct_sm.import: Initial revision
+
+1998-06-03 00:22 ivan
+
+ * bin/dbdef-create: Initial revision
+
+1998-03-23 00:20 ivan
- * etc/countries.txt: Initial import into CVS
+ * fs_passwd/fs_passwdd: Initial revision
1998-03-22 23:46 ivan
- * INSTALL: Initial revision
+ * GPL, INSTALL, etc/acp_logfile-parse, etc/countries.txt,
+ etc/example-direct-cardin: Initial revision
diff --git a/FS/FS.pm b/FS/FS.pm
index 4bc550435..7024d603f 100644
--- a/FS/FS.pm
+++ b/FS/FS.pm
@@ -126,6 +126,12 @@ L<FS::registrar> - Domain registrar class
L<FS::svc_forward> - Mail forwarding class
+L<FS::svc_mailinglist> - (Customer) Mailing list class
+
+L<FS::mailinglist> - Mailing list class
+
+L<FS::mailinglistmember> - Mailing list member class
+
L<FS::svc_www> - Web virtual host class.
L<FS::svc_broadband> - DSL, wireless and other broadband class.
@@ -346,8 +352,12 @@ L<FS::h_svc_external> - Historical externally tracked service objects
L<FS::h_svc_forward> - Historical mail forwarding alias objects
+L<FS::h_svc_mailinglist> - Historical mailing list objects
+
L<FS::h_svc_phone> - Historical phone number objects
+L<FS::h_svc_pbx> - Historical PBX objects
+
L<FS::h_svc_www> - Historical web virtual host objects
=head2 Remote API modules
diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm
index 46e740cc1..03b98763a 100644
--- a/FS/FS/AccessRight.pm
+++ b/FS/FS/AccessRight.pm
@@ -94,6 +94,7 @@ tie my %rights, 'Tie::IxHash',
'View customer',
#'View Customer | View tickets',
'Edit customer',
+ 'Edit referring customer',
'View customer history',
'Cancel customer',
'Complimentary customer', #aka users-allow_comp
diff --git a/FS/FS/ClientAPI/MyAccount.pm b/FS/FS/ClientAPI/MyAccount.pm
index dbc355205..50dc89c73 100644
--- a/FS/FS/ClientAPI/MyAccount.pm
+++ b/FS/FS/ClientAPI/MyAccount.pm
@@ -1,5 +1,6 @@
package FS::ClientAPI::MyAccount;
+use 5.008; #require 5.8+ for Time::Local 1.05+
use strict;
use vars qw( $cache $DEBUG $me );
use subs qw( _cache _provision );
@@ -8,6 +9,7 @@ use Digest::MD5 qw(md5_hex);
use Date::Format;
use Business::CreditCard;
use Time::Duration;
+use Time::Local qw(timelocal_nocheck);
use FS::UI::Web::small_custview qw(small_custview); #less doh
use FS::UI::Web;
use FS::UI::bytecount qw( display_bytecount );
@@ -29,18 +31,11 @@ use FS::cust_pkg;
use FS::payby;
use FS::acct_rt_transaction;
use HTML::Entities;
+use FS::TicketSystem;
-$DEBUG = 2;
+$DEBUG = 0;
$me = '[FS::ClientAPI::MyAccount]';
-#false laziness with FS::cust_main
-BEGIN {
- eval "use Time::Local;";
- die "Time::Local minimum version 1.05 required with Perl versions before 5.6"
- if $] < 5.006 && !defined($Time::Local::VERSION);
- eval "use Time::Local qw(timelocal_nocheck);";
-}
-
use vars qw( @cust_main_editable_fields );
@cust_main_editable_fields = qw(
first last company address1 address2 city
@@ -100,7 +95,20 @@ sub skin_info {
( map { $_ => scalar( $conf->config($_, $agentnum) ) }
qw( company_name ) ),
( map { $_ => scalar( $conf->config("selfservice-$_", $agentnum ) ) }
- qw( body_bgcolor box_bgcolor) ),
+ qw( body_bgcolor box_bgcolor
+ text_color link_color vlink_color hlink_color alink_color
+ font title_color title_align title_size menu_bgcolor menu_fontsize
+ )
+ ),
+ ( map { $_ => $conf->exists("selfservice-$_", $agentnum ) }
+ qw( menu_skipblanks menu_skipheadings menu_nounderline )
+ ),
+ ( map { $_ => scalar($conf->config_binary("selfservice-$_", $agentnum)) }
+ qw( title_left_image title_right_image
+ menu_top_image menu_body_image menu_bottom_image
+ )
+ ),
+ 'logo' => scalar($conf->config_binary('logo.png', $agentnum )),
( map { $_ => join("\n", $conf->config("selfservice-$_", $agentnum ) ) }
qw( head body_header body_footer company_address ) ),
};
@@ -489,6 +497,8 @@ sub payment_info {
'show_ss' => $conf->exists('show_ss'),
'show_stateid' => $conf->exists('show_stateid'),
'show_paystate' => $conf->exists('show_bankstate'),
+
+ 'save_unchecked' => $conf->exists('selfservice-save_unchecked'),
};
}
@@ -571,6 +581,11 @@ sub process_payment {
my $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
or return { 'error' => "unknown custnum $custnum" };
+ $p->{'amount'} =~ /^\s*(\d+(\.\d{2})?)\s*$/
+ or return { 'error' => gettext('illegal_amount') };
+ my $amount = $1;
+ return { error => 'Amount must be greater than 0' } unless $amount > 0;
+
$p->{'payname'} =~ /^([\w \,\.\-\']+)$/
or return { 'error' => gettext('illegal_name'). " payname: ". $p->{'payname'} };
my $payname = $1;
@@ -641,7 +656,7 @@ sub process_payment {
'CHEK' => [ qw( ss paytype paystate stateid stateid_state payip ) ],
);
- my $error = $cust_main->realtime_bop( $FS::payby::payby2bop{$payby}, $p->{'amount'},
+ my $error = $cust_main->realtime_bop( $FS::payby::payby2bop{$payby}, $amount,
'quiet' => 1,
'payinfo' => $payinfo,
'paydate' => $p->{'year'}. '-'. $p->{'month'}. '-01',
@@ -671,8 +686,21 @@ sub process_payment {
$new->set( 'payinfo' => $payinfo );
$new->set( 'paydate' => $p->{'year'}. '-'. $p->{'month'}. '-01' );
my $error = $new->replace($cust_main);
- return { 'error' => $error } if $error;
- $cust_main = $new;
+ if ( $error ) {
+ #no, this causes customers to process their payments again
+ #return { 'error' => $error };
+ #XXX just warn verosely for now so i can figure out how these happen in
+ # the first place, eventually should redirect them to the "change
+ #address" page but indicate the payment did process??
+ delete($p->{'payinfo'}); #don't want to log this!
+ warn "WARNING: error changing customer info when processing payment (not returning to customer as a processing error): $error\n".
+ "NEW: ". Dumper($new)."\n".
+ "OLD: ". Dumper($cust_main)."\n".
+ "PACKET: ". Dumper($p)."\n";
+ #} else {
+ #not needed...
+ #$cust_main = $new;
+ }
}
return { 'error' => '' };
@@ -1636,6 +1664,43 @@ sub myaccount_passwd {
}
+sub create_ticket {
+ my $p = shift;
+ my($context, $session, $custnum) = _custoragent_session_custnum($p);
+ return { 'error' => $session } if $context eq 'error';
+
+ warn "$me create_ticket: initializing ticket system\n" if $DEBUG;
+ FS::TicketSystem->init();
+
+ my $conf = new FS::Conf;
+ my $queue = $p->{'queue'}
+ || $conf->config('ticket_system-selfservice_queueid')
+ || $conf->config('ticket_system-default_queueid');
+
+ warn "$me create_ticket: creating ticket\n" if $DEBUG;
+ my $err_or_ticket = FS::TicketSystem->create_ticket(
+ '', #create RT session based on FS CurrentUser (fs_selfservice)
+ 'queue' => $queue,
+ 'custnum' => $custnum,
+ 'svcnum' => $session->{'svcnum'},
+ map { $_ => $p->{$_} } qw( requestor cc subject message mime_type )
+ );
+
+ if ( ref($err_or_ticket) ) {
+ warn "$me create_ticket: sucessful: ". $err_or_ticket->id. "\n"
+ if $DEBUG;
+ return { 'error' => '',
+ 'ticket_id' => $err_or_ticket->id,
+ };
+ } else {
+ warn "$me create_ticket: unsucessful: $err_or_ticket\n"
+ if $DEBUG;
+ return { 'error' => $err_or_ticket };
+ }
+
+
+}
+
#--
sub _custoragent_session_custnum {
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index f2960cd77..45d11c45c 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -564,6 +564,14 @@ worry that config_items is freeside-specific and icky.
logo.eps
);
+#Billing (81 items)
+#Invoicing (50 items)
+#UI (69 items)
+#Self-service (29 items)
+#...
+#Unclassified (77 items)
+
+
@config_items = map { new FS::ConfItem $_ } (
{
@@ -721,6 +729,7 @@ worry that config_items is freeside-specific and icky.
'type' => 'select',
'select_hash' => [
'%m/%d/%Y' => 'MM/DD/YYYY',
+ '%d/%m/%Y' => 'DD/MM/YYYY',
'%Y/%m/%d' => 'YYYY/MM/DD',
],
},
@@ -814,35 +823,35 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'emailinvoiceonly',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Disables postal mail invoices',
'type' => 'checkbox',
},
{
'key' => 'disablepostalinvoicedefault',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Disables postal mail invoices as the default option in the UI. Be careful not to setup customers which are not sent invoices. See <a href ="#emailinvoiceauto">emailinvoiceauto</a>.',
'type' => 'checkbox',
},
{
'key' => 'emailinvoiceauto',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Automatically adds new accounts to the email invoice list',
'type' => 'checkbox',
},
{
'key' => 'emailinvoiceautoalways',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Automatically adds new accounts to the email invoice list even when the list contains email addresses',
'type' => 'checkbox',
},
{
'key' => 'emailinvoice-apostrophe',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Allows the apostrophe (single quote) character in the email addresses in the email invoice list.',
'type' => 'checkbox',
},
@@ -892,7 +901,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_subject',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Subject: header on email invoices. Defaults to "Invoice". The following substitutions are available: $name, $name_short, $invoice_number, and $invoice_date.',
'type' => 'text',
'per_agent' => 1,
@@ -900,21 +909,21 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_usesummary',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Indicates that html and latex invoices should be in summary style and make use of invoice_latexsummary.',
'type' => 'checkbox',
},
{
'key' => 'invoice_template',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Text template file for invoices. Used if no invoice_html template is defined, and also seen by users using non-HTML capable mail clients. See the <a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.7:Documentation:Administration#Plaintext_invoice_templates">billing documentation</a> for details.',
'type' => 'textarea',
},
{
'key' => 'invoice_html',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Optional HTML template for invoices. See the <a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.7:Documentation:Administration#HTML_invoice_templates">billing documentation</a> for details.',
'type' => 'textarea',
@@ -922,7 +931,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_htmlnotes',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Notes section for HTML invoices. Defaults to the same data in invoice_latexnotes if not specified.',
'type' => 'textarea',
'per_agent' => 1,
@@ -930,7 +939,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_htmlfooter',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Footer for HTML invoices. Defaults to the same data in invoice_latexfooter if not specified.',
'type' => 'textarea',
'per_agent' => 1,
@@ -938,7 +947,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_htmlsummary',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Summary initial page for HTML invoices.',
'type' => 'textarea',
'per_agent' => 1,
@@ -946,21 +955,21 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_htmlreturnaddress',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Return address for HTML invoices. Defaults to the same data in invoice_latexreturnaddress if not specified.',
'type' => 'textarea',
},
{
'key' => 'invoice_latex',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Optional LaTeX template for typeset PostScript invoices. See the <a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.7:Documentation:Administration#Typeset_.28LaTeX.29_invoice_templates">billing documentation</a> for details.',
'type' => 'textarea',
},
{
'key' => 'invoice_latexnotes',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Notes section for LaTeX typeset PostScript invoices.',
'type' => 'textarea',
'per_agent' => 1,
@@ -968,7 +977,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_latexfooter',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Footer for LaTeX typeset PostScript invoices.',
'type' => 'textarea',
'per_agent' => 1,
@@ -976,7 +985,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_latexsummary',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Summary initial page for LaTeX typeset PostScript invoices.',
'type' => 'textarea',
'per_agent' => 1,
@@ -984,7 +993,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_latexcoupon',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Remittance coupon for LaTeX typeset PostScript invoices.',
'type' => 'textarea',
'per_agent' => 1,
@@ -992,14 +1001,14 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_latexreturnaddress',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Return address for LaTeX typeset PostScript invoices.',
'type' => 'textarea',
},
{
'key' => 'invoice_latexsmallfooter',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Optional small footer for multi-page LaTeX typeset PostScript invoices.',
'type' => 'textarea',
'per_agent' => 1,
@@ -1007,14 +1016,14 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_email_pdf',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Send PDF invoice as an attachment to emailed invoices. By default, includes the plain text invoice as the email body, unless invoice_email_pdf_note is set.',
'type' => 'checkbox'
},
{
'key' => 'invoice_email_pdf_note',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'If defined, this text will replace the default plain text invoice as the body of emailed PDF invoices.',
'type' => 'textarea'
},
@@ -1022,7 +1031,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_default_terms',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Optional default invoice term, used to calculate a due date printed on invoices.',
'type' => 'select',
'select_enum' => [ '', 'Payable upon receipt', 'Net 0', 'Net 10', 'Net 15', 'Net 20', 'Net 30', 'Net 45', 'Net 60' ],
@@ -1030,35 +1039,35 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_show_prior_due_date',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Show previous invoice due dates when showing prior balances. Default is to show invoice date.',
'type' => 'checkbox',
},
{
'key' => 'invoice_include_aging',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Show an aging line after the prior balance section. Only valud when invoice_sections is enabled.',
'type' => 'checkbox',
},
{
'key' => 'invoice_sections',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Split invoice into sections and label according to package category when enabled.',
'type' => 'checkbox',
},
{
'key' => 'usage_class_as_a_section',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Split usage into sections and label according to usage class name when enabled. Only valid when invoice_sections is enabled.',
'type' => 'checkbox',
},
{
'key' => 'svc_phone_sections',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Create a section for each svc_phone when enabled. Only valid when invoice_sections is enabled.',
'type' => 'checkbox',
},
@@ -1072,7 +1081,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'separate_usage',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Split the rated call usage into a separate line from the recurring charges.',
'type' => 'checkbox',
},
@@ -1103,6 +1112,13 @@ worry that config_items is freeside-specific and icky.
},
{
+ 'key' => 'trigger_export_insert_on_payment',
+ 'section' => 'billing',
+ 'description' => 'Enable exports on payment application.',
+ 'type' => 'checkbox',
+ },
+
+ {
'key' => 'lpr',
'section' => 'required',
'description' => 'Print command for paper invoices, for example `lpr -h\'',
@@ -1257,6 +1273,32 @@ worry that config_items is freeside-specific and icky.
},
{
+ 'key' => 'smtp-username',
+ 'section' => '',
+ 'description' => 'Optional SMTP username for Freeside\'s outgoing mail',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'smtp-password',
+ 'section' => '',
+ 'description' => 'Optional SMTP password for Freeside\'s outgoing mail',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'smtp-encryption',
+ 'section' => '',
+ 'description' => 'Optional SMTP encryption method. The STARTTLS methods require smtp-username and smtp-password to be set.',
+ 'type' => 'select',
+ 'select_hash' => [ '25' => 'None (port 25)',
+ '25-starttls' => 'STARTTLS (port 25)',
+ '587-starttls' => 'STARTTLS / submission (port 587)',
+ '465-tls' => 'SMTPS (SSL) (port 465)',
+ ],
+ },
+
+ {
'key' => 'soadefaultttl',
'section' => 'BIND',
'description' => 'SOA default TTL for new domains.',
@@ -1470,15 +1512,22 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'signup_server-payby',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Acceptable payment types for the signup server',
'type' => 'selectmultiple',
'select_enum' => [ qw(CARD DCRD CHEK DCHK LECB PREPAY BILL COMP) ],
},
{
+ 'key' => 'selfservice-save_unchecked',
+ 'section' => 'self-service',
+ 'description' => 'In self-service, uncheck "Remember information" checkboxes by default (normally, they are checked by default).',
+ 'type' => 'checkbox',
+ },
+
+ {
'key' => 'signup_server-default_agentnum',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Default agent for the signup server',
'type' => 'select-sub',
'options_sub' => sub { require FS::Record;
@@ -1497,7 +1546,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'signup_server-default_refnum',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Default advertising source for the signup server',
'type' => 'select-sub',
'options_sub' => sub { require FS::Record;
@@ -1517,21 +1566,21 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'signup_server-default_pkgpart',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Default package for the signup server',
'type' => 'select-part_pkg',
},
{
'key' => 'signup_server-default_svcpart',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Default service definition for the signup server - only necessary for services that trigger special provisioning widgets (such as DID provisioning).',
'type' => 'select-part_svc',
},
{
'key' => 'signup_server-mac_addr_svcparts',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Service definitions which can receive mac addresses (current mapped to username for svc_acct).',
'type' => 'select-part_svc',
'multiple' => 1,
@@ -1539,14 +1588,14 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'signup_server-nomadix',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Signup page Nomadix integration',
'type' => 'checkbox',
},
{
'key' => 'signup_server-service',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Service for the signup server - "Account (svc_acct)" is the default setting, or "Phone number (svc_phone)" for ITSP signup',
'type' => 'select',
'select_hash' => [
@@ -1557,7 +1606,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'selfservice_server-base_url',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Base URL for the self-service web interface - necessary for some widgets to find their way, including retrieval of non-US state information and phone number provisioning.',
'type' => 'text',
},
@@ -1571,27 +1620,27 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'signup_server-realtime',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Run billing for signup server signups immediately, and do not provision accounts which subsequently have a balance.',
'type' => 'checkbox',
},
{
'key' => 'signup_server-classnum2',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Package Class for first optional purchase',
'type' => 'select-pkg_class',
},
{
'key' => 'signup_server-classnum3',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Package Class for second optional purchase',
'type' => 'select-pkg_class',
},
{
'key' => 'backend-realtime',
- 'section' => '',
+ 'section' => 'billing',
'description' => 'Run billing for backend signups immediately.',
'type' => 'checkbox',
},
@@ -1788,7 +1837,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'svc_acct-notes',
- 'section' => 'UI',
+ 'section' => 'deprecated',
'description' => 'Extra HTML to be displayed on the Account View screen.',
'type' => 'textarea',
},
@@ -1798,7 +1847,7 @@ worry that config_items is freeside-specific and icky.
'section' => '',
'description' => 'RADIUS attribute for plain-text passwords.',
'type' => 'select',
- 'select_enum' => [ 'Password', 'User-Password' ],
+ 'select_enum' => [ 'Password', 'User-Password', 'Cleartext-Password' ],
},
{
@@ -1926,7 +1975,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'cust_pkg-change_pkgpart-bill_now',
'section' => '',
- 'description' => "When changing packages, bill the new package immediately. Useful for prepaid situations with RADIUS where an Expiration attribute base don the package must be present at all times.",
+ 'description' => "When changing packages, bill the new package immediately. Useful for prepaid situations with RADIUS where an Expiration attribute based on the package must be present at all times.",
'type' => 'checkbox',
},
@@ -1954,21 +2003,21 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'selfservice_server-primary_only',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Only allow primary accounts to access self-service functionality.',
'type' => 'checkbox',
},
{
'key' => 'selfservice_server-phone_login',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Allow login to self-service with phone number and PIN.',
'type' => 'checkbox',
},
{
'key' => 'selfservice_server-single_domain',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'If specified, only use this one domain for self-service access.',
'type' => 'text',
},
@@ -2055,6 +2104,34 @@ worry that config_items is freeside-specific and icky.
},
{
+ 'key' => 'ticket_system-selfservice_queueid',
+ 'section' => '',
+ 'description' => 'Queue used when creating new customer tickets from self-service. Defautls to ticket_system-default_queueid if not specified.',
+ #false laziness w/above
+ 'type' => 'select-sub',
+ 'options_sub' => sub {
+ my $conf = new FS::Conf;
+ if ( $conf->config('ticket_system') ) {
+ eval "use FS::TicketSystem;";
+ die $@ if $@;
+ FS::TicketSystem->queues();
+ } else {
+ ();
+ }
+ },
+ 'option_sub' => sub {
+ my $conf = new FS::Conf;
+ if ( $conf->config('ticket_system') ) {
+ eval "use FS::TicketSystem;";
+ die $@ if $@;
+ FS::TicketSystem->queue(shift);
+ } else {
+ '';
+ }
+ },
+ },
+
+ {
'key' => 'ticket_system-priority_reverse',
'section' => '',
'description' => 'Enable this to consider lower numbered priorities more important. A bad habit we picked up somewhere. You probably want to avoid it and use the default.',
@@ -2169,7 +2246,7 @@ worry that config_items is freeside-specific and icky.
},
{ 'key' => 'selfservice_server-cache_module',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Module used to store self-service session information. All modules handle any number of self-service servers. Cache::SharedMemoryCache is appropriate for a single database / single Freeside server. Cache::FileCache is useful for multiple databases on a single server, or when IPC::ShareLite is not available (i.e. FreeBSD).', # _Database stores session information in the database and is appropriate for multiple Freeside servers, but may be slower.',
'type' => 'select',
'select_enum' => [ 'Cache::SharedMemoryCache', 'Cache::FileCache', ], # '_Database' ],
@@ -2184,7 +2261,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'cust_bill-ftpformat',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Enable FTP of raw invoice data - format.',
'type' => 'select',
'select_enum' => [ '', 'default', 'billco', ],
@@ -2192,35 +2269,35 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'cust_bill-ftpserver',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Enable FTP of raw invoice data - server.',
'type' => 'text',
},
{
'key' => 'cust_bill-ftpusername',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Enable FTP of raw invoice data - server.',
'type' => 'text',
},
{
'key' => 'cust_bill-ftppassword',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Enable FTP of raw invoice data - server.',
'type' => 'text',
},
{
'key' => 'cust_bill-ftpdir',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Enable FTP of raw invoice data - server.',
'type' => 'text',
},
{
'key' => 'cust_bill-spoolformat',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Enable spooling of raw invoice data - format.',
'type' => 'select',
'select_enum' => [ '', 'default', 'billco', ],
@@ -2228,7 +2305,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'cust_bill-spoolagent',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Enable per-agent spooling of raw invoice data.',
'type' => 'checkbox',
},
@@ -2341,6 +2418,13 @@ worry that config_items is freeside-specific and icky.
},
{
+ 'key' => 'svc_forward-no_srcsvc',
+ 'section' => '',
+ 'description' => "Don't allow forwards from existing accounts, only arbitrary addresses. Useful when exporting to systems such as Communigate Pro which treat forwards in this fashion.",
+ 'type' => 'checkbox',
+ },
+
+ {
'key' => 'svc_forward-arbitrary_dst',
'section' => '',
'description' => "Allow forwards to point to arbitrary strings that don't necessarily look like email addresses. Only used when using forwards for weird, non-email things.",
@@ -2363,28 +2447,28 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice-ship_address',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Include the shipping address on invoices.',
'type' => 'checkbox',
},
{
'key' => 'invoice-unitprice',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Enable unit pricing on invoices.',
'type' => 'checkbox',
},
{
'key' => 'invoice-smallernotes',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Display the notes section in a smaller font on invoices.',
'type' => 'checkbox',
},
{
'key' => 'invoice-smallerfooter',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Display footers in a smaller font on invoices.',
'type' => 'checkbox',
},
@@ -2637,7 +2721,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'logo.png',
- 'section' => 'billing', #?
+ 'section' => 'UI', #'invoicing' ?
'description' => 'Company logo for HTML invoices and the backoffice interface, in PNG format. Suggested size somewhere near 92x62.',
'type' => 'image',
'per_agent' => 1, #XXX just view/logo.cgi, which is for the global
@@ -2646,7 +2730,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'logo.eps',
- 'section' => 'billing', #?
+ 'section' => 'invoicing',
'description' => 'Company logo for printed and PDF invoices, in EPS format.',
'type' => 'image',
'per_agent' => 1, #XXX as above, kinda
@@ -2654,14 +2738,14 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'selfservice-ignore_quantity',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Ignores service quantity restrictions in self-service context. Strongly not recommended - just set your quantities correctly in the first place.',
'type' => 'checkbox',
},
{
'key' => 'selfservice-session_timeout',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Self-service session timeout. Defaults to 1 hour.',
'type' => 'select',
'select_enum' => [ '1 hour', '2 hours', '4 hours', '8 hours', '1 day', '1 week', ],
@@ -2778,7 +2862,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'signup_credit_type',
- 'section' => 'billing',
+ 'section' => 'billing', #self-service?
'description' => 'The group to use for new, automatically generated credit reasons resulting from signup and self-service declines.',
'type' => 'select-sub',
'options_sub' => sub { require FS::Record;
@@ -2825,14 +2909,14 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'disable_previous_balance',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Disable inclusion of previous balancem payment, and credit lines on invoices',
'type' => 'checkbox',
},
{
'key' => 'previous_balance-summary_only',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Only show a single line summarizing the total previous balance rather than one line per invoice.',
'type' => 'checkbox',
},
@@ -2941,14 +3025,14 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'cust_bill-max_same_services',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Maximum number of the same service to list individually on invoices before condensing to a single line listing the number of services. Defaults to 5.',
'type' => 'text',
},
{
'key' => 'cust_bill-consolidate_services',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Consolidate service display into fewer lines on invoices rather than one per service.',
'type' => 'checkbox',
},
@@ -2969,7 +3053,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'selfservice-head',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'HTML for the HEAD section of the self-service interface, typically used for LINK stylesheet tags',
'type' => 'textarea', #htmlarea?
'per_agent' => 1,
@@ -2978,7 +3062,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'selfservice-body_header',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'HTML header for the self-service interface',
'type' => 'textarea', #htmlarea?
'per_agent' => 1,
@@ -2986,8 +3070,8 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'selfservice-body_footer',
- 'section' => '',
- 'description' => 'HTML header for the self-service interface',
+ 'section' => 'self-service',
+ 'description' => 'HTML footer for the self-service interface',
'type' => 'textarea', #htmlarea?
'per_agent' => 1,
},
@@ -2995,7 +3079,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'selfservice-body_bgcolor',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'HTML background color for the self-service interface, for example, #FFFFFF',
'type' => 'text',
'per_agent' => 1,
@@ -3003,15 +3087,166 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'selfservice-box_bgcolor',
- 'section' => '',
- 'description' => 'HTML color for self-service interface input boxes, for example, #C0C0C0"',
+ 'section' => 'self-service',
+ 'description' => 'HTML color for self-service interface input boxes, for example, #C0C0C0',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-text_color',
+ 'section' => 'self-service',
+ 'description' => 'HTML text color for the self-service interface, for example, #000000',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-link_color',
+ 'section' => 'self-service',
+ 'description' => 'HTML link color for the self-service interface, for example, #0000FF',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-vlink_color',
+ 'section' => 'self-service',
+ 'description' => 'HTML visited link color for the self-service interface, for example, #FF00FF',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-hlink_color',
+ 'section' => 'self-service',
+ 'description' => 'HTML hover link color for the self-service interface, for example, #808080',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-alink_color',
+ 'section' => 'self-service',
+ 'description' => 'HTML active (clicked) link color for the self-service interface, for example, #808080',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-font',
+ 'section' => 'self-service',
+ 'description' => 'HTML font CSS for the self-service interface, for example, 0.9em/1.5em Arial, Helvetica, Geneva, sans-serif',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-title_color',
+ 'section' => 'self-service',
+ 'description' => 'HTML color for the self-service title, for example, #000000',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-title_align',
+ 'section' => 'self-service',
+ 'description' => 'HTML alignment for the self-service title, for example, center',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+ {
+ 'key' => 'selfservice-title_size',
+ 'section' => 'self-service',
+ 'description' => 'HTML font size for the self-service title, for example, 3',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-title_left_image',
+ 'section' => 'self-service',
+ 'description' => 'Image used for the top of the menu in the self-service interface, in PNG format.',
+ 'type' => 'image',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-title_right_image',
+ 'section' => 'self-service',
+ 'description' => 'Image used for the top of the menu in the self-service interface, in PNG format.',
+ 'type' => 'image',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-menu_skipblanks',
+ 'section' => 'self-service',
+ 'description' => 'Skip blank (spacer) entries in the self-service menu',
+ 'type' => 'checkbox',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-menu_skipheadings',
+ 'section' => 'self-service',
+ 'description' => 'Skip the unclickable heading entries in the self-service menu',
+ 'type' => 'checkbox',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-menu_bgcolor',
+ 'section' => 'self-service',
+ 'description' => 'HTML color for the self-service menu, for example, #C0C0C0',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-menu_fontsize',
+ 'section' => 'self-service',
+ 'description' => 'HTML font size for the self-service menu, for example, -1',
'type' => 'text',
'per_agent' => 1,
},
+ {
+ 'key' => 'selfservice-menu_nounderline',
+ 'section' => 'self-service',
+ 'description' => 'Styles menu links in the self-service without underlining.',
+ 'type' => 'checkbox',
+ 'per_agent' => 1,
+ },
+
+
+ {
+ 'key' => 'selfservice-menu_top_image',
+ 'section' => 'self-service',
+ 'description' => 'Image used for the top of the menu in the self-service interface, in PNG format.',
+ 'type' => 'image',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-menu_body_image',
+ 'section' => 'self-service',
+ 'description' => 'Repeating image used for the body of the menu in the self-service interface, in PNG format.',
+ 'type' => 'image',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-menu_bottom_image',
+ 'section' => 'self-service',
+ 'description' => 'Image used for the bottom of the menu in the self-service interface, in PNG format.',
+ 'type' => 'image',
+ 'per_agent' => 1,
+ },
{
'key' => 'selfservice-bulk_format',
- 'section' => '',
+ 'section' => 'deprecated',
'description' => 'Parameter arrangement for selfservice bulk features',
'type' => 'select',
'select_enum' => [ '', 'izoom-soap', 'izoom-ftp' ],
@@ -3020,7 +3255,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'selfservice-bulk_ftp_dir',
- 'section' => '',
+ 'section' => 'deprecated',
'description' => 'Enable bulk ftp provisioning in this folder',
'type' => 'text',
'per_agent' => 1,
@@ -3028,21 +3263,21 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'signup-no_company',
- 'section' => '',
+ 'section' => 'self-service',
'description' => "Don't display a field for company name on signup.",
'type' => 'checkbox',
},
{
'key' => 'signup-recommend_email',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Encourage the entry of an invoicing email address on signup.',
'type' => 'checkbox',
},
{
'key' => 'signup-recommend_daytime',
- 'section' => '',
+ 'section' => 'self-service',
'description' => 'Encourage the entry of a daytime phone number invoicing email address on signup.',
'type' => 'checkbox',
},
@@ -3062,6 +3297,20 @@ worry that config_items is freeside-specific and icky.
},
{
+ 'key' => 'svc_phone-domain',
+ 'section' => '',
+ 'description' => 'Track an optional domain association with each phone service.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'svc_phone-phone_name-max_length',
+ 'section' => '',
+ 'description' => 'Maximum length of the phone service "Name" field (svc_phone.phone_name). Sometimes useful to limit this (to 15?) when exporting as Caller ID data.',
+ 'type' => 'text',
+ },
+
+ {
'key' => 'default_phone_countrycode',
'section' => '',
'description' => 'Default countrcode',
@@ -3182,7 +3431,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'agent-invoice_template',
- 'section' => 'billing',
+ 'section' => 'invoicing',
'description' => 'Enable display/edit of old-style per-agent invoice template selection',
'type' => 'checkbox',
},
@@ -3290,6 +3539,20 @@ worry that config_items is freeside-specific and icky.
'type' => 'checkbox',
},
+ {
+ 'key' => 'svc_domain-edit_domain',
+ 'section' => '',
+ 'description' => 'Enable domain renaming',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'enable_legacy_prepaid_income',
+ 'section' => '',
+ 'description' => "Enable legacy prepaid income reporting. Only useful when you have imported pre-Freeside packages with longer-than-monthly duration, and need to do prepaid income reporting on them before they've been invoiced the first time.",
+ 'type' => 'checkbox',
+ },
+
{ key => "apacheroot", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
{ key => "apachemachine", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
{ key => "apachemachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
diff --git a/FS/FS/Mason.pm b/FS/FS/Mason.pm
index e732eb77d..cc2bdcc7c 100644
--- a/FS/FS/Mason.pm
+++ b/FS/FS/Mason.pm
@@ -172,6 +172,7 @@ if ( -e $addl_handler_use_file ) {
use FS::part_export;
use FS::part_export_option;
use FS::export_svc;
+ use FS::export_device;
use FS::msgcat;
use FS::rate;
use FS::rate_region;
@@ -220,6 +221,8 @@ if ( -e $addl_handler_use_file ) {
#use FS::h_phone_device;
use FS::h_svc_www;
use FS::cust_statement;
+ use FS::svc_pbx;
+ use FS::svc_mailinglist;
# Sammath Naur
if ( $FS::Mason::addl_handler_use ) {
diff --git a/FS/FS/Misc.pm b/FS/FS/Misc.pm
index 5231350fa..71670f758 100644
--- a/FS/FS/Misc.pm
+++ b/FS/FS/Misc.pm
@@ -216,9 +216,10 @@ encoding which, if specified, overrides the default "7bit".
use vars qw( $conf );
use Date::Format;
-use Mail::Header;
-use Mail::Internet 2.00;
use MIME::Entity;
+use Email::Sender::Simple qw(sendmail);
+use Email::Sender::Transport::SMTP;
+use Email::Sender::Transport::SMTP::TLS;
use FS::UID;
FS::UID->install_callback( sub {
@@ -234,7 +235,6 @@ sub send_email {
# join("\n", map { " $_: ". $options{$_} } keys %options ). "\n"
}
- $ENV{MAILADDRESS} = $options{'from'};
my $to = ref($options{to}) ? join(', ', @{ $options{to} } ) : $options{to};
my @mimeargs = ();
@@ -287,7 +287,7 @@ sub send_email {
$domain = $1;
} else {
warn 'no domain found in invoice from address '. $options{'from'}.
- '; constructing Message-ID @example.com';
+ '; constructing Message-ID (and saying HELO) @example.com';
$domain = 'example.com';
}
my $message_id = join('.', rand()*(2**32), $$, time). "\@$domain";
@@ -333,101 +333,32 @@ sub send_email {
}
- my $smtpmachine = $conf->config('smtpmachine');
- $!=0;
+ #send the email
- $message->mysmtpsend( 'Host' => $smtpmachine,
- 'MailFrom' => $options{'from'},
- );
+ my %smtp_opt = ( 'host' => $conf->config('smtpmachine'),
+ 'helo' => $domain,
+ );
-}
-
-#this kludges a "mysmtpsend" method into Mail::Internet for send_email above
-#now updated for MailTools v2!
-package Mail::Internet;
-
-use Mail::Address;
-use Net::SMTP;
-use Net::Domain;
-
-sub Mail::Internet::mysmtpsend($@) {
- my ($self, %opt) = @_;
-
- my $host = $opt{Host};
- my $envelope = $opt{MailFrom}; # || mailaddress();
- my $quit = 1;
-
- my ($smtp, @hello);
-
- push @hello, Hello => $opt{Hello}
- if defined $opt{Hello};
-
- push @hello, Port => $opt{Port}
- if exists $opt{Port};
-
- push @hello, Debug => $opt{Debug}
- if exists $opt{Debug};
-
-# if(!defined $host)
-# { local $SIG{__DIE__};
-# my @hosts = qw(mailhost localhost);
-# unshift @hosts, split /\:/, $ENV{SMTPHOSTS}
-# if defined $ENV{SMTPHOSTS};
-#
-# foreach $host (@hosts)
-# { $smtp = eval { Net::SMTP->new($host, @hello) };
-# last if defined $smtp;
-# }
-# }
-# elsif(ref($host) && UNIVERSAL::isa($host,'Net::SMTP'))
- if(ref($host) && UNIVERSAL::isa($host,'Net::SMTP'))
- { $smtp = $host;
- $quit = 0;
- }
- else
- { #local $SIG{__DIE__};
- #$smtp = eval { Net::SMTP->new($host, @hello) };
- $smtp = Net::SMTP->new($host, @hello);
- }
+ my($port, $enc) = split('-', ($conf->config('smtp-encryption') || '25') );
+ $smtp_opt{'port'} = $port;
- unless ( defined($smtp) ) {
- my $err = $!;
- $err =~ s/Invalid argument/Unknown host/;
- return "can't connect to $host: $err"
+ my $transport;
+ if ( defined($enc) && $enc eq 'starttls' ) {
+ $smtp_opt{$_} = $conf->config("smtp-$_") for qw(username password);
+ $transport = Email::Sender::Transport::SMTP::TLS->new( %smtp_opt );
+ } else {
+ if ( $conf->exists('smtp-username') && $conf->exists('smtp-password') ) {
+ $smtp_opt{"sasl_$_"} = $conf->config("smtp-$_") for qw(username password);
}
+ $smtp_opt{'ssl'} = 1 if defined($enc) && $enc eq 'tls';
+ $transport = Email::Sender::Transport::SMTP->new( %smtp_opt );
+ }
- my $head = $self->cleaned_header_dup;
-
- $head->delete('Bcc');
-
- # Who is it to
-
- my @rcpt = map { ref $_ ? @$_ : $_ } grep { defined } @opt{'To','Cc','Bcc'};
- @rcpt = map { $head->get($_) } qw(To Cc Bcc)
- unless @rcpt;
-
- my @addr = map {$_->address} Mail::Address->parse(@rcpt);
- #@addr or return ();
- return 'No valid destination addresses found!'
- unless(@addr);
-
- # Send it
-
- my $ok = $smtp->mail($envelope)
- && $smtp->to(@addr)
- && $smtp->data(join("", @{$head->header}, "\n", @{$self->body}));
+ eval { sendmail($message, { transport => $transport }); };
+ ref($@) ? ( $@->code ? $@->code.' ' : '' ). $@->message
+ : $@;
- #$quit && $smtp->quit;
- #$ok ? @addr : ();
- if ( $ok ) {
- $quit && $smtp->quit;
- return '';
- } else {
- return $smtp->code. ' '. $smtp->message;
- }
}
-package FS::Misc;
-#eokludge
=item send_fax OPTION => VALUE ...
diff --git a/FS/FS/Record.pm b/FS/FS/Record.pm
index 201e7b23c..3b1967e42 100644
--- a/FS/FS/Record.pm
+++ b/FS/FS/Record.pm
@@ -2140,7 +2140,7 @@ sub ut_alpha {
'';
}
-=item ut_alpha COLUMN
+=item ut_alphan COLUMN
Check/untaint alphanumeric strings (no spaces). May be null. If there is an
error, returns the error, otherwise returns false.
@@ -2155,6 +2155,22 @@ sub ut_alphan {
'';
}
+=item ut_alphasn COLUMN
+
+Check/untaint alphanumeric strings, spaces allowed. May be null. If there is
+an error, returns the error, otherwise returns false.
+
+=cut
+
+sub ut_alphasn {
+ my($self,$field)=@_;
+ $self->getfield($field) =~ /^([\w ]*)$/
+ or return "Illegal (alphanumeric) $field: ". $self->getfield($field);
+ $self->setfield($field,$1);
+ '';
+}
+
+
=item ut_alpha_lower COLUMN
Check/untaint lowercase alphanumeric strings (no spaces). May not be null. If
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index e5bb4fe15..660a072b8 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -102,6 +102,10 @@ sub dbdef_dist {
my %hash = map { $_ => shift @coldef }
qw( name type null length default local );
+ #can be removed once we depend on DBIx::DBSchema 0.39;
+ $hash{'type'} = 'LONGTEXT'
+ if $hash{'type'} =~ /^TEXT$/i && $datasrc =~ /^dbi:mysql/i;
+
unless ( defined $hash{'default'} ) {
warn "$tablename:\n".
join('', map "$_ => $hash{$_}\n", keys %hash) ;# $stop = <STDIN>;
@@ -113,7 +117,17 @@ sub dbdef_dist {
#false laziness w/sub indices in DBIx::DBSchema::DBD (well, sorta)
#and sub sql_create_table in DBIx::DBSchema::Table (slighty more?)
my $unique = $tables_hashref->{$tablename}{'unique'};
- my $index = $tables_hashref->{$tablename}{'index'};
+ my @index = @{ $tables_hashref->{$tablename}{'index'} };
+
+ # kludge to avoid avoid "BLOB/TEXT column 'statustext' used in key
+ # specification without a key length".
+ # better solution: teach DBIx::DBSchema to specify a default length for
+ # MySQL indices on text columns, or just to support an index length at all
+ # so we can pass something in.
+ # best solution: eliminate need for this index in cust_main::retry_realtime
+ @index = grep { @{$_}[0] ne 'statustext' } @index
+ if $datasrc =~ /^dbi:mysql/i;
+
my @indices = ();
push @indices, map {
DBIx::DBSchema::Index->new({
@@ -130,7 +144,7 @@ sub dbdef_dist {
'columns' => $_,
});
}
- @$index;
+ @index;
DBIx::DBSchema::Table->new({
'name' => $tablename,
@@ -641,10 +655,11 @@ sub tables_hashref {
'addlinfo', 'text', 'NULL', '', '', '',
'closed', 'char', 'NULL', 1, '', '',
'pkgnum', 'int', 'NULL', '', '', '', #desired pkgnum for pkg-balances
+ 'eventnum', 'int', 'NULL', '', '', '', #triggering event for commission
],
'primary_key' => 'crednum',
'unique' => [],
- 'index' => [ ['custnum'], ['_date'] ],
+ 'index' => [ ['custnum'], ['_date'], ['eventnum'] ],
},
'cust_credit_bill' => {
@@ -1353,8 +1368,8 @@ sub tables_hashref {
'part_pkg_taxoverride' => {
'columns' => [
'taxoverridenum', 'serial', '', '', '', '',
- 'pkgpart', 'serial', '', '', '', '',
- 'taxclassnum', 'serial', '', '', '', '',
+ 'pkgpart', 'int', '', '', '', '',
+ 'taxclassnum', 'int', '', '', '', '',
'usage_class', 'varchar', 'NULL', $char_d, '', '',
],
'primary_key' => 'taxoverridenum',
@@ -1475,14 +1490,26 @@ sub tables_hashref {
'downbytes_threshold', 'bigint', 'NULL', '', '', '',
'totalbytes','bigint', 'NULL', '', '', '',
'totalbytes_threshold', 'bigint', 'NULL', '', '', '',
- 'domsvc', 'int', '', '', '', '',
+ 'domsvc', 'int', '', '', '', '',
+ 'pbxsvc', 'int', 'NULL', '', '', '',
'last_login', @date_type, '', '',
'last_logout', @date_type, '', '',
+ #communigate pro fields (quota = MaxAccountSize)
+ 'file_quota', 'varchar', 'NULL', $char_d, '', '', #MaxWebSize
+ 'file_maxnum', 'varchar', 'NULL', $char_d, '', '', #MaxWebFiles
+ 'file_maxsize', 'varchar', 'NULL', $char_d, '', '', #MaxFileSize
+ 'cgp_accessmodes', 'varchar', 'NULL', 255, '', '', #AccessModes
+ 'password_selfchange','char', 'NULL', 1, '', '', #PWDAllowed
+ 'password_recover', 'char', 'NULL', 1, '', '', #PasswordRecovery
+ 'cgp_type', 'varchar', 'NULL', $char_d, '', '', #AccountType
+ 'cgp_aliases', 'varchar', 'NULL', 255, '', '',
+ 'cgp_deletemode', 'varchar', 'NULL', $char_d, '', '', #DeleteMode
+ 'cgp_emptytrash', 'varchar', 'NULL', $char_d, '', '', #EmptyTrash
],
'primary_key' => 'svcnum',
#'unique' => [ [ 'username', 'domsvc' ] ],
'unique' => [],
- 'index' => [ ['username'], ['domsvc'] ],
+ 'index' => [ ['username'], ['domsvc'], ['pbxsvc'] ],
},
'acct_rt_transaction' => {
@@ -1518,9 +1545,22 @@ sub tables_hashref {
'parent_svcnum', 'int', 'NULL', '', '', '',
'registrarnum', 'int', 'NULL', '', '', '',
'registrarkey', 'varchar', 'NULL', 512, '', '',
- 'setup_date', @date_type, '', '',
+ 'setup_date', @date_type, '', '',
'renewal_interval', 'int', 'NULL', '', '', '',
'expiration_date', @date_type, '', '',
+ #communigate pro fields (quota = MaxAccountSize)
+ 'max_accounts', 'int', 'NULL', '', '', '',
+ 'cgp_aliases', 'varchar', 'NULL', 255, '', '',
+ 'cgp_accessmodes','varchar','NULL', 255, '', '', #DomainAccessModes
+ 'acct_def_password_selfchange','char', 'NULL', 1, '', '',
+ 'acct_def_password_recover', 'char', 'NULL', 1, '', '',
+ 'acct_def_cgp_accessmodes', 'varchar', 'NULL', 255, '', '',
+ 'acct_def_quota', 'varchar', 'NULL', $char_d, '', '',
+ 'acct_def_file_quota', 'varchar', 'NULL', $char_d, '', '',
+ 'acct_def_file_maxnum', 'varchar', 'NULL', $char_d, '', '',
+ 'acct_def_file_maxsize', 'varchar', 'NULL', $char_d, '', '',
+ 'acct_def_cgp_deletemode', 'varchar', 'NULL', $char_d, '', '',
+ 'acct_def_cgp_emptytrash', 'varchar', 'NULL', $char_d, '', '',
],
'primary_key' => 'svcnum',
'unique' => [ ],
@@ -1696,6 +1736,17 @@ sub tables_hashref {
'index' => [ [ 'exportnum' ], [ 'svcpart' ] ],
},
+ 'export_device' => {
+ 'columns' => [
+ 'exportdevicenum' => 'serial', '', '', '', '',
+ 'exportnum' => 'int', '', '', '', '',
+ 'devicepart' => 'int', '', '', '', '',
+ ],
+ 'primary_key' => 'exportdevicenum',
+ 'unique' => [ [ 'exportnum', 'devicepart' ] ],
+ 'index' => [ [ 'exportnum' ], [ 'devicepart' ] ],
+ },
+
'part_export' => {
'columns' => [
'exportnum', 'serial', '', '', '', '',
@@ -1933,16 +1984,17 @@ sub tables_hashref {
'rate_detail' => {
'columns' => [
- 'ratedetailnum', 'serial', '', '', '', '',
- 'ratenum', 'int', '', '', '', '',
- 'orig_regionnum', 'int', 'NULL', '', '', '',
- 'dest_regionnum', 'int', '', '', '', '',
- 'min_included', 'int', '', '', '', '',
- #'min_charge', @money_type, '', '',
- 'min_charge', 'decimal', '', '10,5', '', '',
- 'sec_granularity', 'int', '', '', '', '',
+ 'ratedetailnum', 'serial', '', '', '', '',
+ 'ratenum', 'int', '', '', '', '',
+ 'orig_regionnum', 'int', 'NULL', '', '', '',
+ 'dest_regionnum', 'int', '', '', '', '',
+ 'min_included', 'int', '', '', '', '',
+ 'conn_charge', @money_type, '0', '', #'decimal','','10,5','0','',
+ 'conn_sec', 'int', '', '', '0', '',
+ 'min_charge', 'decimal', '', '10,5', '', '', #@money_type, '', '',
+ 'sec_granularity', 'int', '', '', '', '',
#time period (link to table of periods)?
- 'classnum', 'int', 'NULL', '', '', '',
+ 'classnum', 'int', 'NULL', '', '', '',
],
'primary_key' => 'ratedetailnum',
'unique' => [ [ 'ratenum', 'orig_regionnum', 'dest_regionnum' ] ],
@@ -2329,11 +2381,12 @@ sub tables_hashref {
'_password', 'varchar', '', $char_d, '', '',
'last', 'varchar', '', $char_d, '', '',
'first', 'varchar', '', $char_d, '', '',
+ 'user_custnum', 'int', 'NULL', '', '', '',
'disabled', 'char', 'NULL', 1, '', '',
],
'primary_key' => 'usernum',
'unique' => [ [ 'username' ] ],
- 'index' => [],
+ 'index' => [ [ 'user_custnum' ] ],
},
'access_user_pref' => {
@@ -2401,10 +2454,15 @@ sub tables_hashref {
'pin', 'varchar', 'NULL', $char_d, '', '',
'sip_password', 'varchar', 'NULL', $char_d, '', '',
'phone_name', 'varchar', 'NULL', $char_d, '', '',
+ 'pbxsvc', 'int', 'NULL', '', '', '',
+ 'domsvc', 'int', 'NULL', '', '', '',
+ 'locationnum', 'int', 'NULL', '', '', '',
],
'primary_key' => 'svcnum',
'unique' => [],
- 'index' => [ [ 'countrycode', 'phonenum' ] ],
+ 'index' => [ ['countrycode', 'phonenum'], ['pbxsvc'], ['domsvc'],
+ ['locationnum'],
+ ],
},
'phone_device' => {
@@ -2499,6 +2557,58 @@ sub tables_hashref {
'unique' => [ [ 'pkgnum', 'refnum' ] ],
'index' => [ [ 'pkgnum' ], [ 'refnum' ] ],
},
+
+ 'svc_pbx' => {
+ 'columns' => [
+ 'svcnum', 'int', '', '', '', '',
+ 'id', 'int', 'NULL', '', '', '',
+ 'title', 'varchar', 'NULL', $char_d, '', '',
+ 'max_extensions', 'int', 'NULL', '', '', '',
+ ],
+ 'primary_key' => 'svcnum',
+ 'unique' => [],
+ 'index' => [ [ 'id' ] ],
+ },
+
+ 'svc_mailinglist' => { #svc_group?
+ 'columns' => [
+ 'svcnum', 'int', '', '', '', '',
+ 'username', 'varchar', '', $username_len, '', '',
+ 'domsvc', 'int', '', '', '', '',
+ 'listnum', 'int', '', '', '', '',
+ 'reply_to', 'char', 'NULL', 1, '', '',#SetReplyTo
+ 'remove_from', 'char', 'NULL', 1, '', '',#RemoveAuthor
+ 'reject_auto', 'char', 'NULL', 1, '', '',#RejectAuto
+ 'remove_to_and_cc', 'char', 'NULL', 1, '', '',#RemoveToAndCc
+ ],
+ 'primary_key' => 'svcnum',
+ 'unique' => [],
+ 'index' => [ ['username'], ['domsvc'], ['listnum'] ],
+ },
+
+ 'mailinglist' => {
+ 'columns' => [
+ 'listnum', 'serial', '', '', '', '',
+ 'listname', 'varchar', '', $char_d, '', '',
+ ],
+ 'primary_key' => 'listnum',
+ 'unique' => [],
+ 'index' => [],
+ },
+
+ 'mailinglistmember' => {
+ 'columns' => [
+ 'membernum', 'serial', '', '', '', '',
+ 'listnum', 'int', '', '', '', '',
+ 'svcnum', 'int', 'NULL', '', '', '',
+ 'email', 'varchar', 'NULL', 255, '', '',
+ ],
+ 'primary_key' => 'membernum',
+ 'unique' => [],
+ 'index' => [['listnum'],['svcnum'],['email']],
+ },
+
+
# name type nullability length default local
#'new_table' => {
diff --git a/FS/FS/TicketSystem/RT_External.pm b/FS/FS/TicketSystem/RT_External.pm
index 8ccc93712..46af1f5a1 100644
--- a/FS/FS/TicketSystem/RT_External.pm
+++ b/FS/FS/TicketSystem/RT_External.pm
@@ -247,7 +247,7 @@ sub href_customer_tickets {
}
-sub href_new_ticket {
+sub href_params_new_ticket {
my( $self, $custnum_or_cust_main, $requestors ) = @_;
my( $custnum, $cust_main );
@@ -258,14 +258,25 @@ sub href_new_ticket {
$custnum = $custnum_or_cust_main;
$cust_main = qsearchs('cust_main', { 'custnum' => $custnum } );
}
- my $queueid = $cust_main->agent->ticketing_queueid || $default_queueid;
-
- $self->baseurl.
- 'Ticket/Create.html?'.
- "Queue=$queueid".
- "&new-MemberOf=freeside://freeside/cust_main/$custnum".
- ( $requestors ? '&Requestors='. uri_escape($requestors) : '' )
- ;
+
+ my %param = (
+ 'Queue' => ($cust_main->agent->ticketing_queueid || $default_queueid),
+ 'new-MemberOf'=> "freeside://freeside/cust_main/$custnum",
+ 'Requestors' => $requestors,
+ );
+
+ ( $self->baseurl.'Ticket/Create.html', %param );
+}
+
+sub href_new_ticket {
+ my $self = shift;
+
+ my( $base, %param ) = $self->href_params_new_ticket(@_);
+
+ my $uri = new URI $base;
+ $uri->query_form(%param);
+ $uri;
+
}
sub href_ticket {
@@ -356,5 +367,9 @@ sub access_right {
0;
}
+sub create_ticket {
+ return 'create_ticket unimplemented w/external RT (write something w/RT::Client::REST?)';
+}
+
1;
diff --git a/FS/FS/TicketSystem/RT_Internal.pm b/FS/FS/TicketSystem/RT_Internal.pm
index 033c746ba..52e3922c9 100644
--- a/FS/FS/TicketSystem/RT_Internal.pm
+++ b/FS/FS/TicketSystem/RT_Internal.pm
@@ -1,7 +1,9 @@
package FS::TicketSystem::RT_Internal;
use strict;
-use vars qw( @ISA $DEBUG );
+use vars qw( @ISA $DEBUG $me );
+use Data::Dumper;
+use MIME::Entity;
use FS::UID qw(dbh);
use FS::CGI qw(popurl);
use FS::TicketSystem::RT_Libs;
@@ -10,6 +12,7 @@ use RT::CurrentUser;
@ISA = qw( FS::TicketSystem::RT_Libs );
$DEBUG = 0;
+$me = '[FS::TicketSystem::RT_Internal]';
sub sql_num_customer_tickets {
"( select count(*) from tickets
@@ -36,24 +39,190 @@ sub access_right {
#return '' unless $conf->config('ticket_system');
return '' unless FS::Conf->new->config('ticket_system');
- $self->_web_external_auth($session)
- unless $session
- && $session->{'CurrentUser'};
+ $session = $self->session($session);
$session->{'CurrentUser'}->HasRight( Right => $right,
Object => $RT::System );
}
+sub session {
+ my( $self, $session ) = @_;
+
+ if ( $session && $session->{'Current_User'} ) {
+ warn "$me session: using existing session and CurrentUser: \n".
+ Dumper($session->{'CurrentUser'})
+ if $DEBUG;
+ } else {
+ warn "$me session: loading session and CurrentUser\n" if $DEBUG > 1;
+ $session = $self->_web_external_auth($session);
+ }
+
+ $session;
+}
+
+sub init {
+ my $self = shift;
+
+ warn "$me init: loading RT libraries\n" if $DEBUG;
+ eval '
+ use lib ( "/opt/rt3/local/lib", "/opt/rt3/lib" );
+ use RT;
+ #it looks like the rest are taken care of these days in RT::InitClasses
+ #use RT::Ticket;
+ #use RT::Transactions;
+ #use RT::Users;
+ #use RT::CurrentUser;
+ #use RT::Templates;
+ #use RT::Queues;
+ #use RT::ScripActions;
+ #use RT::ScripConditions;
+ #use RT::Scrips;
+ #use RT::Groups;
+ #use RT::GroupMembers;
+ #use RT::CustomFields;
+ #use RT::CustomFieldValues;
+ #use RT::ObjectCustomFieldValues;
+
+ #for web external auth...
+ use RT::Interface::Web;
+ ';
+ die $@ if $@;
+
+ warn "$me init: loading RT config\n" if $DEBUG;
+ {
+ local $SIG{__DIE__};
+ eval 'RT::LoadConfig();';
+ }
+ die $@ if $@;
+
+ warn "$me init: initializing RT\n" if $DEBUG;
+ {
+ local $SIG{__DIE__};
+ eval 'RT::Init("NoSignalHandlers"=>1);';
+ }
+ die $@ if $@;
+
+ warn "$me init: complete" if $DEBUG;
+}
+
+=item create_ticket SESSION_HASHREF, OPTION => VALUE ...
+
+Class method. Creates a ticket. If there is an error, returns the scalar
+error, otherwise returns the newly created RT::Ticket object.
+
+Accepts the following options:
+
+=over 4
+
+=item queue
+
+Queue name or Id
+
+=item subject
+
+Ticket subject
+
+=item requestor
+
+Requestor email address or arrayref of addresses
+
+=item cc
+
+Cc: email address or arrayref of addresses
+
+=item message
+
+Ticket message
+
+=item mime_type
+
+MIME type to use for message. Defaults to text/plain. Specifying text/html
+can be useful to use HTML markup in message.
+
+=item custnum
+
+Customer number (see L<FS::cust_main>) to associate with ticket.
+
+=item svcnum
+
+Service number (see L<FS::cust_svc>) to associate with ticket. Will also
+associate the customer who has this service (unless the service is unlinked).
+
+=back
+
+=cut
+
+sub create_ticket {
+ my($self, $session, %param) = @_;
+
+ $session = $self->session($session);
+
+ my $Queue = RT::Queue->new($session->{'CurrentUser'});
+ $Queue->Load( $param{'queue'} );
+
+ my $req = ref($param{'requestor'})
+ ? $param{'requestor'}
+ : ( $param{'requestor'} ? [ $param{'requestor'} ] : [] );
+
+ my $cc = ref($param{'cc'})
+ ? $param{'cc'}
+ : ( $param{'cc'} ? [ $param{'cc'} ] : [] );
+
+ my $mimeobj = MIME::Entity->build(
+ 'Data' => $param{'message'},
+ 'Type' => ( $param{'mime_type'} || 'text/plain' ),
+ );
+
+ my %ticket = (
+ 'Queue' => $Queue->Id,
+ 'Subject' => $param{'subject'},
+ 'Requestor' => $req,
+ 'Cc' => $cc,
+ 'MIMEObj' => $mimeobj,
+ );
+ warn Dumper(\%ticket) if $DEBUG > 1;
+
+ my $Ticket = RT::Ticket->new($session->{'CurrentUser'});
+ my( $id, $Transaction, $ErrStr );
+ {
+ local $SIG{__DIE__};
+ ( $id, $Transaction, $ErrStr ) = $Ticket->Create( %ticket );
+ }
+ return $ErrStr if $id == 0;
+
+ warn "ticket got id $id\n" if $DEBUG;
+
+ #XXX check errors adding custnum/svcnum links (put it in a transaction)...
+ # but we do already know they're good
+
+ if ( $param{'custnum'} ) {
+ my( $val, $msg ) = $Ticket->_AddLink(
+ 'Type' => 'MemberOf',
+ 'Target' => 'freeside://freeside/cust_main/'. $param{'custnum'},
+ );
+ }
+
+ if ( $param{'svcnum'} ) {
+ my( $val, $msg ) = $Ticket->_AddLink(
+ 'Type' => 'MemberOf',
+ 'Target' => 'freeside://freeside/cust_svc/'. $param{'svcnum'},
+ );
+ }
+
+ $Ticket;
+}
+
#shameless false laziness w/rt/html/autohandler to get logged into RT from afar
sub _web_external_auth {
my( $self, $session ) = @_;
my $user = $FS::CurrentUser::CurrentUser->username;
+ $session ||= {};
$session->{'CurrentUser'} = RT::CurrentUser->new();
- warn "loading RT user for $user\n"
- if $DEBUG;
+ warn "$me _web_external_auth loading RT user for $user\n"
+ if $DEBUG > 1;
$session->{'CurrentUser'}->Load($user);
@@ -132,6 +301,8 @@ sub _web_external_auth {
#}
}
+ $session;
+
}
1;
diff --git a/FS/FS/UI/Web.pm b/FS/FS/UI/Web.pm
index 148085c4c..5e987429c 100644
--- a/FS/FS/UI/Web.pm
+++ b/FS/FS/UI/Web.pm
@@ -270,6 +270,7 @@ sub cust_header {
);
my %header2align = (
'Cust. Status' => 'c',
+ 'Cust#' => 'r',
);
my $cust_fields;
@@ -373,12 +374,10 @@ sub cust_fields {
my $seen_unlinked = 0;
map {
if ( $record->custnum ) {
- warn " $record -> $_"
- if $DEBUG > 1;
+ warn " $record -> $_" if $DEBUG > 1;
$record->$_(@_);
} else {
- warn " ($record unlinked)"
- if $DEBUG > 1;
+ warn " ($record unlinked)" if $DEBUG > 1;
$seen_unlinked++ ? '' : '(unlinked)';
}
} @cust_fields;
diff --git a/FS/FS/UID.pm b/FS/FS/UID.pm
index e3a4604b4..e042c05b1 100644
--- a/FS/FS/UID.pm
+++ b/FS/FS/UID.pm
@@ -128,7 +128,7 @@ sub forksuidsetup {
}
} else {
- warn "NO CONFIGURATION TABLE FOUND";
+ warn "NO CONFIGURATION TABLE FOUND" unless $FS::Schema::setup_hack;
}
unless ( $callback_hack ) {
diff --git a/FS/FS/Upgrade.pm b/FS/FS/Upgrade.pm
index c39680ef7..ff577f2f2 100644
--- a/FS/FS/Upgrade.pm
+++ b/FS/FS/Upgrade.pm
@@ -99,7 +99,6 @@ sub upgrade_data {
#reason type and reasons
'reason_type' => [],
- 'reason' => [],
'cust_pkg_reason' => [],
#need part_pkg before cust_credit...
@@ -129,9 +128,6 @@ sub upgrade_data {
#fixup access rights
'access_right' => [],
- #change tax_rate column types
- 'tax_rate' => [],
-
#change recur_flat and enable_prorate
'part_pkg_option' => [],
diff --git a/FS/FS/access_user.pm b/FS/FS/access_user.pm
index 8cc8b64fc..1bf6e9387 100644
--- a/FS/FS/access_user.pm
+++ b/FS/FS/access_user.pm
@@ -10,6 +10,7 @@ use FS::option_Common;
use FS::access_user_pref;
use FS::access_usergroup;
use FS::agent;
+use FS::cust_main;
@ISA = qw( FS::m2m_Common FS::option_Common FS::Record );
#@ISA = qw( FS::m2m_Common FS::option_Common );
@@ -220,6 +221,9 @@ sub replace {
$dbh->rollback or die $dbh->errstr if $oldAutoCommit;
return $error;
}
+ } elsif ( $old->disabled && !$new->disabled
+ && $new->_password =~ /changeme/i ) {
+ return "Must change password when enabling this account";
}
my $error = $new->SUPER::replace($old, @_);
@@ -254,6 +258,7 @@ sub check {
|| $self->ut_text('_password')
|| $self->ut_text('last')
|| $self->ut_text('first')
+ || $self->ut_foreign_keyn('user_custnum', 'cust_main', 'custnum')
|| $self->ut_enum('disabled', [ '', 'Y' ] )
;
return $error if $error;
@@ -272,6 +277,18 @@ sub name {
$self->get('last'). ', '. $self->first;
}
+=item user_cust_main
+
+Returns the FS::cust_main object (see L<FS::cust_main>), if any, for this
+user.
+
+=cut
+
+sub user_cust_main {
+ my $self = shift;
+ qsearchs( 'cust_main', { 'custnum' => $self->user_custnum } );
+}
+
=item access_usergroup
Returns links to the the groups this user is a part of, as FS::access_usergroup
diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm
index 0f08aaa51..28a7257cd 100644
--- a/FS/FS/cust_bill.pm
+++ b/FS/FS/cust_bill.pm
@@ -1,7 +1,7 @@
package FS::cust_bill;
use strict;
-use vars qw( @ISA $DEBUG $me $conf $money_char $date_format );
+use vars qw( @ISA $DEBUG $me $conf $money_char $date_format $rdate_format );
use vars qw( $invoice_lines @buf ); #yuck
use Fcntl qw(:flock); #for spool_csv
use List::Util qw(min max);
@@ -43,8 +43,9 @@ $me = '[FS::cust_bill]';
#ask FS::UID to run this stuff for us later
FS::UID->install_callback( sub {
$conf = new FS::Conf;
- $money_char = $conf->config('money_char') || '$';
- $date_format = $conf->config('date_format') || '%x';
+ $money_char = $conf->config('money_char') || '$';
+ $date_format = $conf->config('date_format') || '%x';
+ $rdate_format = $conf->config('date_format') || '%m/%d/%Y';
} );
=head1 NAME
@@ -2293,7 +2294,7 @@ sub print_generic {
'template' => $template, #params{'template'},
'notice_name' => ($params{'notice_name'} || 'Invoice'),#escape_function?
'current_charges' => sprintf("%.2f", $self->charged),
- 'duedate' => $self->due_date2str('%m/%d/%Y'), #date_format?
+ 'duedate' => $self->due_date2str($rdate_format), #date_format?
#customer info
'custnum' => $cust_main->display_custnum,
@@ -2630,7 +2631,9 @@ sub print_generic {
$invoice_data{current_less_finance} =
sprintf('%.2f', $self->charged - $invoice_data{finance_amount} );
- if ( $multisection && !$conf->exists('disable_previous_balance') ) {
+ if ( $multisection && !$conf->exists('disable_previous_balance')
+ || $conf->exists('previous_balance-summary_only') )
+ {
unshift @sections, $previous_section if $pr_total;
}
@@ -3151,7 +3154,7 @@ sub balance_due_msg {
my $msg = 'Balance Due';
return $msg unless $self->terms;
if ( $self->due_date ) {
- $msg .= ' - Please pay by '. $self->due_date2str('%x');
+ $msg .= ' - Please pay by '. $self->due_date2str($date_format);
} elsif ( $self->terms ) {
$msg .= ' - '. $self->terms;
}
@@ -3163,7 +3166,7 @@ sub balance_due_date {
my $duedate = '';
if ( $conf->exists('invoice_default_terms')
&& $conf->config('invoice_default_terms')=~ /^\s*Net\s*(\d+)\s*$/ ) {
- $duedate = time2str("%m/%d/%Y", $self->_date + ($1*86400) );
+ $duedate = time2str($rdate_format, $self->_date + ($1*86400) );
}
$duedate;
}
@@ -3188,7 +3191,7 @@ Returns a string with the date, for example: "3/20/2008"
sub _date_pretty {
my $self = shift;
- time2str('%x', $self->_date);
+ time2str($date_format, $self->_date);
}
use vars qw(%pkg_category_cache);
@@ -3823,9 +3826,7 @@ sub _items_previous {
foreach ( @pr_cust_bill ) {
my $date = $conf->exists('invoice_show_prior_due_date')
? 'due '. $_->due_date2str($date_format)
- : time2str('%x', $_->_date); # date_format here, too,
- # but fix _items_cust_bill_pkg,
- # header, others?
+ : time2str($date_format, $_->_date);
push @b, {
'description' => 'Previous Balance, Invoice #'. $_->invnum. " ($date)",
#'pkgpart' => 'N/A',
@@ -3994,8 +3995,8 @@ sub _items_cust_bill_pkg {
? "Usage charges" : $desc;
unless ( $conf->exists('disable_line_item_date_ranges') ) {
- $description .= " (" . time2str("%x", $cust_bill_pkg->sdate).
- " - ". time2str("%x", $cust_bill_pkg->edate). ")";
+ $description .= " (" . time2str($date_format, $cust_bill_pkg->sdate).
+ " - ". time2str($date_format, $cust_bill_pkg->edate). ")";
}
my @d = ();
@@ -4087,8 +4088,8 @@ sub _items_cust_bill_pkg {
if ( $cust_bill_pkg->recur != 0 ) {
push @b, {
'description' => "$desc (".
- time2str("%x", $cust_bill_pkg->sdate). ' - '.
- time2str("%x", $cust_bill_pkg->edate). ')',
+ time2str($date_format, $cust_bill_pkg->sdate). ' - '.
+ time2str($date_format, $cust_bill_pkg->edate). ')',
'amount' => sprintf("%.2f", $cust_bill_pkg->recur),
};
}
@@ -4132,7 +4133,7 @@ sub _items_credits {
# " (". time2str("%x",$_->cust_credit->_date) .")".
# $reason,
'description' => 'Credit applied '.
- time2str("%x",$_->cust_credit->_date). $reason,
+ time2str($date_format,$_->cust_credit->_date). $reason,
'amount' => sprintf("%.2f",$_->amount),
};
}
@@ -4152,7 +4153,7 @@ sub _items_payments {
push @b, {
'description' => "Payment received ".
- time2str("%x",$_->cust_pay->_date ),
+ time2str($date_format,$_->cust_pay->_date ),
'amount' => sprintf("%.2f", $_->amount )
};
}
diff --git a/FS/FS/cust_bill_ApplicationCommon.pm b/FS/FS/cust_bill_ApplicationCommon.pm
index 7449679a8..8ba57f36f 100644
--- a/FS/FS/cust_bill_ApplicationCommon.pm
+++ b/FS/FS/cust_bill_ApplicationCommon.pm
@@ -203,7 +203,7 @@ sub apply_to_lineitems {
my %saw = ();
my @weights = sort { $b <=> $a } # highest weight first
grep { ! $saw{$_}++ } # want a list of unique weights
- map { $_->[1] }
+ map { $_->[1] }
@openweight;
my $remaining_amount = $self->amount;
@@ -224,83 +224,85 @@ sub apply_to_lineitems {
#if some items are less than applytotal/num_items, then apply then in full
my $lessflag;
do {
- $lessflag = 0;
+ $lessflag = 0;
- #no, not sprintf("%.2f",
- # we want this rounded DOWN for purposes of checking for line items
- # less than it, we don't want .66666 becoming .67 and causing this
- # to trigger when it shouldn't
+ #no, not sprintf("%.2f",
+ # we want this rounded DOWN for purposes of checking for line items
+ # less than it, we don't want .66666 becoming .67 and causing this
+ # to trigger when it shouldn't
my $applyeach = int( 100 * $applytotal / scalar(@items) ) / 100;
- my @newitems = ();
- foreach my $item ( @items ) {
- my $itemamount = $item->setup || $item->recur;
+ my @newitems = ();
+ foreach my $item ( @items ) {
+ my $itemamount = $item->setup || $item->recur;
if ( $itemamount < $applyeach ) {
- warn "$me applying full $itemamount".
- " to small line item (cust_bill_pkg ". $item->billpkgnum. ")\n"
- if $DEBUG;
- push @apply, [ $item, $itemamount ];
- $applytotal -= $itemamount;
+ warn "$me applying full $itemamount".
+ " to small line item (cust_bill_pkg ". $item->billpkgnum. ")\n"
+ if $DEBUG;
+ push @apply, [ $item, $itemamount ];
+ $applytotal -= $itemamount;
$lessflag=1;
- } else {
- push @newitems, $item;
- }
- }
- @items = @newitems;
-
- } while ( $lessflag );
-
- #and now that we've fallen out of the loop, distribute the rest equally...
-
- # should cust_bill_pay_pkg and cust_credit_bill_pkg amount columns
- # become real instead of numeric(10,2) ??? no..
- my $applyeach = sprintf("%.2f", $applytotal / scalar(@items) );
-
- my @equi_apply = map { [ $_, $applyeach ] } @items;
-
- # or should we futz with pennies instead? yes, bah!
- my $diff =
- sprintf('%.0f', 100 * ( $applytotal - $applyeach * scalar(@items) ) );
- $diff = 0 if $diff eq '-0'; #yay ieee fp
- if ( abs($diff) > scalar(@items) ) {
- #we must have done something really wrong, the difference is more than
- #a penny an item
- $dbh->rollback if $oldAutoCommit;
- return 'Error distributing pennies applying '. $self->_app_source_name.
- " - can't distribute difference of $diff pennies".
- ' among '. scalar(@items). ' line items';
- }
-
- warn "$me futzing with $diff pennies difference\n"
- if $DEBUG && $diff;
-
- my $futz = 0;
- while ( $diff != 0 && $futz < scalar(@equi_apply) ) {
- if ( $diff > 0 ) {
- $equi_apply[$futz++]->[1] += .01;
- $diff -= 1;
- } elsif ( $diff < 0 ) {
- $equi_apply[$futz++]->[1] -= .01;
- $diff += 1;
- } else {
- die "guru exception #5 (in fortran tongue the answer)";
- }
- }
+ } else {
+ push @newitems, $item;
+ }
+ }
+ @items = @newitems;
+
+ } while ( $lessflag && @items );
+
+ if ( @items ) {
+
+ #and now that we've fallen out of the loop, distribute the rest equally
+
+ # should cust_bill_pay_pkg and cust_credit_bill_pkg amount columns
+ # become real instead of numeric(10,2) ??? no..
+ my $applyeach = sprintf("%.2f", $applytotal / scalar(@items) );
+
+ my @equi_apply = map { [ $_, $applyeach ] } @items;
+
+ # or should we futz with pennies instead? yes, bah!
+ my $diff =
+ sprintf('%.0f', 100 * ( $applytotal - $applyeach * scalar(@items) ) );
+ $diff = 0 if $diff eq '-0'; #yay ieee fp
+ if ( abs($diff) > scalar(@items) ) {
+ #we must have done something really wrong, the difference is more than
+ #a penny an item
+ $dbh->rollback if $oldAutoCommit;
+ return 'Error distributing pennies applying '.$self->_app_source_name.
+ " - can't distribute difference of $diff pennies".
+ ' among '. scalar(@items). ' line items';
+ }
+
+ warn "$me futzing with $diff pennies difference\n"
+ if $DEBUG && $diff;
+
+ my $futz = 0;
+ while ( $diff != 0 && $futz < scalar(@equi_apply) ) {
+ if ( $diff > 0 ) {
+ $equi_apply[$futz++]->[1] += .01;
+ $diff -= 1;
+ } elsif ( $diff < 0 ) {
+ $equi_apply[$futz++]->[1] -= .01;
+ $diff += 1;
+ } else {
+ die "guru exception #5 (in fortran tongue the answer)";
+ }
+ }
+
+ if ( sprintf('%.0f', $diff ) ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "couldn't futz with pennies enough: still $diff left";
+ }
+
+ if ( $DEBUG ) {
+ warn "$me applying ". $_->[1].
+ " to line item (cust_bill_pkg ". $_->[0]->billpkgnum. ")\n"
+ foreach @equi_apply;
+ }
+ push @apply, @equi_apply;
- if ( sprintf('%.0f', $diff ) ) {
- $dbh->rollback if $oldAutoCommit;
- return "couldn't futz with pennies enough: still $diff left";
}
- if ( $DEBUG ) {
- warn "$me applying ". $_->[1].
- " to line item (cust_bill_pkg ". $_->[0]->billpkgnum. ")\n"
- foreach @equi_apply;
- }
-
-
- push @apply, @equi_apply;
-
#$remaining_amount -= $applytotal;
last unless $remaining_amount;
diff --git a/FS/FS/cust_bill_pkg_detail.pm b/FS/FS/cust_bill_pkg_detail.pm
index f2e60d2f4..4d9ee8191 100644
--- a/FS/FS/cust_bill_pkg_detail.pm
+++ b/FS/FS/cust_bill_pkg_detail.pm
@@ -241,8 +241,8 @@ sub _upgrade_data { # class method
warn "$me upgrading $class\n" if $DEBUG;
- my $columndef = dbdef->table($class->table)->column('classnum');
- unless ($columndef->type eq 'int4') {
+ my $type = dbdef->table($class->table)->column('classnum')->type;
+ unless ( $type =~ /^int/i || $type =~ /int$/i ) {
my $dbh = dbh;
if ( $dbh->{Driver}->{Name} eq 'Pg' ) {
diff --git a/FS/FS/cust_credit.pm b/FS/FS/cust_credit.pm
index 6c3effa13..d0aa3a4b4 100644
--- a/FS/FS/cust_credit.pm
+++ b/FS/FS/cust_credit.pm
@@ -14,6 +14,7 @@ use FS::cust_credit_bill;
use FS::part_pkg;
use FS::reason_type;
use FS::reason;
+use FS::cust_event;
@ISA = qw( FS::cust_main_Mixin FS::Record );
$me = '[ FS::cust_credit ]';
@@ -301,6 +302,7 @@ sub check {
|| $self->ut_textn('addlinfo')
|| $self->ut_enum('closed', [ '', 'Y' ])
|| $self->ut_foreign_keyn('pkgnum', 'cust_pkg', 'pkgnum')
+ || $self->ut_foreign_keyn('eventnum', 'cust_event', 'eventnum')
;
return $error if $error;
diff --git a/FS/FS/cust_event.pm b/FS/FS/cust_event.pm
index d2fcfc1e2..52b5911dc 100644
--- a/FS/FS/cust_event.pm
+++ b/FS/FS/cust_event.pm
@@ -1,18 +1,16 @@
package FS::cust_event;
use strict;
+use base qw( FS::cust_main_Mixin FS::Record );
use vars qw( @ISA $DEBUG $me );
use Carp qw( croak confess );
use FS::Record qw( qsearch qsearchs dbdef );
-use FS::cust_main_Mixin;
use FS::part_event;
#for cust_X
use FS::cust_main;
use FS::cust_pkg;
use FS::cust_bill;
-@ISA = qw(FS::cust_main_Mixin FS::Record);
-
$DEBUG = 0;
$me = '[FS::cust_event]';
@@ -230,7 +228,7 @@ sub do_event {
my $error;
{
local $SIG{__DIE__}; # don't want Mason __DIE__ handler active
- $error = eval { $part_event->do_action($object); };
+ $error = eval { $part_event->do_action($object, $self); };
}
my $status = '';
diff --git a/FS/FS/cust_location.pm b/FS/FS/cust_location.pm
index 87c6c3eb6..a90fbe170 100644
--- a/FS/FS/cust_location.pm
+++ b/FS/FS/cust_location.pm
@@ -225,6 +225,20 @@ sub line {
$self->location_label;
}
+=item location_hash
+
+Returns a list of key/value pairs, with the following keys: address1, adddress2,
+city, county, state, zip, country.
+
+=cut
+
+#geocode? not yet set
+
+sub location_hash {
+ my $self = shift;
+ map { $_ => $self->$_ } qw( address1 address2 city county state zip country );
+}
+
=back
=head1 BUGS
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm
index 4b712de44..88aceb935 100644
--- a/FS/FS/cust_main.pm
+++ b/FS/FS/cust_main.pm
@@ -1910,6 +1910,25 @@ sub has_ship_address {
scalar( grep { $self->getfield("ship_$_") ne '' } $self->addr_fields );
}
+=item location_hash
+
+Returns a list of key/value pairs, with the following keys: address1, adddress2,
+city, county, state, zip, country. The shipping address is used if present.
+
+=cut
+
+#geocode? dependent on tax-ship_address config, not available in cust_location
+#mostly. not yet then.
+
+sub location_hash {
+ my $self = shift;
+ my $prefix = $self->has_ship_address ? 'ship_' : '';
+
+ map { $_ => $self->get($prefix.$_) }
+ qw( address1 address2 city county state zip country geocode );
+ #fields that cust_location has
+}
+
=item all_pkgs [ EXTRA_QSEARCH_PARAMS_HASHREF ]
Returns all packages (see L<FS::cust_pkg>) for this customer.
@@ -3815,7 +3834,7 @@ sub due_cust_event {
warn " invalid conditions not eliminated with condition_sql:\n".
join('', map " $_: ".$unsat{$_}."\n", keys %unsat )
- if $DEBUG; # > 1;
+ if keys %unsat && $DEBUG; # > 1;
##
# insert
@@ -4768,9 +4787,19 @@ sub realtime_refund_bop {
) {
warn " attempting void\n" if $DEBUG > 1;
my $void = new Business::OnlinePayment( $processor, @bop_options );
- $content{'card_number'} = $cust_pay->payinfo
- if $cust_pay->payby eq 'CARD'
- && $void->can('info') && $void->info('CC_void_requires_card');
+ if ( $void->can('info') ) {
+ if ( $cust_pay->payby eq 'CARD'
+ && $void->info('CC_void_requires_card') )
+ {
+ $content{'card_number'} = $cust_pay->payinfo
+ } elsif ( $cust_pay->payby eq 'CHEK'
+ && $void->info('ECHECK_void_requires_account') )
+ {
+ ( $content{'account_number'}, $content{'routing_code'} ) =
+ split('@', $cust_pay->payinfo);
+ $content{'name'} = $self->get('first'). ' '. $self->get('last');
+ }
+ }
$void->content( 'action' => 'void', %content );
$void->submit();
if ( $void->is_success ) {
@@ -6111,9 +6140,19 @@ sub _new_realtime_refund_bop {
) {
warn " attempting void\n" if $DEBUG > 1;
my $void = new Business::OnlinePayment( $processor, @bop_options );
- $content{'card_number'} = $cust_pay->payinfo
- if $cust_pay->payby eq 'CARD'
- && $void->can('info') && $void->info('CC_void_requires_card');
+ if ( $void->can('info') ) {
+ if ( $cust_pay->payby eq 'CARD'
+ && $void->info('CC_void_requires_card') )
+ {
+ $content{'card_number'} = $cust_pay->payinfo;
+ } elsif ( $cust_pay->payby eq 'CHEK'
+ && $void->info('ECHECK_void_requires_account') )
+ {
+ ( $content{'account_number'}, $content{'routing_code'} ) =
+ split('@', $cust_pay->payinfo);
+ $content{'name'} = $self->get('first'). ' '. $self->get('last');
+ }
+ }
$void->content( 'action' => 'void', %content );
$void->submit();
if ( $void->is_success ) {
@@ -7281,7 +7320,7 @@ sub referral_cust_main_ncancelled {
Like referral_cust_main, except returns a flat list of all unsuspended (and
uncancelled) packages for each customer. The number of items in this list may
-be useful for comission calculations (perhaps after a C<grep { my $pkgpart = $_->pkgpart; grep { $_ == $pkgpart } @commission_worthy_pkgparts> } $cust_main-> ).
+be useful for commission calculations (perhaps after a C<grep { my $pkgpart = $_->pkgpart; grep { $_ == $pkgpart } @commission_worthy_pkgparts> } $cust_main-> ).
=cut
@@ -7343,8 +7382,10 @@ sub credit {
$cust_credit->set('reason', $reason)
}
- $cust_credit->addlinfo( delete $options{'addlinfo'} )
- if exists($options{'addlinfo'});
+ for (qw( addlinfo eventnum )) {
+ $cust_credit->$_( delete $options{$_} )
+ if exists($options{$_});
+ }
$cust_credit->insert(%options);
diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm
index 8415d629d..89eadd599 100644
--- a/FS/FS/cust_pkg.pm
+++ b/FS/FS/cust_pkg.pm
@@ -1,17 +1,19 @@
package FS::cust_pkg;
use strict;
+use base qw( FS::cust_main_Mixin FS::location_Mixin
+ FS::m2m_Common FS::option_Common FS::Record
+ );
use vars qw(@ISA $disable_agentcheck $DEBUG $me);
use Carp qw(cluck);
use Scalar::Util qw( blessed );
use List::Util qw(max);
use Tie::IxHash;
+use Time::Local qw( timelocal_nocheck );
use MIME::Entity;
use FS::UID qw( getotaker dbh );
use FS::Misc qw( send_email );
use FS::Record qw( qsearch qsearchs );
-use FS::m2m_Common;
-use FS::cust_main_Mixin;
use FS::cust_svc;
use FS::part_pkg;
use FS::cust_main;
@@ -38,8 +40,6 @@ use FS::svc_forward;
# for sending cancel emails in sub cancel
use FS::Conf;
-@ISA = qw( FS::m2m_Common FS::cust_main_Mixin FS::option_Common FS::Record );
-
$DEBUG = 0;
$me = '[FS::cust_pkg]';
@@ -250,6 +250,26 @@ an optional queue name for ticket additions
sub insert {
my( $self, %options ) = @_;
+ if ( $self->part_pkg->option('start_1st', 1) && !$self->start_date ) {
+ my ($sec,$min,$hour,$mday,$mon,$year) = (localtime(time) )[0,1,2,3,4,5];
+ $mon += 1 unless $mday == 1;
+ until ( $mon < 12 ) { $mon -= 12; $year++; }
+ $self->start_date( timelocal_nocheck(0,0,0,1,$mon,$year) );
+ }
+
+ my $expire_months = $self->part_pkg->option('expire_months', 1);
+ if ( $expire_months && !$self->expire ) {
+ my $start = $self->start_date || $self->setup || time;
+
+ #false laziness w/part_pkg::add_freq
+ my ($sec,$min,$hour,$mday,$mon,$year) = (localtime($start) )[0,1,2,3,4,5];
+ $mon += $expire_months;
+ until ( $mon < 12 ) { $mon -= 12; $year++; }
+
+ #$self->expire( timelocal_nocheck($sec,$min,$hour,$mday,$mon,$year) );
+ $self->expire( timelocal_nocheck(0,0,0,$mday,$mon,$year) );
+ }
+
local $SIG{HUP} = 'IGNORE';
local $SIG{INT} = 'IGNORE';
local $SIG{QUIT} = 'IGNORE';
@@ -1683,7 +1703,9 @@ sub extra_part_svc {
#seems to benchmark slightly faster...
qsearch( {
- 'select' => 'DISTINCT ON (svcpart) part_svc.*',
+ #'select' => 'DISTINCT ON (svcpart) part_svc.*',
+ #MySQL doesn't grok DISINCT ON
+ 'select' => 'DISTINCT part_svc.*',
'table' => 'part_svc',
'addl_from' =>
'LEFT JOIN pkg_svc ON ( pkg_svc.svcpart = part_svc.svcpart
@@ -1925,41 +1947,24 @@ sub cust_main {
qsearchs( 'cust_main', { 'custnum' => $self->custnum } );
}
+#these subs are in location_Mixin.pm now... unfortunately the POD doesn't mixin
+
=item cust_location
Returns the location object, if any (see L<FS::cust_location>).
-=cut
-
-sub cust_location {
- my $self = shift;
- return '' unless $self->locationnum;
- qsearchs( 'cust_location', { 'locationnum' => $self->locationnum } );
-}
-
=item cust_location_or_main
If this package is associated with a location, returns the locaiton (see
L<FS::cust_location>), otherwise returns the customer (see L<FS::cust_main>).
-=cut
-
-sub cust_location_or_main {
- my $self = shift;
- $self->cust_location || $self->cust_main;
-}
-
=item location_label [ OPTION => VALUE ... ]
Returns the label of the location object (see L<FS::cust_location>).
=cut
-sub location_label {
- my $self = shift;
- my $object = $self->cust_location_or_main;
- $object->location_label(@_);
-}
+#end of subs in location_Mixin.pm now... unfortunately the POD doesn't mixin
=item seconds_since TIMESTAMP
diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm
index 3c2820412..3ce13144c 100644
--- a/FS/FS/cust_svc.pm
+++ b/FS/FS/cust_svc.pm
@@ -251,6 +251,18 @@ sub replace {
}
}
+# #trigger a re-export on pkgnum changes?
+# # (of prepaid packages), for Expiration RADIUS attribute
+# if ( $new->pkgnum != $old->pkgnum && $new->cust_pkg->part_pkg->is_prepaid ) {
+# my $svc_x = $new->svc_x;
+# local($FS::Record::nowarn_identical) = 1;
+# my $error = $svc_x->export('replace');
+# if ( $error ) {
+# $dbh->rollback if $oldAutoCommit;
+# return $error if $error;
+# }
+# }
+
#my $error = $new->SUPER::replace($old, @_);
my $error = $new->SUPER::replace($old);
if ( $error ) {
@@ -411,7 +423,7 @@ sub _svc_label {
=item export_links
-Returns a list of html elements associated with this services exports.
+Returns a listref of html elements associated with this service's exports.
=cut
@@ -423,6 +435,21 @@ sub export_links {
$svc_x->export_links;
}
+=item export_getsettings
+
+Returns two hashrefs of settings associated with this service's exports.
+
+=cut
+
+sub export_getsettings {
+ my $self = shift;
+ my $svc_x = $self->svc_x
+ or return "can't find ". $self->part_svc->svcdb. '.svcnum '. $self->svcnum;
+
+ $svc_x->export_getsettings;
+}
+
+
=item svc_x
Returns the FS::svc_XXX object for this service (i.e. an FS::svc_acct object or
diff --git a/FS/FS/h_svc_mailinglist.pm b/FS/FS/h_svc_mailinglist.pm
new file mode 100644
index 000000000..3d1fd272a
--- /dev/null
+++ b/FS/FS/h_svc_mailinglist.pm
@@ -0,0 +1,33 @@
+package FS::h_svc_mailinglist;
+
+use strict;
+use vars qw( @ISA );
+use FS::h_Common;
+use FS::svc_mailinglist;
+
+@ISA = qw( FS::h_Common FS::svc_mailinglist );
+
+sub table { 'h_svc_mailinglist' };
+
+=head1 NAME
+
+FS::h_svc_mailinglist - Historical mailing list objects
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+An FS::h_svc_mailinglist object represents a historical mailing list.
+FS::h_svc_mailinglist inherits from FS::h_Common and FS::svc_mailinglist.
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::h_Common>, L<FS::svc_mailinglist>, L<FS::Record>, schema.html from the
+base documentation.
+
+=cut
+
+1;
+
diff --git a/FS/FS/h_svc_pbx.pm b/FS/FS/h_svc_pbx.pm
new file mode 100644
index 000000000..db702f322
--- /dev/null
+++ b/FS/FS/h_svc_pbx.pm
@@ -0,0 +1,33 @@
+package FS::h_svc_pbx;
+
+use strict;
+use vars qw( @ISA );
+use FS::h_Common;
+use FS::svc_pbx;
+
+@ISA = qw( FS::h_Common FS::svc_pbx );
+
+sub table { 'h_svc_pbx' };
+
+=head1 NAME
+
+FS::h_svc_pbx - Historical PBX objects
+
+=head1 SYNOPSIS
+
+=head1 DESCRIPTION
+
+An FS::h_svc_pbx object represents a historical PBX tenant. FS::h_svc_pbx
+inherits from FS::h_Common and FS::svc_pbx.
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::h_Common>, L<FS::svc_pbx>, L<FS::Record>, schema.html from the base
+documentation.
+
+=cut
+
+1;
+
diff --git a/FS/FS/location_Mixin.pm b/FS/FS/location_Mixin.pm
new file mode 100644
index 000000000..d45738682
--- /dev/null
+++ b/FS/FS/location_Mixin.pm
@@ -0,0 +1,57 @@
+package FS::location_Mixin;
+
+use strict;
+use FS::Record qw( qsearchs );
+use FS::cust_location;
+
+=item cust_location
+
+Returns the location object, if any (see L<FS::cust_location>).
+
+=cut
+
+sub cust_location {
+ my $self = shift;
+ return '' unless $self->locationnum;
+ qsearchs( 'cust_location', { 'locationnum' => $self->locationnum } );
+}
+
+=item cust_location_or_main
+
+If this package is associated with a location, returns the locaiton (see
+L<FS::cust_location>), otherwise returns the customer (see L<FS::cust_main>).
+
+=cut
+
+sub cust_location_or_main {
+ my $self = shift;
+ $self->cust_location || $self->cust_main;
+}
+
+=item location_label [ OPTION => VALUE ... ]
+
+Returns the label of the location object (see L<FS::cust_location>).
+
+=cut
+
+sub location_label {
+ my $self = shift;
+ my $object = $self->cust_location_or_main;
+ $object->location_label(@_);
+}
+
+=item location_hash
+
+Returns a hash of values for the location, either from the location object,
+the cust_main shipping address, or the cust_main address, whichever is present
+first.
+
+=cut
+
+sub location_hash {
+ my $self = shift;
+ my $object = $self->cust_location_or_main;
+ $object->location_hash(@_);
+}
+
+1;
diff --git a/FS/FS/mailinglist.pm b/FS/FS/mailinglist.pm
new file mode 100644
index 000000000..129461092
--- /dev/null
+++ b/FS/FS/mailinglist.pm
@@ -0,0 +1,173 @@
+package FS::mailinglist;
+
+use strict;
+use base qw( FS::Record );
+use FS::Record qw( qsearch qsearchs dbh );
+use FS::mailinglistmember;
+use FS::svc_mailinglist;
+
+=head1 NAME
+
+FS::mailinglist - Object methods for mailinglist records
+
+=head1 SYNOPSIS
+
+ use FS::mailinglist;
+
+ $record = new FS::mailinglist \%hash;
+ $record = new FS::mailinglist { 'column' => 'value' };
+
+ $error = $record->insert;
+
+ $error = $new_record->replace($old_record);
+
+ $error = $record->delete;
+
+ $error = $record->check;
+
+=head1 DESCRIPTION
+
+An FS::mailinglist object represents a mailing list FS::mailinglist inherits
+from FS::Record. The following fields are currently supported:
+
+=over 4
+
+=item listnum
+
+primary key
+
+=item listname
+
+Mailing list name
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item new HASHREF
+
+Creates a new mailing list. To add the mailing list to the database, see
+L<"insert">.
+
+Note that this stores the hash reference, not a distinct copy of the hash it
+points to. You can ask the object for a copy with the I<hash> method.
+
+=cut
+
+# the new method can be inherited from FS::Record, if a table method is defined
+
+sub table { 'mailinglist'; }
+
+=item insert
+
+Adds this record to the database. If there is an error, returns the error,
+otherwise returns false.
+
+=cut
+
+# the insert method can be inherited from FS::Record
+
+=item delete
+
+Delete this record from the database.
+
+=cut
+
+sub delete {
+ my $self = shift;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ foreach my $member ( $self->mailinglistmember ) {
+ my $error = $member->delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
+ my $error = $self->SUPER::delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
+
+}
+
+=item replace OLD_RECORD
+
+Replaces the OLD_RECORD with this one in the database. If there is an error,
+returns the error, otherwise returns false.
+
+=cut
+
+# the replace method can be inherited from FS::Record
+
+=item check
+
+Checks all fields to make sure this is a valid mailing list. If there is
+an error, returns the error, otherwise returns false. Called by the insert
+and replace methods.
+
+=cut
+
+# the check method should currently be supplied - FS::Record contains some
+# data checking routines
+
+sub check {
+ my $self = shift;
+
+ my $error =
+ $self->ut_numbern('listnum')
+ || $self->ut_text('listname')
+ ;
+ return $error if $error;
+
+ $self->SUPER::check;
+}
+
+=item mailinglistmember
+
+=cut
+
+sub mailinglistmember {
+ my $self = shift;
+ qsearch('mailinglistmember', { 'listnum' => $self->listnum } );
+}
+
+=item svc_mailinglist
+
+=cut
+
+sub svc_mailinglist {
+ my $self = shift;
+ qsearchs('svc_mailinglist', { 'listnum' => $self->listnum } );
+}
+
+=back
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::mailinglistmember>, L<FS::svc_mailinglist>, L<FS::Record>, schema.html
+from the base documentation.
+
+=cut
+
+1;
+
diff --git a/FS/FS/mailinglistmember.pm b/FS/FS/mailinglistmember.pm
new file mode 100644
index 000000000..8655d61b2
--- /dev/null
+++ b/FS/FS/mailinglistmember.pm
@@ -0,0 +1,239 @@
+package FS::mailinglistmember;
+
+use strict;
+use base qw( FS::Record );
+use Scalar::Util qw( blessed );
+use FS::Record qw( dbh qsearchs ); # qsearch );
+use FS::mailinglist;
+use FS::svc_acct;
+
+=head1 NAME
+
+FS::mailinglistmember - Object methods for mailinglistmember records
+
+=head1 SYNOPSIS
+
+ use FS::mailinglistmember;
+
+ $record = new FS::mailinglistmember \%hash;
+ $record = new FS::mailinglistmember { 'column' => 'value' };
+
+ $error = $record->insert;
+
+ $error = $new_record->replace($old_record);
+
+ $error = $record->delete;
+
+ $error = $record->check;
+
+=head1 DESCRIPTION
+
+An FS::mailinglistmember object represents a mailing list member.
+FS::mailinglistmember inherits from FS::Record. The following fields are
+currently supported:
+
+=over 4
+
+=item membernum
+
+primary key
+
+=item listnum
+
+listnum
+
+=item svcnum
+
+svcnum
+
+=item email
+
+email
+
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item new HASHREF
+
+Creates a new mailing list member. To add the member to the database, see
+ L<"insert">.
+
+Note that this stores the hash reference, not a distinct copy of the hash it
+points to. You can ask the object for a copy with the I<hash> method.
+
+=cut
+
+# the new method can be inherited from FS::Record, if a table method is defined
+
+sub table { 'mailinglistmember'; }
+
+=item insert
+
+Adds this record to the database. If there is an error, returns the error,
+otherwise returns false.
+
+=cut
+
+sub insert {
+ my $self = shift;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ my $error = $self->SUPER::insert
+ || $self->export('mailinglistmember_insert');
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
+}
+
+=item delete
+
+Delete this record from the database.
+
+=cut
+
+sub delete {
+ my $self = shift;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ my $error = $self->SUPER::delete
+ || $self->export('mailinglistmember_delete');
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
+}
+
+=item replace OLD_RECORD
+
+Replaces the OLD_RECORD with this one in the database. If there is an error,
+returns the error, otherwise returns false.
+
+=cut
+
+sub replace {
+ my $new = shift;
+
+ my $old = ( blessed($_[0]) && $_[0]->isa('FS::Record') )
+ ? shift
+ : $new->replace_old;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ my $error = $new->SUPER::replace($old)
+ || $new->export('mailinglistmember_replace', $old);
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
+}
+
+=item check
+
+Checks all fields to make sure this is a valid member. If there is
+an error, returns the error, otherwise returns false. Called by the insert
+and replace methods.
+
+=cut
+
+# the check method should currently be supplied - FS::Record contains some
+# data checking routines
+
+sub check {
+ my $self = shift;
+
+ my $error =
+ $self->ut_numbern('membernum')
+ || $self->ut_foreign_key('listnum', 'mailinglist', 'listnum')
+ || $self->ut_foreign_keyn('svcnum', 'svc_acct', 'svcnum')
+ || $self->ut_textn('email') #XXX ut_email! from svc_forward, cust_main_invoice
+ ;
+ return $error if $error;
+
+ $self->SUPER::check;
+}
+
+=item mailinglist
+
+=cut
+
+sub mailinglist {
+ my $self = shift;
+ qsearchs('mailinglist', { 'listnum' => $self->listnum } );
+}
+
+=item email_address
+
+=cut
+
+sub email_address {
+ my $self = shift;
+ #XXX svcnum
+ $self->email;
+}
+
+=item export
+
+=cut
+
+sub export {
+ my( $self, $method ) = ( shift, shift );
+ my $svc_mailinglist = $self->mailinglist->svc_mailinglist
+ or return '';
+ $svc_mailinglist->export($method, $self, @_);
+}
+
+=back
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::Record>, schema.html from the base documentation.
+
+=cut
+
+1;
+
diff --git a/FS/FS/part_event/Action/Mixin/credit_pkg.pm b/FS/FS/part_event/Action/Mixin/credit_pkg.pm
new file mode 100644
index 000000000..aeda92f91
--- /dev/null
+++ b/FS/FS/part_event/Action/Mixin/credit_pkg.pm
@@ -0,0 +1,63 @@
+package FS::part_event::Action::Mixin::credit_pkg;
+
+use strict;
+
+sub eventtable_hashref {
+ { 'cust_pkg' => 1 };
+}
+
+sub option_fields {
+ (
+ 'reasonnum' => { 'label' => 'Credit reason',
+ 'type' => 'select-reason',
+ 'reason_class' => 'R',
+ },
+ 'percent' => { 'label' => 'Percent',
+ 'type' => 'input-percentage',
+ 'default' => '100',
+ },
+ 'what' => { 'label' => 'Of',
+ 'type' => 'select',
+ #add additional ways to specify in the package def
+ 'options' => [ qw( base_recur_permonth unit_setup recur_cost_permonth setup_cost ) ],
+ 'labels' => { 'base_recur_permonth' => 'Base monthly fee',
+ 'unit_setup' => 'Setup fee',
+ 'recur_cost_permonth' => 'Monthly cost',
+ 'setup_cost' => 'Setup cost',
+ },
+ },
+ );
+
+}
+
+#my %no_cust_pkg = ( 'setup_cost' => 1 );
+
+sub _calc_credit {
+ my( $self, $cust_pkg ) = @_;
+
+ my $cust_main = $self->cust_main($cust_pkg);
+
+ my $part_pkg = $cust_pkg->part_pkg;
+
+ my $what = $self->option('what');
+
+ #false laziness w/Condition/cust_payments_pkg.pm
+ if ( $what =~ /_permonth$/ ) { #huh. yuck.
+ if ( $part_pkg->freq !~ /^\d+$/ ) {
+ die 'WARNING: Not crediting for package '. $cust_pkg->pkgnum.
+ ' ( customer '. $cust_pkg->custnum. ')'.
+ ' - credits not (yet) available for '.
+ ' packages with '. $part_pkg->freq_pretty. ' frequency';
+ }
+ }
+
+ my $percent = $self->option('percent');
+
+ #my @arg = $no_cust_pkg{$what} ? () : ($cust_pkg);
+ my @arg = ($what eq 'setup_cost') ? () : ($cust_pkg);
+
+ sprintf('%.2f', $part_pkg->$what(@arg) * $percent / 100 );
+
+}
+
+1;
diff --git a/FS/FS/part_event/Action/pkg_agent_credit.pm b/FS/FS/part_event/Action/pkg_agent_credit.pm
new file mode 100644
index 000000000..4bcee983b
--- /dev/null
+++ b/FS/FS/part_event/Action/pkg_agent_credit.pm
@@ -0,0 +1,39 @@
+package FS::part_event::Action::pkg_agent_credit;
+
+use strict;
+use base qw( FS::part_event::Action::pkg_referral_credit );
+
+sub description { 'Credit the agent a specific amount'; }
+
+#a little false laziness w/pkg_referral_credit
+sub do_action {
+ my( $self, $cust_pkg, $cust_event ) = @_;
+
+ my $cust_main = $self->cust_main($cust_pkg);
+
+ my $agent = $cust_main->agent;
+ return "No customer record for agent ". $agent->agent
+ unless $agent->agent_custnum;
+
+ my $agent_cust_main = $agent->agent_cust_main;
+ #? or return "No customer record for agent ". $agent->agent;
+
+ my $amount = $self->_calc_credit($cust_pkg);
+ return '' unless $amount > 0;
+
+ my $reasonnum = $self->option('reasonnum');
+
+ my $error = $agent_cust_main->credit(
+ $amount,
+ \$reasonnum,
+ 'eventnum' => $cust_event->eventnum,
+ 'addlinfo' => 'for customer #'. $cust_main->display_custnum.
+ ': '.$cust_main->name,
+ );
+ die "Error crediting customer ". $agent_cust_main->custnum.
+ " for agent commission: $error"
+ if $error;
+
+}
+
+1;
diff --git a/FS/FS/part_event/Action/pkg_agent_credit_pkg.pm b/FS/FS/part_event/Action/pkg_agent_credit_pkg.pm
new file mode 100644
index 000000000..b3e11817d
--- /dev/null
+++ b/FS/FS/part_event/Action/pkg_agent_credit_pkg.pm
@@ -0,0 +1,9 @@
+package FS::part_event::Action::pkg_agent_credit_pkg;
+
+use strict;
+use base qw( FS::part_event::Action::Mixin::credit_pkg
+ FS::part_event::Action::pkg_agent_credit );
+
+sub description { 'Credit the agent an amount based on the referred package'; }
+
+1;
diff --git a/FS/FS/part_event/Action/pkg_employee_credit.pm b/FS/FS/part_event/Action/pkg_employee_credit.pm
new file mode 100644
index 000000000..e4913a21f
--- /dev/null
+++ b/FS/FS/part_event/Action/pkg_employee_credit.pm
@@ -0,0 +1,44 @@
+package FS::part_event::Action::pkg_employee_credit;
+
+use strict;
+use base qw( FS::part_event::Action::pkg_referral_credit );
+use FS::Record qw(qsearchs);
+use FS::access_user;
+
+sub description { 'Credit the ordering employee a specific amount'; }
+
+#a little false laziness w/pkg_referral_credit
+sub do_action {
+ my( $self, $cust_pkg, $cust_event ) = @_;
+
+ my $cust_main = $self->cust_main($cust_pkg);
+
+ #yuck. this is why text $otaker is gone in 2.1
+ my $otaker = $cust_pkg->otaker;
+ my $employee = qsearchs('access_user', { 'username' => $otaker } )
+ or return "No employee for username $otaker";
+ return "No customer record for employee ". $employee->username
+ unless $employee->user_custnum;
+
+ my $employee_cust_main = $employee->user_cust_main;
+ #? or return "No customer record for employee ". $employee->username;
+
+ my $amount = $self->_calc_credit($cust_pkg);
+ return '' unless $amount > 0;
+
+ my $reasonnum = $self->option('reasonnum');
+
+ my $error = $employee_cust_main->credit(
+ $amount,
+ \$reasonnum,
+ 'eventnum' => $cust_event->eventnum,
+ 'addlinfo' => 'for customer #'. $cust_main->display_custnum.
+ ': '.$cust_main->name,
+ );
+ die "Error crediting customer ". $employee_cust_main->custnum.
+ " for employee commission: $error"
+ if $error;
+
+}
+
+1;
diff --git a/FS/FS/part_event/Action/pkg_employee_credit_pkg.pm b/FS/FS/part_event/Action/pkg_employee_credit_pkg.pm
new file mode 100644
index 000000000..e3b867fb2
--- /dev/null
+++ b/FS/FS/part_event/Action/pkg_employee_credit_pkg.pm
@@ -0,0 +1,9 @@
+package FS::part_event::Action::pkg_employee_credit_pkg;
+
+use strict;
+use base qw( FS::part_event::Action::Mixin::credit_pkg
+ FS::part_event::Action::pkg_employee_credit );
+
+sub description { 'Credit the ordering employee an amount based on the referred package'; }
+
+1;
diff --git a/FS/FS/part_event/Action/pkg_referral_credit.pm b/FS/FS/part_event/Action/pkg_referral_credit.pm
index 98d982066..e7c92d650 100644
--- a/FS/FS/part_event/Action/pkg_referral_credit.pm
+++ b/FS/FS/part_event/Action/pkg_referral_credit.pm
@@ -22,9 +22,8 @@ sub option_fields {
}
-#a little false laziness w/pkg_referral_credit_pkg
sub do_action {
- my( $self, $cust_pkg ) = @_;
+ my( $self, $cust_pkg, $cust_event ) = @_;
my $cust_main = $self->cust_main($cust_pkg);
@@ -36,14 +35,17 @@ sub do_action {
return 'Referring customer is cancelled'
if $referring_cust_main->status eq 'cancelled';
- my $amount = $self->_calc_referral_credit($cust_pkg);
+ my $amount = $self->_calc_credit($cust_pkg);
+ return '' unless $amount > 0;
+
my $reasonnum = $self->option('reasonnum');
my $error = $referring_cust_main->credit(
$amount,
\$reasonnum,
- 'addlinfo' =>
- 'for customer #'. $cust_main->display_custnum. ': '.$cust_main->name,
+ 'eventnum' => $cust_event->eventnum,
+ 'addlinfo' => 'for customer #'. $cust_main->display_custnum.
+ ': '.$cust_main->name,
);
die "Error crediting customer ". $cust_main->referral_custnum.
" for referral: $error"
@@ -51,7 +53,7 @@ sub do_action {
}
-sub _calc_referral_credit {
+sub _calc_credit {
my( $self, $cust_pkg ) = @_;
$self->option('amount');
diff --git a/FS/FS/part_event/Action/pkg_referral_credit_pkg.pm b/FS/FS/part_event/Action/pkg_referral_credit_pkg.pm
index eb9b5107c..667c4ce19 100644
--- a/FS/FS/part_event/Action/pkg_referral_credit_pkg.pm
+++ b/FS/FS/part_event/Action/pkg_referral_credit_pkg.pm
@@ -1,58 +1,9 @@
package FS::part_event::Action::pkg_referral_credit_pkg;
use strict;
-use base qw( FS::part_event::Action::pkg_referral_credit );
+use base qw( FS::part_event::Action::Mixin::credit_pkg
+ FS::part_event::Action::pkg_referral_credit );
sub description { 'Credit the referring customer an amount based on the referred package'; }
-#sub eventtable_hashref {
-# { 'cust_pkg' => 1 };
-#}
-
-sub option_fields {
- (
- 'reasonnum' => { 'label' => 'Credit reason',
- 'type' => 'select-reason',
- 'reason_class' => 'R',
- },
- 'percent' => { 'label' => 'Percent',
- 'type' => 'input-percentage',
- 'default' => '100',
- },
- 'what' => { 'label' => 'Of',
- 'type' => 'select',
- #also add some way to specify in the package def, no?
- 'options' => [ qw( base_recur_permonth ) ],
- 'labels' => { 'base_recur_permonth' => 'Base monthly fee', },
- },
- );
-
-}
-
-sub _calc_referral_credit {
- my( $self, $cust_pkg ) = @_;
-
- my $cust_main = $self->cust_main($cust_pkg);
-
- my $part_pkg = $cust_pkg->part_pkg;
-
- my $what = $self->option('what');
-
- #false laziness w/Condition/cust_payments_pkg.pm
- if ( $what eq 'base_recur_permonth' ) { #huh. yuck.
- if ( $part_pkg->freq !~ /^\d+$/ ) {
- die 'WARNING: Not crediting customer '. $cust_main->referral_custnum.
- ' for package '. $cust_pkg->pkgnum.
- ' ( customer '. $cust_pkg->custnum. ')'.
- ' - Referral credits not (yet) available for '.
- ' packages with '. $part_pkg->freq_pretty. ' frequency';
- }
- }
-
- my $percent = $self->option('percent');
-
- sprintf('%.2f', $part_pkg->$what($cust_pkg) * $percent / 100 );
-
-}
-
1;
diff --git a/FS/FS/part_event/Condition/balance.pm b/FS/FS/part_event/Condition/balance.pm
index 65670c030..3b8854ab8 100644
--- a/FS/FS/part_event/Condition/balance.pm
+++ b/FS/FS/part_event/Condition/balance.pm
@@ -40,7 +40,7 @@ sub condition_sql {
my $balance_sql = FS::cust_main->balance_sql;
- "$balance_sql > CAST( $over AS numeric )";
+ "$balance_sql > CAST( $over AS DECIMAL(10,2) )";
}
diff --git a/FS/FS/part_event/Condition/balance_age.pm b/FS/FS/part_event/Condition/balance_age.pm
index f1a970796..fc3461210 100644
--- a/FS/FS/part_event/Condition/balance_age.pm
+++ b/FS/FS/part_event/Condition/balance_age.pm
@@ -38,7 +38,7 @@ sub condition_sql {
my $balance_sql = FS::cust_main->balance_date_sql( $age );
- "$balance_sql > CAST( $over AS numeric )";
+ "$balance_sql > CAST( $over AS DECIMAL(10,2) )";
}
sub order_sql {
diff --git a/FS/FS/part_event/Condition/balance_under.pm b/FS/FS/part_event/Condition/balance_under.pm
index 9c7159011..2002c7018 100644
--- a/FS/FS/part_event/Condition/balance_under.pm
+++ b/FS/FS/part_event/Condition/balance_under.pm
@@ -34,7 +34,7 @@ sub condition_sql {
my $balance_sql = FS::cust_main->balance_sql;
- "$balance_sql <= CAST( $under AS numeric )";
+ "$balance_sql <= CAST( $under AS DECIMAL(10,2) )";
}
diff --git a/FS/FS/part_event/Condition/cust_bill_has_service.pm b/FS/FS/part_event/Condition/cust_bill_has_service.pm
index 91d75ddac..d85af261e 100644
--- a/FS/FS/part_event/Condition/cust_bill_has_service.pm
+++ b/FS/FS/part_event/Condition/cust_bill_has_service.pm
@@ -38,14 +38,16 @@ sub condition {
}
sub condition_sql {
- my( $class, $table ) = @_;
+ my( $class, $table, %opt ) = @_;
+
+ my $integer = $opt{'driver_name'} =~ /^mysql/ ? 'UNSIGNED INTEGER' : 'INTEGER';
my $servicenum = $class->condition_sql_option('has_service');
my $sql = qq| 0 < ( SELECT COUNT(cs.svcpart)
FROM cust_bill_pkg cbp, cust_svc cs
WHERE cbp.invnum = cust_bill.invnum
AND cs.pkgnum = cbp.pkgnum
- AND cs.svcpart = CAST( $servicenum AS integer )
+ AND cs.svcpart = CAST( $servicenum AS $integer )
)
|;
return $sql;
diff --git a/FS/FS/part_event/Condition/cust_bill_owed.pm b/FS/FS/part_event/Condition/cust_bill_owed.pm
index 0fd992282..d8c77c777 100644
--- a/FS/FS/part_event/Condition/cust_bill_owed.pm
+++ b/FS/FS/part_event/Condition/cust_bill_owed.pm
@@ -48,7 +48,7 @@ sub condition_sql {
my $owed_sql = FS::cust_bill->owed_sql;
- "$owed_sql > CAST( $over AS numeric )";
+ "$owed_sql > CAST( $over AS DECIMAL(10,2) )";
}
1;
diff --git a/FS/FS/part_event/Condition/cust_bill_owed_under.pm b/FS/FS/part_event/Condition/cust_bill_owed_under.pm
index a0bf92f27..4eb6439b6 100644
--- a/FS/FS/part_event/Condition/cust_bill_owed_under.pm
+++ b/FS/FS/part_event/Condition/cust_bill_owed_under.pm
@@ -43,7 +43,7 @@ sub condition_sql {
my $owed_sql = FS::cust_bill->owed_sql;
- "$owed_sql <= CAST( $under AS numeric )";
+ "$owed_sql <= CAST( $under AS DECIMAL(10,2) )";
}
1;
diff --git a/FS/FS/part_event/Condition/every.pm b/FS/FS/part_event/Condition/every.pm
index 3408b0aa9..1910674f8 100644
--- a/FS/FS/part_event/Condition/every.pm
+++ b/FS/FS/part_event/Condition/every.pm
@@ -50,7 +50,7 @@ sub condition {
or die "unparsable retry_delay: $retry_delay";
my $date_after = $time - $1 * $after{$2};
- my $sth = dbh->prepare("$sql AND date > ?") # AND status = 'failed' "
+ my $sth = dbh->prepare("$sql AND _date > ?") # AND status = 'failed' "
or die dbh->errstr. " preparing: $sql";
$sth->execute($self->eventpart, $tablenum, $date_after)
or die $sth->errstr. " executing: $sql";
diff --git a/FS/FS/part_event_condition.pm b/FS/FS/part_event_condition.pm
index d13e84927..32f19a3ae 100644
--- a/FS/FS/part_event_condition.pm
+++ b/FS/FS/part_event_condition.pm
@@ -2,7 +2,7 @@ package FS::part_event_condition;
use strict;
use vars qw( @ISA $DEBUG @SKIP_CONDITION_SQL );
-use FS::UID qw(dbh);
+use FS::UID qw( dbh driver_name );
use FS::Record qw( qsearch qsearchs );
use FS::option_Common;
use FS::part_event; #for order_conditions_sql...
@@ -285,7 +285,9 @@ sub where_conditions_sql {
map {
my $conditionname = $_;
my $coderef = $conditions{$conditionname}->{condition_sql};
- my $sql = &$coderef( $eventtable, 'time'=>$time );
+ my $sql = &$coderef( $eventtable, 'time' => $time,
+ 'driver_name' => driver_name(),
+ );
die "$coderef is not a CODEREF" unless ref($coderef) eq 'CODE';
"( cond_$conditionname.conditionname IS NULL OR $sql )";
}
diff --git a/FS/FS/part_export.pm b/FS/FS/part_export.pm
index 16aad6dcd..588606dc1 100644
--- a/FS/FS/part_export.pm
+++ b/FS/FS/part_export.pm
@@ -226,6 +226,17 @@ sub export_svc {
qsearch('export_svc', { 'exportnum' => $self->exportnum } );
}
+=item export_device
+
+Returns a list of associated FS::export_device records.
+
+=cut
+
+sub export_device {
+ my $self = shift;
+ qsearch('export_device', { 'exportnum' => $self->exportnum } );
+}
+
=item part_export_option
Returns all options as FS::part_export_option objects (see
@@ -365,6 +376,15 @@ Adds a list of web elements to ARRAYREF specific to this export and SVC_OBJECT.
The elements are displayed in the UI to lead the the operator to external
configuration, monitoring, and similar tools.
+=item export_getsettings SVC_OBJECT SETTINGS_HASHREF DEFAUTS_HASHREF
+
+Adds a hashref of settings to SETTINGSREF specific to this export and
+SVC_OBJECT. The elements can be displayed in the UI on the service view.
+
+DEFAULTSREF is a hashref with the same keys where true values indicate the
+setting is a default (and thus can be displayed in the UI with less emphasis,
+or hidden by default).
+
=cut
=back
diff --git a/FS/FS/part_export/communigate_pro.pm b/FS/FS/part_export/communigate_pro.pm
index ecb378090..7f5cece59 100644
--- a/FS/FS/part_export/communigate_pro.pm
+++ b/FS/FS/part_export/communigate_pro.pm
@@ -1,35 +1,43 @@
package FS::part_export::communigate_pro;
-use vars qw(@ISA %info %options);
+use strict;
+use vars qw(@ISA %info %options %quotas $DEBUG);
+use Data::Dumper;
use Tie::IxHash;
use FS::part_export;
use FS::queue;
@ISA = qw(FS::part_export);
+$DEBUG = 1;
+
tie %options, 'Tie::IxHash',
- 'port' => { label=>'Port number', default=>'106', },
- 'login' => { label=>'The administrator account name. The name can contain a domain part.', },
- 'password' => { label=>'The administrator account password.', },
- 'accountType' => { label=>'Type for newly-created accounts',
- type=>'select',
- options=>[qw( MultiMailbox TextMailbox MailDirMailbox )],
- default=>'MultiMailbox',
- },
- 'externalFlag' => { label=> 'Create accounts with an external (visible for legacy mailers) INBOX.',
- type=>'checkbox',
- },
- 'AccessModes' => { label=>'Access modes',
- default=>'Mail POP IMAP PWD WebMail WebSite',
- },
+ 'port' => { label =>'Port number', default=>'106', },
+ 'login' => { label =>'The administrator account name. The name can contain a domain part.', },
+ 'password' => { label =>'The administrator account password.', },
+ 'accountType' => { label => 'Type for newly-created accounts (default when not specified in service)',
+ type => 'select',
+ options => [qw(MultiMailbox TextMailbox MailDirMailbox AGrade BGrade CGrade)],
+ default => 'MultiMailbox',
+ },
+ 'externalFlag' => { label => 'Create accounts with an external (visible for legacy mailers) INBOX.',
+ type => 'checkbox',
+ },
+ 'AccessModes' => { label => 'Access modes (default when not specified in service)',
+ default => 'Mail POP IMAP PWD WebMail WebSite',
+ },
+ 'create_domain' => { label => 'Domain creation API call',
+ type => 'select',
+ options => [qw( CreateDomain CreateSharedDomain )],
+ }
;
%info = (
- 'svc' => 'svc_acct',
- 'desc' => 'Real-time export to a CommuniGate Pro mail server',
+ 'svc' => [qw( svc_acct svc_domain svc_forward svc_mailinglist )],
+ 'desc' => 'Real-time export of accounts, domains, mail forwards and mailing lists to a CommuniGate Pro mail server',
'options' => \%options,
'notes' => <<'END'
-Real time export to a
+Real time export of accounts, domains, mail forwards and mailing lists to a
<a href="http://www.stalker.com/CommuniGatePro/">CommuniGate Pro</a>
mail server. The
<a href="http://www.stalker.com/CGPerl/">CommuniGate Pro Perl Interface</a>
@@ -37,6 +45,13 @@ must be installed as CGP::CLI.
END
);
+%quotas = (
+ 'quota' => 'MaxAccountSize',
+ 'file_quota' => 'MaxWebSize',
+ 'file_maxnum' => 'MaxWebFiles',
+ 'file_maxsize' => 'MaxFileSize',
+);
+
sub rebless { shift; }
sub export_username {
@@ -45,82 +60,727 @@ sub export_username {
}
sub _export_insert {
+ my( $self, $svc_x ) = (shift, shift);
+
+ my $table = $svc_x->table;
+ my $method = "_export_insert_$table";
+ $self->$method($svc_x, @_);
+}
+
+sub _export_insert_svc_acct {
my( $self, $svc_acct ) = (shift, shift);
- my @options = ( $svc_acct->svcnum, 'CreateAccount',
- 'accountName' => $self->export_username($svc_acct),
- 'accountType' => $self->option('accountType'),
- 'AccessModes' => $self->option('AccessModes'),
+
+ my %settings = (
+ 'AccessModes' => [ split(' ', ( $svc_acct->cgp_accessmodes
+ || $self->option('AccessModes') )
+ )
+ ],
'RealName' => $svc_acct->finger,
'Password' => $svc_acct->_password,
+ map { $quotas{$_} => $svc_acct->$_() }
+ grep $svc_acct->$_(), keys %quotas
+ );
+ #phase 2: pwdallowed, passwordrecovery, allowed mail rules,
+ # RPOP modifications, accepts mail to all, add trailer to sent mail
+ #phase 3: archive messages, mailing lists
+
+ my @options = ( 'CreateAccount',
+ 'accountName' => $self->export_username($svc_acct),
+ 'accountType' => ( $svc_acct->cgp_type
+ || $self->option('accountType') ),
+ 'settings' => \%settings
);
- push @options, 'MaxAccountSize' => $svc_acct->quota if $svc_acct->quota;
+
push @options, 'externalFlag' => $self->option('externalFlag')
if $self->option('externalFlag');
- $self->communigate_pro_queue( @options );
+ #let's do the create realtime too, for much the same reasons, and to avoid
+ #pain of trying to queue w/dep the prefs & aliases
+ eval { $self->communigate_pro_runcommand( @options ) };
+ return $@ if $@;
+
+ #preferences
+ my %prefs = ();
+ $prefs{'DeleteMode'} = $svc_acct->cgp_deletemode if $svc_acct->cgp_deletemode;
+ $prefs{'EmptyTrash'} = $svc_acct->cgp_emptytrash if $svc_acct->cgp_emptytrash;
+ #phase 2: language, time zone, layout, pronto style, send read receipts
+ if ( keys %prefs ) {
+ my $pref_err = $self->communigate_pro_queue( $svc_acct->svcnum,
+ 'UpdateAccountPrefs',
+ $self->export_username($svc_acct),
+ %prefs,
+ );
+ warn "WARNING: error queueing UpdateAccountPrefs job: $pref_err"
+ if $pref_err;
+ }
+
+ #aliases
+ if ( $svc_acct->cgp_aliases ) {
+ my $alias_err = $self->communigate_pro_queue( $svc_acct->svcnum,
+ 'SetAccountAliases',
+ $self->export_username($svc_acct),
+ [ split(/\s*[,\s]\s*/, $svc_acct->cgp_aliases) ],
+ );
+ warn "WARNING: error queueing SetAccountAliases job: $alias_err"
+ if $alias_err;
+ }
+
+ '';
+
+}
+
+sub _export_insert_svc_domain {
+ my( $self, $svc_domain ) = (shift, shift);
+
+ my $create = $self->option('create_domain') || 'CreateDomain';
+
+ my %settings = (
+ 'DomainAccessModes' => [ split(' ', $svc_domain->cgp_accessmodes ) ],
+ );
+ $settings{'AccountsLimit'} = $svc_domain->max_accounts
+ if $svc_domain->max_accounts;
+ $settings{'AdminDomainName'} = $svc_domain->parent_svc_x->domain
+ if $svc_domain->parent_svcnum;
+
+ my @options = ( $create, $svc_domain->domain, \%settings );
+
+ eval { $self->communigate_pro_runcommand( @options ) };
+ return $@ if $@;
+
+ #aliases
+ if ( $svc_domain->cgp_aliases ) {
+ my $alias_err = $self->communigate_pro_queue( $svc_domain->svcnum,
+ 'SetDomainAliases',
+ $svc_domain->domain,
+ split(/\s*[,\s]\s*/, $svc_domain->cgp_aliases),
+ );
+ warn "WARNING: error queueing SetDomainAliases job: $alias_err"
+ if $alias_err;
+ }
+
+ #account defaults
+ my $def_err = $self->communigate_pro_queue( $svc_domain->svcnum,
+ 'SetAccountDefaults',
+ $svc_domain->domain,
+ 'PWDAllowed' =>($svc_domain->acct_def_password_selfchange ? 'YES':'NO'),
+ 'PasswordRecovery' => ($svc_domain->acct_def_password_recover ? 'YES':'NO'),
+ 'AccessModes' => $svc_domain->acct_def_cgp_accessmodes,
+ 'MaxAccountSize' => $svc_domain->acct_def_quota,
+ 'MaxWebSize' => $svc_domain->acct_def_file_quota,
+ 'MaxWebFile' => $svc_domain->acct_def_file_maxnum,
+ 'MaxFileSize' => $svc_domain->acct_def_file_maxsize,
+ );
+ warn "WARNING: error queueing SetAccountDefaults job: $def_err"
+ if $def_err;
+
+ #account defaults prefs
+ my $pref_err = $self->communigate_pro_queue( $svc_domain->svcnum,
+ 'SetAccountDefaultPrefs',
+ $svc_domain->domain,
+ 'DeleteMode' => $svc_domain->acct_def_cgp_deletemode,
+ 'EmptyTrash' => $svc_domain->acct_def_cgp_emptytrash,
+ );
+ warn "WARNING: error queueing SetAccountDefaultPrefs job: $pref_err"
+ if $pref_err;
+
+ '';
+
+}
+
+sub _export_insert_svc_forward {
+ my( $self, $svc_forward ) = (shift, shift);
+
+ my $src = $svc_forward->src || $svc_forward->srcsvc_acct->email;
+ my $dst = $svc_forward->dst || $svc_forward->dstsvc_acct->email;
+
+ #real-time here, presuming CGP does some dup detection?
+ eval { $self->communigate_pro_runcommand( 'CreateForwarder', $src, $dst); };
+ return $@ if $@;
+
+ '';
+}
+
+sub _export_insert_svc_mailinglist {
+ my( $self, $svc_mlist ) = (shift, shift);
+
+ my @members = map $_->email_address,
+ $svc_mlist->mailinglist->mailinglistmember;
+
+ #real-time here, presuming CGP does some dup detection
+ eval { $self->communigate_pro_runcommand(
+ 'CreateGroup',
+ $svc_mlist->username.'@'.$svc_mlist->domain,
+ { 'RealName' => $svc_mlist->listname,
+ 'SetReplyTo' => ( $svc_mlist->reply_to ? 'YES' : 'NO' ),
+ 'RemoveAuthor' => ( $svc_mlist->remove_from ? 'YES' : 'NO' ),
+ 'RejectAuto' => ( $svc_mlist->reject_auto ? 'YES' : 'NO' ),
+ 'RemoveToAndCc' => ( $svc_mlist->remove_to_and_cc ? 'YES' : 'NO' ),
+ 'Members' => \@members,
+ }
+ );
+ };
+ return $@ if $@;
+
+ '';
+
}
sub _export_replace {
my( $self, $new, $old ) = (shift, shift, shift);
- return "can't (yet) change username with CommuniGate Pro"
- if $old->username ne $new->username;
- return "can't (yet) change domain with CommuniGate Pro"
- if $self->export_username($old) ne $self->export_username($new);
- return "can't (yet) change GECOS with CommuniGate Pro"
+
+ my $table = $new->table;
+ my $method = "_export_replace_$table";
+ $self->$method($new, $old, @_);
+}
+
+sub _export_replace_svc_acct {
+ my( $self, $new, $old ) = (shift, shift, shift);
+
+ #let's just do the rename part realtime rather than trying to queue
+ #w/dependencies. we don't want FS winding up out-of-sync with the wrong
+ #username and a queued job anyway. right??
+ if ( $self->export_username($old) ne $self->export_username($new) ) {
+ eval { $self->communigate_pro_runcommand(
+ 'RenameAccount',
+ $self->export_username($old),
+ $self->export_username($new),
+ ) };
+ return $@ if $@;
+ }
+
+ if ( $new->_password ne $old->_password
+ && '*SUSPENDED* '.$old->_password ne $new->_password
+ ) {
+ $self->communigate_pro_queue( $new->svcnum, 'SetAccountPassword',
+ $self->export_username($new), $new->_password
+ );
+ }
+
+ my %settings = ();
+
+ $settings{'RealName'} = $new->finger
if $old->finger ne $new->finger;
- return "can't (yet) change quota with CommuniGate Pro"
- if $old->quota ne $new->quota;
- return '' unless $old->username ne $new->username
- || $old->_password ne $new->_password
- || $old->finger ne $new->finger
- || $old->quota ne $new->quota;
+ $settings{$quotas{$_}} = $new->$_()
+ foreach grep $old->$_() ne $new->$_(), keys %quotas;
+ $settings{'accountType'} = $new->cgp_type
+ if $old->cgp_type ne $new->cgp_type;
+ $settings{'AccessModes'} = $new->cgp_accessmodes
+ if $old->cgp_accessmodes ne $new->cgp_accessmodes
+ || $old->cgp_type ne $new->cgp_type;
+
+ #phase 2: pwdallowed, passwordrecovery, allowed mail rules,
+ # RPOP modifications, accepts mail to all, add trailer to sent mail
+ #phase 3: archive messages, mailing lists
- return '' if '*SUSPENDED* '. $old->_password eq $new->_password;
+ if ( keys %settings ) {
+ my $error = $self->communigate_pro_queue(
+ $new->svcnum,
+ 'UpdateAccountSettings',
+ $self->export_username($new),
+ %settings,
+ );
+ return $error if $error;
+ }
- #my $err_or_queue = $self->communigate_pro_queue( $new->svcnum,'RenameAccount',
- # $old->email, $new->email );
- #return $err_or_queue unless ref($err_or_queue);
- #my $jobnum = $err_or_queue->jobnum;
+ #preferences
+ my %prefs = ();
+ $prefs{'DeleteMode'} = $new->cgp_deletemode
+ if $old->cgp_deletemode ne $new->cgp_deletemode;
+ $prefs{'EmptyTrash'} = $new->cgp_emptytrash
+ if $old->cgp_emptytrash ne $new->cgp_emptytrash;
+ #phase 2: language, time zone, layout, pronto style, send read receipts
+ if ( keys %prefs ) {
+ my $pref_err = $self->communigate_pro_queue( $new->svcnum,
+ 'UpdateAccountPrefs',
+ $self->export_username($new),
+ %prefs,
+ );
+ warn "WARNING: error queueing UpdateAccountPrefs job: $pref_err"
+ if $pref_err;
+ }
- $self->communigate_pro_queue( $new->svcnum, 'SetAccountPassword',
- $self->export_username($new), $new->_password )
- if $new->_password ne $old->_password;
+ if ( $old->cgp_aliases ne $new->cgp_aliases ) {
+ my $error = $self->communigate_pro_queue(
+ $new->svcnum,
+ 'SetAccountAliases',
+ $self->export_username($new),
+ [ split(/\s*[,\s]\s*/, $new->cgp_aliases) ],
+ );
+ return $error if $error;
+ }
+
+ '';
+
+}
+
+sub _export_replace_svc_domain {
+ my( $self, $new, $old ) = (shift, shift, shift);
+
+ if ( $old->domain ne $new->domain ) {
+ my $error = $self->communigate_pro_queue( $new->svcnum, 'RenameDomain',
+ $old->domain, $new->domain,
+ );
+ return $error if $error;
+ }
+ my %settings = ();
+ $settings{'AccountsLimit'} = $new->max_accounts
+ if $old->max_accounts ne $new->max_accounts;
+ $settings{'DomainAccessModes'} = $new->cgp_accessmodes
+ if $old->cgp_accessmodes ne $new->cgp_accessmodes;
+ $settings{'AdminDomainName'} =
+ $new->parent_svcnum ? $new->parent_svc_x->domain : ''
+ if $old->parent_svcnum != $new->parent_svcnum;
+
+ if ( keys %settings ) {
+ my $error = $self->communigate_pro_queue( $new->svcnum,
+ 'UpdateDomainSettings',
+ $new->domain,
+ %settings,
+ );
+ return $error if $error;
+ }
+
+ if ( $old->cgp_aliases ne $new->cgp_aliases ) {
+ my $error = $self->communigate_pro_queue( $new->svcnum,
+ 'SetDomainAliases',
+ $new->domain,
+ split(/\s*[,\s]\s*/, $new->cgp_aliases),
+ );
+ return $error if $error;
+ }
+
+ #below this identical to insert... any value to doing an Update here?
+ #not seeing any big one... i guess it would be nice to avoid the update
+ #when things haven't changed
+
+ #account defaults
+ my $def_err = $self->communigate_pro_queue( $new->svcnum,
+ 'SetAccountDefaults',
+ $new->domain,
+ 'PWDAllowed' => ( $new->acct_def_password_selfchange ? 'YES' : 'NO' ),
+ 'PasswordRecovery' => ( $new->acct_def_password_recover ? 'YES' : 'NO' ),
+ 'AccessModes' => $new->acct_def_cgp_accessmodes,
+ 'MaxAccountSize' => $new->acct_def_quota,
+ 'MaxWebSize' => $new->acct_def_file_quota,
+ 'MaxWebFile' => $new->acct_def_file_maxnum,
+ 'MaxFileSize' => $new->acct_def_file_maxsize,
+ );
+ warn "WARNING: error queueing SetAccountDefaults job: $def_err"
+ if $def_err;
+
+ #account defaults prefs
+ my $pref_err = $self->communigate_pro_queue( $new->svcnum,
+ 'SetAccountDefaultPrefs',
+ $new->domain,
+ 'DeleteMode' => $new->acct_def_cgp_deletemode,
+ 'EmptyTrash' => $new->acct_def_cgp_emptytrash,
+ );
+ warn "WARNING: error queueing SetAccountDefaultPrefs job: $pref_err"
+ if $pref_err;
+
+ '';
+}
+
+sub _export_replace_svc_forward {
+ my( $self, $new, $old ) = (shift, shift, shift);
+
+ my $osrc = $old->src || $old->srcsvc_acct->email;
+ my $nsrc = $new->src || $new->srcsvc_acct->email;
+ my $odst = $old->dst || $old->dstsvc_acct->email;
+ my $ndst = $new->dst || $new->dstsvc_acct->email;
+
+ if ( $odst ne $ndst ) {
+
+ #no change command, so delete and create (real-time)
+ eval { $self->communigate_pro_runcommand('DeleteForwarder', $osrc) };
+ return $@ if $@;
+ eval { $self->communigate_pro_runcommand('CreateForwarder', $nsrc, $ndst)};
+ return $@ if $@;
+
+ } elsif ( $osrc ne $nsrc ) {
+
+ #real-time here, presuming CGP does some dup detection?
+ eval { $self->communigate_pro_runcommand( 'RenameForwarder', $osrc, $nsrc)};
+ return $@ if $@;
+
+ } else {
+ warn "communigate replace called for svc_forward with no changes\n";#confess
+ }
+
+ '';
+}
+
+sub _export_replace_svc_mailinglist {
+ my( $self, $new, $old ) = (shift, shift, shift);
+
+ my $oldGroupName = $old->username.'@'.$old->domain;
+ my $newGroupName = $new->username.'@'.$new->domain;
+
+ if ( $oldGroupName ne $newGroupName ) {
+ eval { $self->communigate_pro_runcommand(
+ 'RenameGroup', $oldGroupName, $newGroupName ); };
+ return $@ if $@;
+ }
+
+ my @members = map $_->email_address,
+ $new->mailinglist->mailinglistmember;
+
+ #real-time here, presuming CGP does some dup detection
+ eval { $self->communigate_pro_runcommand(
+ 'SetGroup', $newGroupName,
+ { 'RealName' => $new->listname,
+ 'SetReplyTo' => ( $new->reply_to ? 'YES' : 'NO' ),
+ 'RemoveAuthor' => ( $new->remove_from ? 'YES' : 'NO' ),
+ 'RejectAuto' => ( $new->reject_auto ? 'YES' : 'NO' ),
+ 'RemoveToAndCc' => ( $new->remove_to_and_cc ? 'YES' : 'NO' ),
+ 'Members' => \@members,
+ }
+ );
+ };
+ return $@ if $@;
+
+ '';
}
sub _export_delete {
+ my( $self, $svc_x ) = (shift, shift);
+
+ my $table = $svc_x->table;
+ my $method = "_export_delete_$table";
+ $self->$method($svc_x, @_);
+}
+
+sub _export_delete_svc_acct {
my( $self, $svc_acct ) = (shift, shift);
+
$self->communigate_pro_queue( $svc_acct->svcnum, 'DeleteAccount',
$self->export_username($svc_acct),
);
}
+sub _export_delete_svc_domain {
+ my( $self, $svc_domain ) = (shift, shift);
+
+ $self->communigate_pro_queue( $svc_domain->svcnum, 'DeleteDomain',
+ $svc_domain->domain,
+ #XXX turn on force option for domain deletion?
+ );
+}
+
+sub _export_delete_svc_forward {
+ my( $self, $svc_forward ) = (shift, shift);
+
+ $self->communigate_pro_queue( $svc_forward->svcnum, 'DeleteForwarder',
+ ($svc_forward->src || $svc_forward->srcsvc_acct->email),
+ );
+}
+
+sub _export_delete_svc_mailinglist {
+ my( $self, $svc_mailinglist ) = (shift, shift);
+
+ #real-time here, presuming CGP does some dup detection
+ eval { $self->communigate_pro_runcommand(
+ 'DeleteGroup',
+ $svc_mailinglist->username.'@'.$svc_mailinglist->domain,
+ );
+ };
+ return $@ if $@;
+
+ '';
+
+}
+
sub _export_suspend {
+ my( $self, $svc_x ) = (shift, shift);
+
+ my $table = $svc_x->table;
+ my $method = "_export_suspend_$table";
+ $self->$method($svc_x, @_);
+
+}
+
+sub _export_suspend_svc_acct {
my( $self, $svc_acct ) = (shift, shift);
- $self->communigate_pro_queue( $svc_acct->svcnum, 'UpdateAccountSettings',
- 'accountName' => $self->export_username($svc_acct),
+
+ #XXX is this the desired suspnsion action?
+
+ $self->communigate_pro_queue(
+ $svc_acct->svcnum,
+ 'UpdateAccountSettings',
+ $self->export_username($svc_acct),
'AccessModes' => 'Mail',
);
+
+}
+
+sub _export_suspend_svc_domain {
+ my( $self, $svc_domain) = (shift, shift);
+
+ #XXX domain operations
+ '';
+
}
sub _export_unsuspend {
+ my( $self, $svc_x ) = (shift, shift);
+
+ my $table = $svc_x->table;
+ my $method = "_export_unsuspend_$table";
+ $self->$method($svc_x, @_);
+
+}
+
+sub _export_unsuspend_svc_acct {
my( $self, $svc_acct ) = (shift, shift);
- $self->communigate_pro_queue( $svc_acct->svcnum, 'UpdateAccountSettings',
- 'accountName' => $self->export_username($svc_acct),
- 'AccessModes' => $self->option('AccessModes'),
+
+ $self->communigate_pro_queue(
+ $svc_acct->svcnum,
+ 'UpdateAccountSettings',
+ $self->export_username($svc_acct),
+ 'AccessModes' => ( $svc_acct->cgp_accessmodes
+ || $self->option('AccessModes') ),
+ );
+
+}
+
+sub _export_unsuspend_svc_domain {
+ my( $self, $svc_domain) = (shift, shift);
+
+ #XXX domain operations
+ '';
+
+}
+
+sub export_mailinglistmember_insert {
+ my( $self, $svc_mailinglist, $mailinglistmember ) = (shift, shift, shift);
+ $svc_mailinglist->replace();
+}
+
+sub export_mailinglistmember_replace {
+ my( $self, $svc_mailinglist, $new, $old ) = (shift, shift, shift, shift);
+ die "no way to do this from the UI right now";
+}
+
+sub export_mailinglistmember_delete {
+ my( $self, $svc_mailinglist, $mailinglistmember ) = (shift, shift, shift);
+ $svc_mailinglist->replace();
+}
+
+sub export_getsettings {
+ my($self, $svc_x) = (shift, shift);
+
+ my $table = $svc_x->table;
+ my $method = "export_getsettings_$table";
+
+ $self->can($method) ? $self->$method($svc_x, @_) : '';
+
+}
+
+sub export_getsettings_svc_domain {
+ my($self, $svc_domain, $settingsref, $defaultref ) = @_;
+
+ my $settings = eval { $self->communigate_pro_runcommand(
+ 'GetDomainSettings',
+ $svc_domain->domain
+ ) };
+ return $@ if $@;
+
+ my $effective_settings = eval { $self->communigate_pro_runcommand(
+ 'GetDomainEffectiveSettings',
+ $svc_domain->domain
+ ) };
+ return $@ if $@;
+
+ my $acct_defaults = eval { $self->communigate_pro_runcommand(
+ 'GetAccountDefaults',
+ $svc_domain->domain
+ ) };
+ return $@ if $@;
+
+ my $acct_defaultprefs = eval { $self->communigate_pro_runcommand(
+ 'GetAccountDefaultPrefs',
+ $svc_domain->domain
+ ) };
+ return $@ if $@;
+
+ %$effective_settings = (
+ %$effective_settings,
+ ( map { ("Acct. Default $_" => $acct_defaults->{$_}); }
+ keys(%$acct_defaults)
+ ),
+ ( map { ("Acct. Default $_" => $acct_defaultprefs->{$_}); } #diff label??
+ keys(%$acct_defaultprefs)
+ ),
);
+ %$settings = (
+ %$settings,
+ ( map { ("Acct. Default $_" => $acct_defaults->{$_}); }
+ keys(%$acct_defaults)
+ ),
+ ( map { ("Acct. Default $_" => $acct_defaultprefs->{$_}); } #diff label??
+ keys(%$acct_defaultprefs)
+ ),
+ );
+
+ #aliases too
+ my $aliases = eval { $self->communigate_pro_runcommand(
+ 'GetDomainAliases',
+ $svc_domain->domain
+ ) };
+ return $@ if $@;
+
+ $effective_settings->{'Aliases'} = join(', ', @$aliases);
+ $settings->{'Aliases'} = join(', ', @$aliases);
+
+
+ #false laziness w/below
+
+ my %defaults = map { $_ => 1 }
+ grep !exists(${$settings}{$_}), keys %$effective_settings;
+
+ foreach my $key ( grep ref($effective_settings->{$_}),
+ keys %$effective_settings )
+ {
+ my $value = $effective_settings->{$key};
+ if ( ref($value) eq 'ARRAY' ) {
+ $effective_settings->{$key} = join(' ', @$value);
+ } else {
+ #XXX
+ warn "serializing ". ref($value). " for table display not yet handled";
+ }
+ }
+
+ %{$settingsref} = %$effective_settings;
+ %{$defaultref} = %defaults;
+
+ '';
+}
+
+sub export_getsettings_svc_acct {
+ my($self, $svc_acct, $settingsref, $defaultref ) = @_;
+
+ my $settings = eval { $self->communigate_pro_runcommand(
+ 'GetAccountSettings',
+ $svc_acct->email
+ ) };
+ return $@ if $@;
+
+ delete($settings->{'Password'});
+
+ my $effective_settings = eval { $self->communigate_pro_runcommand(
+ 'GetAccountEffectiveSettings',
+ $svc_acct->email
+ ) };
+ return $@ if $@;
+
+ delete($effective_settings->{'Password'});
+
+ #prefs/effectiveprefs too
+
+ my $prefs = eval { $self->communigate_pro_runcommand(
+ 'GetAccountPrefs',
+ $svc_acct->email
+ ) };
+ return $@ if $@;
+
+ my $effective_prefs = eval { $self->communigate_pro_runcommand(
+ 'GetAccountEffectivePrefs',
+ $svc_acct->email
+ ) };
+ return $@ if $@;
+
+ %$effective_settings = ( %$effective_settings,
+ map { ("Pref $_" => $effective_prefs->{$_}); }
+ keys(%$effective_prefs)
+ );
+ %$settings = ( %$settings,
+ map { ("Pref $_" => $prefs->{$_}); }
+ keys(%$prefs)
+ );
+
+ #aliases too
+
+ my $aliases = eval { $self->communigate_pro_runcommand(
+ 'GetAccountAliases',
+ $svc_acct->email
+ ) };
+ return $@ if $@;
+
+ $effective_settings->{'Aliases'} = join(', ', @$aliases);
+ $settings->{'Aliases'} = join(', ', @$aliases);
+
+ #false laziness w/above
+
+ my %defaults = map { $_ => 1 }
+ grep !exists(${$settings}{$_}), keys %$effective_settings;
+
+ foreach my $key ( grep ref($effective_settings->{$_}),
+ keys %$effective_settings )
+ {
+ my $value = $effective_settings->{$key};
+ if ( ref($value) eq 'ARRAY' ) {
+ $effective_settings->{$key} = join(' ', @$value);
+ } else {
+ #XXX
+ warn "serializing ". ref($value). " for table display not yet handled";
+ }
+ }
+
+ %{$settingsref} = %$effective_settings;
+ %{$defaultref} = %defaults;
+
+ '';
+
+}
+
+sub export_getsettings_svc_mailinglist {
+ my($self, $svc_mailinglist, $settingsref, $defaultref ) = @_;
+
+ my $settings = eval { $self->communigate_pro_runcommand(
+ 'GetGroup',
+ $svc_mailinglist->username.'@'.$svc_mailinglist->domain,
+ ) };
+ return $@ if $@;
+
+ $settings->{'Members'} = join(', ', @{ $settings->{'Members'} } );
+
+ %{$settingsref} = %$settings;
+
+ '';
}
sub communigate_pro_queue {
my( $self, $svcnum, $method ) = (shift, shift, shift);
- my @kludge_methods = qw(CreateAccount UpdateAccountSettings);
- my $sub = 'communigate_pro_command';
- $sub = $method if grep { $method eq $_ } @kludge_methods;
+ my $jobnum = ''; #don't actually care
+ $self->communigate_pro_queue_dep( \$jobnum, $svcnum, $method, @_);
+}
+
+sub communigate_pro_queue_dep {
+ my( $self, $jobnumref, $svcnum, $method ) = splice(@_,0,4);
+
+ my %kludge_methods = (
+ #'CreateAccount' => 'CreateAccount',
+ 'UpdateAccountSettings' => 'UpdateAccountSettings',
+ 'UpdateAccountPrefs' => 'cp_Scalar_Hash',
+ #'CreateDomain' => 'cp_Scalar_Hash',
+ #'CreateSharedDomain' => 'cp_Scalar_Hash',
+ 'UpdateDomainSettings' => 'cp_Scalar_settingsHash',
+ 'SetDomainAliases' => 'cp_Scalar_Array',
+ 'SetAccountDefaults' => 'cp_Scalar_settingsHash',
+ 'UpdateAccountDefaults' => 'cp_Scalar_settingsHash',
+ 'SetAccountDefaultPrefs' => 'cp_Scalar_settingsHash',
+ 'UpdateAccountDefaultPrefs' => 'cp_Scalar_settingsHash',
+ );
+ my $sub = exists($kludge_methods{$method})
+ ? $kludge_methods{$method}
+ : 'communigate_pro_command';
+
my $queue = new FS::queue {
'svcnum' => $svcnum,
'job' => "FS::part_export::communigate_pro::$sub",
};
- $queue->insert(
+ my $error = $queue->insert(
$self->machine,
$self->option('port'),
$self->option('login'),
@@ -128,31 +788,76 @@ sub communigate_pro_queue {
$method,
@_,
);
+ $$jobnumref = $queue->jobnum unless $error;
+ return $error;
}
-sub CreateAccount {
- my( $machine, $port, $login, $password, $method, %args ) = @_;
- my $accountName = delete $args{'accountName'};
- my $accountType = delete $args{'accountType'};
- my $externalFlag = delete $args{'externalFlag'};
- $args{'AccessModes'} = [ split(' ', $args{'AccessModes'}) ];
- my @args = ( accountName => $accountName,
- accountType => $accountType,
- settings => \%args,
- );
- #externalFlag => $externalFlag,
- push @args, externalFlag => $externalFlag if $externalFlag;
+sub communigate_pro_runcommand {
+ my( $self, $method ) = (shift, shift);
+
+ communigate_pro_command(
+ $self->machine,
+ $self->option('port'),
+ $self->option('login'),
+ $self->option('password'),
+ $method,
+ @_,
+ );
+}
+
+#XXX one sub per arg prototype is lame. more magic? i suppose queue needs
+# to store data strctures properly instead of just an arg list. right.
+
+sub cp_Scalar_Hash {
+ my( $machine, $port, $login, $password, $method, $scalar, %hash ) = @_;
+ my @args = ( $scalar, \%hash );
+ communigate_pro_command( $machine, $port, $login, $password, $method, @args );
+}
+
+sub cp_Scalar_Array {
+ my( $machine, $port, $login, $password, $method, $scalar, @array ) = @_;
+ my @args = ( $scalar, \@array );
communigate_pro_command( $machine, $port, $login, $password, $method, @args );
+}
+
+#sub cp_Hash {
+# my( $machine, $port, $login, $password, $method, %hash ) = @_;
+# my @args = ( \%hash );
+# communigate_pro_command( $machine, $port, $login, $password, $method, @args );
+#}
+sub cp_Scalar_settingsHash {
+ my( $machine, $port, $login, $password, $method, $domain, %settings ) = @_;
+ for (qw( AccessModes DomainAccessModes )) {
+ $settings{$_} = [split(' ',$settings{$_})] if $settings{$_};
+ }
+ my @args = ( 'domain' => $domain, 'settings' => \%settings );
+ communigate_pro_command( $machine, $port, $login, $password, $method, @args );
}
+#sub CreateAccount {
+# my( $machine, $port, $login, $password, $method, %args ) = @_;
+# my $accountName = delete $args{'accountName'};
+# my $accountType = delete $args{'accountType'};
+# my $externalFlag = delete $args{'externalFlag'};
+# $args{'AccessModes'} = [ split(' ', $args{'AccessModes'}) ];
+# my @args = ( accountName => $accountName,
+# accountType => $accountType,
+# settings => \%args,
+# );
+# #externalFlag => $externalFlag,
+# push @args, externalFlag => $externalFlag if $externalFlag;
+#
+# communigate_pro_command( $machine, $port, $login, $password, $method, @args );
+#
+#}
+
sub UpdateAccountSettings {
- my( $machine, $port, $login, $password, $method, %args ) = @_;
- my $accountName = delete $args{'accountName'};
+ my( $machine, $port, $login, $password, $method, $accountName, %args ) = @_;
$args{'AccessModes'} = [ split(' ', $args{'AccessModes'}) ];
- @args = ( $accountName, \%args );
+ my @args = ( $accountName, \%args );
communigate_pro_command( $machine, $port, $login, $password, $method, @args );
}
@@ -168,10 +873,15 @@ sub communigate_pro_command { #subroutine, not method
'password' => $password,
} ) or die "Can't login to CGPro: $CGP::ERR_STRING\n";
- $cli->$method(@args) or die "CGPro error: ". $cli->getErrMessage;
+ #warn "$method ". Dumper(@args) if $DEBUG;
+
+ my $return = $cli->$method(@args)
+ or die "Communigate Pro error: ". $cli->getErrMessage. "\n";
$cli->Logout; # or die "Can't logout of CGPro: $CGP::ERR_STRING\n";
+ $return;
+
}
1;
diff --git a/FS/FS/part_export/domain_shellcommands.pm b/FS/FS/part_export/domain_shellcommands.pm
index 994c113bf..582e29217 100644
--- a/FS/FS/part_export/domain_shellcommands.pm
+++ b/FS/FS/part_export/domain_shellcommands.pm
@@ -26,7 +26,7 @@ tie my %options, 'Tie::IxHash',
'options' => \%options,
'notes' => <<'END'
Run remote commands via SSH, for domains. You will need to
-<a href="../docs/ssh.html">setup SSH for unattended operation</a>.
+<a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.9:Documentation:Administration:SSH_Keys">setup SSH for unattended operation</a>.
<BR><BR>Use these buttons for some useful presets:
<UL>
<LI>
diff --git a/FS/FS/part_export/forward_shellcommands.pm b/FS/FS/part_export/forward_shellcommands.pm
index cee24e452..0f79edea0 100644
--- a/FS/FS/part_export/forward_shellcommands.pm
+++ b/FS/FS/part_export/forward_shellcommands.pm
@@ -26,7 +26,7 @@ tie my %options, 'Tie::IxHash',
'options' => \%options,
'notes' => <<'END'
Run remote commands via SSH, for forwards. You will need to
-<a href="../docs/ssh.html">setup SSH for unattended operation</a>.
+<a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.9:Documentation:Administration:SSH_Keys">setup SSH for unattended operation</a>.
<BR><BR>Use these buttons for some useful presets:
<UL>
<LI>
diff --git a/FS/FS/part_export/grandstream.pm b/FS/FS/part_export/grandstream.pm
new file mode 100644
index 000000000..5c6f1ed8d
--- /dev/null
+++ b/FS/FS/part_export/grandstream.pm
@@ -0,0 +1,257 @@
+package FS::part_export::grandstream;
+
+use base 'FS::part_export';
+use vars qw($DEBUG $me %info $GAPSLITE_HOME $JAVA_HOME);
+use URI;
+use MIME::Base64;
+use Tie::IxHash;
+use IPC::Run qw(run);
+use FS::CGI qw(rooturl);
+
+$DEBUG = 0;
+
+$me = '[' . __PACKAGE__ . ']';
+$GAPSLITE_HOME = '/usr/local/src/GS_CFG_GEN/';
+
+my @java = qw( /usr/lib/jvm/default-java/ /usr/java/default/
+ /usr/lib/jvm/java-6-sun/
+ /usr/lib/jvm/java-1.4.2-gcj-4.1-1.4.2.0/
+ ); #add more common places distros and people put their JREs
+
+$JAVA_HOME = (grep { -e $_ } @java)[0];
+
+tie my %options, 'Tie::IxHash',
+ 'upload' => { label=>'Enable upload to TFTP server via SSH',
+ type=>'checkbox',
+ },
+ 'user' => { label=>'User name for SSH to TFTP server' },
+ 'tftproot' => { label=>'Directory in which to upload configuration' },
+ 'java_home' => { label=>'Path to java to be used',
+ default=>$JAVA_HOME,
+ },
+ 'gapslite_home' => { label=>'Path to grandstream configuration tool',
+ default=>$GAPSLITE_HOME,
+ },
+ 'template' => { label=>'Configuration template',
+ type=>'textarea',
+ notes=>'Type or paste the configuration template here',
+ },
+;
+
+%info = (
+ 'svc' => [ qw( part_device ) ], # svc_phone
+ 'desc' => 'Provision phone numbers to Grandstream Networks phones/ATAs',
+ 'options' => \%options,
+ 'notes' => 'Provision phone numbers to Grandstream Networks phones/ATAs. Requires a Java runtime environment and the Grandstream configuration tool to be installed.',
+);
+
+sub rebless { shift; }
+
+sub gs_create_config {
+ my($self, $mac, %opt) = (@_);
+
+ eval "use Net::SCP;";
+ die $@ if $@;
+
+ warn "gs_create_config called with mac of $mac\n" if $DEBUG;
+ $mac = sprintf('%012s', lc($mac));
+ my $dir = '%%%FREESIDE_CONF%%%/cache.'. $FS::UID::datasrc;
+
+ my $fh = new File::Temp(
+ TEMPLATE => "grandstream.$mac.XXXXXXXX",
+ DIR => $dir,
+ UNLINK => 0,
+ );
+
+ my $filename = $fh->filename;
+
+ #my $template = new Text::Template (
+ # TYPE => 'ARRAY',
+ # SOURCE => $self->option('template'),
+ # DELIMITERS => $delimiters,
+ # OUTPUT => $fh,
+ #);
+
+ #$template->compile or die "Can't compile template: $Text::Template::ERROR\n";
+
+ #my $config = $template->fill_in( HASH => { mac_addr => $mac } );
+
+ print $fh $self->option('template') or die "print failed: $!";
+ close $fh;
+
+ #system( "export GAPSLITE_HOME=$GAPSLITE_HOME; export JAVA_HOME=$JAVA_HOME; ".
+ # "cd $dir; $GAPSLITE_HOME/bin/encode.sh $mac $filename $dir/cfg$mac"
+ # ) == 0
+ # or die "grandstream encode failed: $!";
+ my $out_and_err = '';
+ my @cmd = ( "$JAVA_HOME/bin/java",
+ '-classpath', "$GAPSLITE_HOME/lib/gapslite.jar:$GAPSLITE_HOME/lib/bcprov-jdk14-124.jar:$GAPSLITE_HOME/config",
+ 'com.grandstream.cmd.TextEncoder',
+ $mac, $filename, "$dir/cfg$mac",
+ );
+ run \@cmd, '>&', \$out_and_err
+ or die "grandstream encode failed: $out_and_err";
+
+ unlink $filename;
+
+ open my $encoded, "$dir/cfg$mac" or die "open cfg$mac failed: $!";
+
+ my $content;
+
+ if ($opt{upload}) {
+ if ($self->option('upload')) {
+ my $scp = new Net::SCP ( {
+ 'host' => $self->machine,
+ 'user' => $self->option('user'),
+ 'cwd' => $self->option('tftproot'),
+ } );
+
+ $scp->put( "$dir/cfg$mac" ) or die "upload failed: ". $scp->errstr;
+ }
+ } else {
+ local $/;
+ $content = <$encoded>;
+ }
+
+ close $encoded;
+ unlink "$dir/cfg$mac";
+
+ $content;
+}
+
+sub gs_create {
+ my($self, $mac) = (shift, shift);
+
+ return unless $mac; # be more alarmed? Or check upstream?
+
+ $self->gs_create_config($mac, 'upload' => 1);
+ '';
+}
+
+sub gs_delete {
+ my($self, $mac) = (shift, shift);
+
+ $mac = sprintf('%012s', lc($mac));
+
+ ssh_cmd( user => $self->option('user'),
+ host => $self->machine,
+ command => 'rm',
+ args => [ '-f', $self->option('tftproot'). "/cfg$mac" ],
+ );
+ '';
+
+}
+
+sub ssh_cmd { #subroutine, not method
+ use Net::SSH '0.08';
+ &Net::SSH::ssh_cmd( { @_ } );
+}
+
+sub _export_insert {
+# my( $self, $svc_phone ) = (shift, shift);
+# $self->gs_create($svc_phone->mac_addr);
+ '';
+}
+
+sub _export_replace {
+# my( $self, $new_svc, $old_svc ) = (shift, shift, shift);
+# $self->gs_delete($old_svc->mac_addr);
+# $self->gs_create($new_svc->mac_addr);
+ '';
+}
+
+sub _export_delete {
+# my( $self, $svc_phone ) = (shift, shift);
+# $self->gs_delete($svc_phone->mac_addr);
+ '';
+}
+
+sub _export_suspend {
+ '';
+}
+
+sub _export_unsuspend {
+ '';
+}
+
+sub export_device_insert {
+ my( $self, $svc_phone, $phone_device ) = (shift, shift, shift);
+ $self->gs_create($phone_device->mac_addr);
+ '';
+}
+
+sub export_device_delete {
+ my( $self, $svc_phone, $phone_device ) = (shift, shift, shift);
+ $self->gs_delete($phone_device->mac_addr);
+ '';
+}
+
+sub export_device_config {
+ my( $self, $svc_phone, $phone_device ) = (shift, shift, shift);
+
+ my $mac;
+# if ($phone_device) {
+ $mac = $phone_device->mac_addr;
+# } else {
+# $mac = $svc_phone->mac_addr;
+# }
+
+ return '' unless $mac; # be more alarmed? Or check upstream?
+
+ $self->gs_create_config($mac);
+}
+
+
+sub export_device_replace {
+ my( $self, $svc_phone, $new_svc_or_device, $old_svc_or_device ) =
+ (shift, shift, shift, shift);
+
+ $self->gs_delete($old_svc_or_device->mac_addr);
+ $self->gs_create($new_svc_or_device->mac_addr);
+ '';
+}
+
+# bad overloading?
+sub export_links {
+ my($self, $svc_phone, $arrayref) = (shift, shift, shift);
+
+ return; # remove if we actually support being an export for svc_phone;
+
+ my @deviceparts = map { $_->devicepart } $self->export_device;
+ my @devices = grep { my $part = $_->devicepart;
+ scalar( grep { $_ == $part } @deviceparts );
+ } $svc_phone->phone_device;
+
+ my $export = $self->exportnum;
+ my $fsurl = rooturl();
+ if (@devices) {
+ foreach my $device ( @devices ) {
+ next unless $device->mac_addr;
+ my $num = $device->devicenum;
+ push @$arrayref,
+ qq!<A HREF="$fsurl/misc/phone_device_config.html?exportnum=$export;devicenum=$num">!.
+ qq! Phone config </A>!;
+ }
+ } elsif ($svc_phone->mac_addr) {
+ my $num = $svc_phone->svcnum;
+ push @$arrayref,
+ qq!<A HREF="$fsurl/misc/phone_device_config.html?exportnum=$export;svcnum=$num">!.
+ qq! Phone config </A>!;
+ } #else
+ '';
+}
+
+sub export_device_links {
+ my($self, $svc_phone, $device, $arrayref) = (shift, shift, shift, shift);
+ warn "export_device_links $self $svc_phone $device $arrayref\n" if $DEBUG;
+ return unless $device && $device->mac_addr;
+ my $export = $self->exportnum;
+ my $fsurl = rooturl();
+ my $num = $device->devicenum;
+ push @$arrayref,
+ qq!<A HREF="$fsurl/misc/phone_device_config.html?exportnum=$export;devicenum=$num">!.
+ qq! Phone config </A>!;
+ '';
+}
+
+1;
diff --git a/FS/FS/part_export/indosoft.pm b/FS/FS/part_export/indosoft.pm
new file mode 100644
index 000000000..b5734019b
--- /dev/null
+++ b/FS/FS/part_export/indosoft.pm
@@ -0,0 +1,219 @@
+package FS::part_export::indosoft;
+
+use vars qw(@ISA %info $insert_hack);
+use Tie::IxHash;
+use Date::Format;
+use FS::part_export;
+
+@ISA = qw(FS::part_export);
+
+tie my %options, 'Tie::IxHash',
+ 'url' => { label => 'Voicebridge API URL' },
+ 'account_id' => { label => 'Voicebridge Account ID' },
+;
+
+%info = (
+ 'svc' => 'svc_phone', #svc_bridge? svc_confbridge?
+ 'desc' =>
+ 'Export conferences to the Indosoft Conference Bridge',
+ 'options' => \%options,
+ 'notes' => <<'END'
+Export conferences to the Indosoft conference bridge.
+Net::Indosoft::Voicebridge is required.
+END
+);
+
+$insert_hack = 0;
+
+sub rebless { shift; }
+
+sub _export_insert {
+ my($self, $svc_phone) = (shift, shift);
+
+ my $cust_main = $svc_phone->cust_svc->cust_pkg->cust_main;
+
+ my $address = $cust_main->address1;
+ $address .= ' '.$cust_main->address2 if $cust_main->address2;
+
+ my $phone = $cust_main->daytime || $cust_main->night;
+
+ my @email = $cust_main->invoicing_list_emailonly;
+
+ #svc_phone->location_hash stuff? well that was for e911.. this shouldn't
+ # even be svc_phone
+
+ #add client
+ my $client_return = eval {
+ indosoft_runcommand( 'addClient',
+ 'account_id' => $self->option('account_id'),
+
+ 'client_contact_name' => $cust_main->name, #or just first last?
+ 'client_contact_password' => $svc_phone->sip_password, # ?
+
+ 'client_contact_addr' => $address,
+ 'client_contact_city' => $cust_main->city,
+ 'client_contact_state' => $cust_main->state,
+ 'client_contact_country' => $cust_main->country,
+ 'client_contact_zip' => $cust_main->zip,
+
+ 'client_contact_phone' => $phone,
+ 'client_contact_fax' => $cust_main->fax,
+ 'client_contact_email' => $email[0],
+ );
+ };
+ return $@ if $@;
+
+ my $client_id = $client_return->{client_id};
+
+ #add conference
+ my $conf_return = eval {
+ indosoft_runcommand( 'addConference',
+ 'client_id' => $client_id,
+ 'conference_name' => $cust_main->name,
+ 'conference_desc' => $svc_phone->svcnum. ' for '. $cust_main->name,
+ 'start_time' => time2str('%Y-%d-$m %T', time), #now, right?? '2010-20-04 16:20:00',
+ #'moderated_flag' => 0,
+ #'entry_ann_flag' => 0
+ #'record_flag' => 0
+ #'moh_flag' => 0
+ #'talk_detect_flag' => 0
+ #'play_user_cnt_flag' => 0
+ #'wait_for_admin' => 0
+ #'stop_on_admin_exit' => 0
+ #'second_pin' => 0
+ #'secondary_pin' => 0,
+ #'allow_sub-conf' => 0,
+ #'duration' => 0,
+ #'conference_type' => 'reservation', #'reservationless',
+ );
+ };
+ return $@ if $@;
+
+ my $conference_id = $conf_return->{conference_id};
+
+ #put conference_id in svc_phone.phonenum (and client_id in... phone_name???)
+ local($insert_hack) = 1;
+ $svc_phone->phonenum($conference_id);
+ $svc_phone->phone_name($client_id);
+ #my $error = $svc_phone->replace;
+ #return $error if $error;
+ $svc_phone->replace;
+
+}
+
+sub _export_replace {
+ my( $self, $new, $old ) = (shift, shift, shift);
+ return "can't change phone number as conference_id with indosoft"
+ if $old->phonenum ne $new->phonenum && ! $insert_hack;
+ return '';
+
+ #change anything?
+}
+
+sub _export_delete {
+ my( $self, $svc_phone ) = (shift, shift);
+
+ #delete conference
+ my $conf_return = eval {
+ indosoft_runcommand( 'deleteConference',
+ 'conference_id' => $svc_phone->phonenum,
+ );
+ };
+ return $@ if $@;
+
+ #delete client
+ my $client_return = eval {
+ indosoft_runcommand( 'deleteClient',
+ 'client_id' => $svc_phone->phone_name,
+ )
+ };
+ return $@ if $@;
+
+ '';
+
+}
+
+# #these three are optional
+# # fallback for svc_acct will change and restore password
+# sub _export_suspend {
+# my( $self, $svc_phone ) = (shift, shift);
+# $err_or_queue = $self->indosoft_queue( $svc_phone->svcnum,
+# 'suspend', $svc_phone->username );
+# ref($err_or_queue) ? '' : $err_or_queue;
+# }
+#
+# sub _export_unsuspend {
+# my( $self, $svc_phone ) = (shift, shift);
+# $err_or_queue = $self->indosoft_queue( $svc_phone->svcnum,
+# 'unsuspend', $svc_phone->username );
+# ref($err_or_queue) ? '' : $err_or_queue;
+# }
+#
+# sub export_links {
+# my($self, $svc_phone, $arrayref) = (shift, shift, shift);
+# #push @$arrayref, qq!<A HREF="http://example.com/~!. $svc_phone->username.
+# # qq!">!. $svc_phone->username. qq!</A>!;
+# '';
+# }
+
+###
+
+sub indosoft_runcommand {
+ my( $self, $method ) = (shift, shift);
+
+ indosoft_command(
+ $self->option('url'),
+ $method,
+ @_,
+ );
+
+}
+
+sub indosoft_command {
+ my( $url, $method, @args ) = @_;
+
+ eval 'use Net::Indosoft::Voicebridge;';
+ die $@ if $@;
+
+ my $vb = new Net::Indosoft::Voicebridge( 'url' => $url );
+
+ my $return = $vb->$method( @args );
+
+ die "Indosoft error: ". $return->{'error'} if $return->{'error'};
+
+ $return;
+
+}
+
+
+# #a good idea to queue anything that could fail or take any time
+# sub indosoft_queue {
+# my( $self, $svcnum, $method ) = (shift, shift, shift);
+# my $queue = new FS::queue {
+# 'svcnum' => $svcnum,
+# 'job' => "FS::part_export::indosoft::indosoft_$method",
+# };
+# $queue->insert( @_ ) or $queue;
+# }
+#
+# sub indosoft_insert { #subroutine, not method
+# my( $username, $password ) = @_;
+# #do things with $username and $password
+# }
+#
+# sub indosoft_replace { #subroutine, not method
+# }
+#
+# sub indosoft_delete { #subroutine, not method
+# my( $username ) = @_;
+# #do things with $username
+# }
+#
+# sub indosoft_suspend { #subroutine, not method
+# }
+#
+# sub indosoft_unsuspend { #subroutine, not method
+# }
+
+
+1;
diff --git a/FS/FS/part_export/netsapiens.pm b/FS/FS/part_export/netsapiens.pm
index 332edccc0..83f0f0184 100644
--- a/FS/FS/part_export/netsapiens.pm
+++ b/FS/FS/part_export/netsapiens.pm
@@ -21,7 +21,7 @@ tie my %options, 'Tie::IxHash',
;
%info = (
- 'svc' => 'svc_phone',
+ 'svc' => [ 'svc_phone', ], # 'part_device',
'desc' => 'Provision phone numbers to NetSapiens',
'options' => \%options,
'notes' => <<'END'
@@ -72,10 +72,15 @@ sub _ns_command {
$ns;
}
+sub ns_domain {
+ my($self, $svc_phone) = (shift, shift);
+ $svc_phone->domain || $self->option('domain');
+}
+
sub ns_subscriber {
my($self, $svc_phone) = (shift, shift);
- my $domain = $self->option('domain');
+ my $domain = $self->ns_domain($svc_phone);
my $phonenum = $svc_phone->phonenum;
"/domains_config/$domain/subscriber_config/$phonenum";
@@ -91,7 +96,7 @@ sub ns_registrar {
sub ns_devicename {
my( $self, $svc_phone ) = (shift, shift);
- my $domain = $self->option('domain');
+ my $domain = $self->ns_domain($svc_phone);
#my $countrycode = $svc_phone->countrycode;
my $phonenum = $svc_phone->phonenum;
@@ -121,7 +126,7 @@ sub ns_device {
sub ns_create_or_update {
my($self, $svc_phone, $dial_policy) = (shift, shift, shift);
- my $domain = $self->option('domain');
+ my $domain = $self->ns_domain($svc_phone);
#my $countrycode = $svc_phone->countrycode;
my $phonenum = $svc_phone->phonenum;
@@ -238,7 +243,7 @@ sub _export_unsuspend {
sub export_device_insert {
my( $self, $svc_phone, $phone_device ) = (shift, shift, shift);
- #my $domain = $self->option('domain');
+ my $domain = $self->ns_domain($svc_phone);
my $countrycode = $svc_phone->countrycode;
my $phonenum = $svc_phone->phonenum;
@@ -256,7 +261,7 @@ sub export_device_insert {
#'notes' =>
'server' => 'SiPbx',
- 'domain' => $self->option('domain'),
+ 'domain' => $domain,
'brand' => $phone_device->part_device->devicename,
diff --git a/FS/FS/part_export/phone_shellcommands.pm b/FS/FS/part_export/phone_shellcommands.pm
index fbb7a0bf8..040af27a7 100644
--- a/FS/FS/part_export/phone_shellcommands.pm
+++ b/FS/FS/part_export/phone_shellcommands.pm
@@ -27,7 +27,7 @@ tie my %options, 'Tie::IxHash',
'options' => \%options,
'notes' => <<'END'
Run remote commands via SSH, for phone numbers. You will need to
-<a href="../docs/ssh.html">setup SSH for unattended operation</a>.
+<a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.9:Documentation:Administration:SSH_Keys">setup SSH for unattended operation</a>.
<BR><BR>Use these buttons for some useful presets:
<UL>
<LI>
diff --git a/FS/FS/part_export/shellcommands.pm b/FS/FS/part_export/shellcommands.pm
index 0b9e475db..ec861d3b2 100644
--- a/FS/FS/part_export/shellcommands.pm
+++ b/FS/FS/part_export/shellcommands.pm
@@ -95,7 +95,7 @@ tie my %options, 'Tie::IxHash',
Run remote commands via SSH. Usernames are considered unique (also see
shellcommands_withdomain). You probably want this if the commands you are
running will not accept a domain as a parameter. You will need to
-<a href="../docs/ssh.html">setup SSH for unattended operation</a>.
+<a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.9:Documentation:Administration:SSH_Keys">setup SSH for unattended operation</a>.
<BR><BR>Use these buttons for some useful presets:
<UL>
diff --git a/FS/FS/part_export/shellcommands_withdomain.pm b/FS/FS/part_export/shellcommands_withdomain.pm
index c209002c8..d5a618733 100644
--- a/FS/FS/part_export/shellcommands_withdomain.pm
+++ b/FS/FS/part_export/shellcommands_withdomain.pm
@@ -77,7 +77,7 @@ Run remote commands via SSH. username@domain (rather than just usernames) are
considered unique (also see shellcommands). You probably want this if the
commands you are running will accept a domain as a parameter, and will allow
the same username with different domains. You will need to
-<a href="../docs/ssh.html">setup SSH for unattended operation</a>.
+<a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.9:Documentation:Administration:SSH_Keys">setup SSH for unattended operation</a>.
<BR><BR>Use these buttons for some useful presets:
<UL>
diff --git a/FS/FS/part_export/textradius.pm b/FS/FS/part_export/textradius.pm
index 3cd7039f8..869c7c7dc 100644
--- a/FS/FS/part_export/textradius.pm
+++ b/FS/FS/part_export/textradius.pm
@@ -25,7 +25,7 @@ Requires installation of
from CPAN. If using RADIUS::UserFile 1.01, make sure to apply
<a href="http://rt.cpan.org/NoAuth/Bug.html?id=1210">this patch</a>. Also
make sure <a href="http://rsync.samba.org/">rsync</a> is installed on the
-remote machine, and <a href="../docs/ssh.html">SSH is setup for unattended
+remote machine, and <a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.9:Documentation:Administration:SSH_Keys">SSH is setup for unattended
operation</a>.
END
);
diff --git a/FS/FS/part_export/thirdlane.pm b/FS/FS/part_export/thirdlane.pm
new file mode 100644
index 000000000..60c099748
--- /dev/null
+++ b/FS/FS/part_export/thirdlane.pm
@@ -0,0 +1,348 @@
+package FS::part_export::thirdlane;
+
+use base qw( FS::part_export );
+
+use vars qw(%info $me);
+use Tie::IxHash;
+use URI::Escape;
+use Frontier::Client;
+
+$me = '['.__PACKAGE__.']';
+
+tie my %options, 'Tie::IxHash',
+ #'server' => { label => 'Thirdlane server name or IP address', },
+ 'username' => { label => 'Thirdlane username', },
+ 'password' => { label => 'Thirdlane password', },
+ 'ssl' => { label => 'Enable HTTPS (SSL) connection',
+ type => 'checkbox',
+ },
+ 'port' => { label => 'Port number if not 80 or 443', },
+ 'prototype_tenant' => { label => 'Prototype tenant name', },
+ 'omit_countrycode' => { label => 'Omit country code', type => 'checkbox' },
+ 'debug' => { label => 'Checkbox label', type => 'checkbox' },
+# 'select_option' => { label => 'Select option description',
+# type => 'select', options=>[qw(chocolate vanilla)],
+# default => 'vanilla',
+# },
+# 'textarea_option' => { label => 'Textarea option description',
+# type => 'textarea',
+# default => 'Default text.',
+# },
+;
+
+%info = (
+ 'svc' => [qw( svc_pbx svc_phone svc_acct )],
+ 'desc' =>
+ 'Export tenants, DIDs and admins to Thirdlane PBX manager',
+ 'options' => \%options,
+ 'notes' => <<'END'
+Exports tenants, DIDs and admins to Thirdlane PBX manager using the XML-RPC API.
+END
+);
+
+sub rebless { shift; }
+
+sub _export_insert {
+ my($self, $svc_x) = (shift, shift);
+
+ if ( $svc_x->isa('FS::svc_pbx') ) {
+
+ return 'Name must be 19 characters or less (thirdlane restriction?)'
+ if length($svc_x->title) > 19;
+
+ return 'Name must consist of alphanumerics and spaces only (thirdlane restriction?)'
+ unless $svc_x->title =~ /^[\w\s]+$/;
+
+ my $tenant = {
+ 'tenant' => $svc_x->title,
+ 'maxusers' => $svc_x->max_extensions,
+ #others? will they not clone?
+ };
+
+ @what_to_clone = qw(routes schedules menus queues voiceprompts moh);
+
+ my $result = $self->_thirdlane_command( 'asterisk::rpc_tenant_create',
+ $tenant,
+ $self->option('prototype_tenant'),
+ \@what_to_clone,
+ );
+
+ #use Data::Dumper;
+ #warn Dumper(\$result);
+ $result eq '0' ? '' : 'Thirdlane API failure (rpc_tenant_create)';
+
+ } elsif ( $svc_x->isa('FS::svc_phone') ) {
+
+ my $result = $self->_thirdlane_command(
+ 'asterisk::rpc_did_create',
+ $self->_thirdlane_did($svc_x)
+ );
+
+ #use Data::Dumper;
+ #warn Dumper(\$result);
+ $result eq '0' or return 'Thirdlane API failure (rpc_did_create)';
+
+ return '' unless $svc_x->pbxsvc;
+
+ $result = $self->_thirdlane_command(
+ 'asterisk::rpc_did_assign',
+ $self->_thirdlane_did($svc_x),
+ $svc_x->pbx_title,
+ );
+
+ #use Data::Dumper;
+ #warn Dumper(\$result);
+ $result eq '0' ? '' : 'Thirdlane API failure (rpc_did_assign)';
+
+ } elsif ( $svc_x->isa('FS::svc_acct') ) {
+
+ return 'Must select a PBX' unless $svc_x->pbxsvc;
+
+ my $result = $self->_thirdlane_command(
+ 'asterisk::rpc_admin_create',
+ $svc_x->username,
+ $svc_x->_password,
+ $svc_x->pbx_title,
+ );
+
+ #use Data::Dumper;
+ #warn Dumper(\$result);
+ $result eq '0' ? '' : 'Thirdlane API failure (rpc_admin_create)';
+
+ } else {
+ die "guru meditation #10: $svc_x is not FS::svc_pbx, FS::svc_phone or FS::svc_acct";
+ }
+
+}
+
+sub _export_replace {
+ my($self, $new, $old) = (shift, shift, shift);
+
+# #return "can't change username with thirdlane"
+# # if $old->username ne $new->username;
+# #return '' unless $old->_password ne $new->_password;
+# $err_or_queue = $self->thirdlane_queue( $new->svcnum,
+# 'replace', $new->username, $new->_password );
+# ref($err_or_queue) ? '' : $err_or_queue;
+
+ if ( $new->isa('FS::svc_pbx') ) {
+
+ #need more info on how the API works for changing names.. can it?
+ return "can't change PBX name with thirdlane (yet?)"
+ if $old->title ne $new->title;
+
+ my $tenant = {
+ 'tenant' => $old->title,
+ 'maxusers' => $new->max_extensions,
+ #others? will they not clone?
+ };
+
+ my $result = $self->_thirdlane_command( 'asterisk::rpc_tenant_update',
+ $tenant
+ );
+
+ #use Data::Dumper;
+ #warn Dumper(\$result);
+ $result eq '0' ? '' : 'Thirdlane API failure (rpc_tenant_update)';
+
+ } elsif ( $new->isa('FS::svc_phone') ) {
+
+ return "can't change DID countrycode with thirdlane"
+ if $old->countrycode ne $new->countrycode;
+ return "can't change DID number with thirdlane"
+ if $old->phonenum ne $new->phonenum;
+
+ if ( $old->pbxsvc != $new->pbxsvc ) {
+
+ if ( $old->pbxsvc ) {
+ my $result = $self->_thirdlane_command(
+ 'asterisk::rpc_did_unassign',
+ $self->_thirdlane_did($old),
+ );
+ $result eq '0' or return 'Thirdlane API failure (rpc_did_unassign)';
+ }
+
+ if ( $new->pbxsvc ) {
+ my $result = $self->_thirdlane_command(
+ 'asterisk::rpc_did_assign',
+ $self->_thirdlane_did($new),
+ $new->pbx_title,
+ );
+ $result eq '0' or return 'Thirdlane API failure (rpc_did_assign)';
+ }
+
+
+ }
+
+ '';
+
+ } elsif ( $new->isa('FS::svc_acct') ) {
+
+ return "can't change uesrname with thirdlane"
+ if $old->username ne $new->username;
+
+ return "can't change password with thirdlane"
+ if $old->_password ne $new->_password;
+
+ return "can't change PBX for user with thirdlane"
+ if $old->pbxsvc != $new->pbxsvc;
+
+ ''; #we don't care then
+
+ } else {
+ die "guru meditation #11: $new is not FS::svc_pbx, FS::svc_phone or FS::svc_acct";
+ }
+
+}
+
+sub _export_delete {
+ my($self, $svc_x) = (shift, shift);
+ #my( $self, $svc_something ) = (shift, shift);
+ #$err_or_queue = $self->thirdlane_queue( $svc_something->svcnum,
+ # 'delete', $svc_something->username );
+ #ref($err_or_queue) ? '' : $err_or_queue;
+
+ if ( $svc_x->isa('FS::svc_pbx') ) {
+
+ my $result = $self->_thirdlane_command( 'asterisk::rpc_tenant_delete',
+ $svc_x->title,
+ );
+
+ #use Data::Dumper;
+ #warn Dumper(\$result);
+ #$result eq '0' ? '' : 'Thirdlane API failure (rpc_tenant_delete)';
+ warn "Thirdlane API failure (rpc_tenant_delete); deleting anyway\n"
+ if $result ne '0';
+ '';
+
+ } elsif ( $svc_x->isa('FS::svc_phone') ) {
+
+ if ( $svc_x->pbxsvc ) {
+ my $result = $self->_thirdlane_command(
+ 'asterisk::rpc_did_unassign',
+ $self->_thirdlane_did($svc_x),
+ );
+ $result eq '0' or return 'Thirdlane API failure (rpc_did_unassign)';
+ }
+
+ my $result = $self->_thirdlane_command(
+ 'asterisk::rpc_did_delete',
+ $self->_thirdlane_did($svc_x),
+ );
+ $result eq '0' ? '' : 'Thirdlane API failure (rpc_did_delete)';
+
+ } elsif ( $svc_x->isa('FS::svc_acct') ) {
+
+ return '' unless $svc_x->pbxsvc; #error out? nah
+
+ my $result = $self->_thirdlane_command(
+ 'asterisk::rpc_admin_delete',
+ $svc_x->username,
+ $svc_x->pbx_title,
+ );
+
+ #use Data::Dumper;
+ #warn Dumper(\$result);
+ #$result eq '0' ? '' : 'Thirdlane API failure (rpc_admin_delete)';
+ warn "Thirdlane API failure (rpc_admin_delete); deleting anyway\n"
+ if $result ne '0';
+ '';
+
+ } else {
+ die "guru meditation #12: $svc_x is not FS::svc_pbx, FS::svc_phone or FS::svc_acct";
+ }
+
+}
+
+sub _thirdlane_command {
+ my($self, @param) = @_;
+
+ my $url = $self->option('ssl') ? 'https://' : 'http://';
+ $url .= uri_escape($self->option('username')). ':'.
+ uri_escape($self->option('password')). '@'.
+ $self->machine;
+ $url .= ':'. $self->option('port') if $self->option('port');
+ $url .= '/xmlrpc.cgi';
+
+ warn "$me connecting to $url\n"
+ if $self->option('debug');
+ my $conn = Frontier::Client->new( 'url' => $url,
+ #no, spews output to browser
+ #'debug' => $self->option('debug'),
+ );
+
+ warn "$me sending command: ". join(' ', @param). "\n"
+ if $self->option('debug');
+ $conn->call(@param);
+
+}
+
+sub _thirdlane_did {
+ my($self, $svc_phone) = @_;
+ if ( $self->option('omit_countrycode') ) {
+ $svc_phone->phonenum;
+ } else {
+ $svc_phone->countrycode. $svc_phone->phonenum;
+ }
+}
+
+ #my( $self, $svc_something ) = (shift, shift);
+ #$err_or_queue = $self->thirdlane_queue( $svc_something->svcnum,
+ # 'delete', $svc_something->username );
+ #ref($err_or_queue) ? '' : $err_or_queue;
+
+#these three are optional
+## fallback for svc_acct will change and restore password
+#sub _export_suspend {
+# my( $self, $svc_something ) = (shift, shift);
+# $err_or_queue = $self->thirdlane_queue( $svc_something->svcnum,
+# 'suspend', $svc_something->username );
+# ref($err_or_queue) ? '' : $err_or_queue;
+#}
+#
+#sub _export_unsuspend {
+# my( $self, $svc_something ) = (shift, shift);
+# $err_or_queue = $self->thirdlane_queue( $svc_something->svcnum,
+# 'unsuspend', $svc_something->username );
+# ref($err_or_queue) ? '' : $err_or_queue;
+#}
+#
+#sub export_links {
+# my($self, $svc_something, $arrayref) = (shift, shift, shift);
+# #push @$arrayref, qq!<A HREF="http://example.com/~!. $svc_something->username.
+# # qq!">!. $svc_something->username. qq!</A>!;
+# '';
+#}
+
+####
+#
+##a good idea to queue anything that could fail or take any time
+#sub thirdlane_queue {
+# my( $self, $svcnum, $method ) = (shift, shift, shift);
+# my $queue = new FS::queue {
+# 'svcnum' => $svcnum,
+# 'job' => "FS::part_export::thirdlane::thirdlane_$method",
+# };
+# $queue->insert( @_ ) or $queue;
+#}
+#
+#sub thirdlane_insert { #subroutine, not method
+# my( $username, $password ) = @_;
+# #do things with $username and $password
+#}
+#
+#sub thirdlane_replace { #subroutine, not method
+#}
+#
+#sub thirdlane_delete { #subroutine, not method
+# my( $username ) = @_;
+# #do things with $username
+#}
+#
+#sub thirdlane_suspend { #subroutine, not method
+#}
+#
+#sub thirdlane_unsuspend { #subroutine, not method
+#}
+
+1;
diff --git a/FS/FS/part_export/vpopmail.pm b/FS/FS/part_export/vpopmail.pm
index 4cda65755..799a8e1c1 100644
--- a/FS/FS/part_export/vpopmail.pm
+++ b/FS/FS/part_export/vpopmail.pm
@@ -30,7 +30,7 @@ export that uses vpopmail CLI commands instead.<BR>
Real time export to <a href="http://inter7.com/vpopmail/">vpopmail</a> text
files. <a href="http://search.cpan.org/dist/File-Rsync">File::Rsync</a>
must be installed, and you will need to
-<a href="../docs/ssh.html">setup SSH for unattended operation</a>
+<a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.9:Documentation:Administration:SSH_Keys">setup SSH for unattended operation</a>
to <b>vpopmail</b>@<i>export.host</i>.
END
);
diff --git a/FS/FS/part_export/www_shellcommands.pm b/FS/FS/part_export/www_shellcommands.pm
index 7e4be9ce4..91b294eab 100644
--- a/FS/FS/part_export/www_shellcommands.pm
+++ b/FS/FS/part_export/www_shellcommands.pm
@@ -32,7 +32,7 @@ tie my %options, 'Tie::IxHash',
'options' => \%options,
'notes' => <<'END'
Run remote commands via SSH, for virtual web sites. You will need to
-<a href="../docs/ssh.html">setup SSH for unattended operation</a>.
+<a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.9:Documentation:Administration:SSH_Keys">setup SSH for unattended operation</a>.
<BR><BR>Use these buttons for some useful presets:
<UL>
<LI>
diff --git a/FS/FS/part_pkg.pm b/FS/FS/part_pkg.pm
index 46f4e7241..276889d62 100644
--- a/FS/FS/part_pkg.pm
+++ b/FS/FS/part_pkg.pm
@@ -1179,6 +1179,18 @@ sub calc_units { 0; }
#fallback for everything except bulk.pm
sub hide_svc_detail { 0; }
+=item recur_cost_permonth CUST_PKG
+
+recur_cost divided by freq (only supported for monthly and longer frequencies)
+
+=cut
+
+sub recur_cost_permonth {
+ my($self, $cust_pkg) = @_;
+ return 0 unless $self->freq =~ /^\d+$/ && $self->freq > 0;
+ sprintf('%.2f', $self->recur_cost / $self->freq );
+}
+
=item format OPTION DATA
Returns data formatted according to the function 'format' described
diff --git a/FS/FS/part_pkg/flat.pm b/FS/FS/part_pkg/flat.pm
index f9aaebee7..be17fd803 100644
--- a/FS/FS/part_pkg/flat.pm
+++ b/FS/FS/part_pkg/flat.pm
@@ -104,19 +104,30 @@ tie my %temporalities, 'Tie::IxHash',
'type' => 'select',
'select_options' => \%temporalities,
},
-
- %usage_fields,
- %usage_recharge_fields,
-
'unused_credit' => { 'name' => 'Credit the customer for the unused portion'.
' of service at cancellation',
'type' => 'checkbox',
},
+
+ #used in cust_pkg.pm so could add to any price plan
+ 'expire_months' => { 'name' => 'Auto-add an expiration date this number of months out',
+ },
+ #used in cust_pkg.pm so could add to any price plan where it made sense
+ 'start_1st' => { 'name' => 'Auto-add a start date to the 1st, ignoring the current month.',
+ 'type' => 'checkbox',
+ },
+
+ %usage_fields,
+ %usage_recharge_fields,
+
'externalid' => { 'name' => 'Optional External ID',
'default' => '',
},
},
- 'fieldorder' => [ qw( setup_fee recur_fee recur_temporality unused_credit ),
+ 'fieldorder' => [ qw( setup_fee recur_fee
+ recur_temporality unused_credit
+ expire_months start_1st
+ ),
@usage_fieldorder, @usage_recharge_fieldorder,
qw( externalid ),
],
diff --git a/FS/FS/part_pkg/sql_external.pm b/FS/FS/part_pkg/sql_external.pm
index 70f9f048a..effc101ee 100644
--- a/FS/FS/part_pkg/sql_external.pm
+++ b/FS/FS/part_pkg/sql_external.pm
@@ -1,12 +1,10 @@
package FS::part_pkg::sql_external;
use strict;
-use vars qw(@ISA %info);
+use base qw( FS::part_pkg::recur_Common );
+use vars qw( %info );
use DBI;
#use FS::Record qw(qsearch qsearchs);
-use FS::part_pkg::flat;
-
-@ISA = qw(FS::part_pkg::flat);
%info = (
'name' => 'Base charge plus additional fees for external services from a configurable SQL query',
@@ -22,6 +20,17 @@ use FS::part_pkg::flat;
' of service at cancellation',
'type' => 'checkbox',
},
+ 'cutoff_day' => { 'name' => 'Billing Day (1 - 28) for prorating or '.
+ 'subscription',
+ 'default' => '1',
+ },
+
+ 'recur_method' => { 'name' => 'Recurring fee method',
+ #'type' => 'radio',
+ #'options' => \%recur_method,
+ 'type' => 'select',
+ 'select_options' => \%FS::part_pkg::recur_Common::recur_method,
+ },
'datasrc' => { 'name' => 'DBI data source',
'default' => '',
},
@@ -35,14 +44,17 @@ use FS::part_pkg::flat;
'default' => '',
},
},
- 'fieldorder' => [qw( setup_fee recur_fee unused_credit datasrc db_username db_password query )],
- #'setup' => 'what.setup_fee.value',
- #'recur' => q!'my $dbh = DBI->connect("' + what.datasrc.value + '", "' + what.db_username.value + '", "' + what.db_password.value + '" ) or die $DBI::errstr; my $sth = $dbh->prepare("' + what.query.value + '") or die $dbh->errstr; my $price = ' + what.recur_fee.value + '; foreach my $cust_svc ( grep { $_->part_svc->svcdb eq "svc_external" } $cust_pkg->cust_svc ){ my $id = $cust_svc->svc_x->id; $sth->execute($id) or die $sth->errstr; $price += $sth->fetchrow_arrayref->[0]; } $price;'!,
+ 'fieldorder' => [qw( setup_fee recur_fee unused_credit recur_method cutoff_day
+ datasrc db_username db_password query
+ )],
'weight' => '58',
);
sub calc_recur {
- my($self, $cust_pkg ) = @_;
+ my $self = shift;
+ my($cust_pkg) = @_; #, $sdate, $details, $param ) = @_;
+
+ my $price = $self->calc_recur_Common(@_);
my $dbh = DBI->connect( map { $self->option($_) }
qw( datasrc db_username db_password )
@@ -52,8 +64,6 @@ sub calc_recur {
my $sth = $dbh->prepare( $self->option('query') )
or die $dbh->errstr;
- my $price = $self->option('recur_fee');
-
foreach my $cust_svc (
grep { $_->part_svc->svcdb eq "svc_external" } $cust_pkg->cust_svc
) {
@@ -69,9 +79,4 @@ sub is_free {
0;
}
-sub base_recur {
- my($self, $cust_pkg) = @_;
- $self->option('recur_fee');
-}
-
1;
diff --git a/FS/FS/part_pkg/voip_cdr.pm b/FS/FS/part_pkg/voip_cdr.pm
index 0c87581ed..38e5941a9 100644
--- a/FS/FS/part_pkg/voip_cdr.pm
+++ b/FS/FS/part_pkg/voip_cdr.pm
@@ -535,6 +535,9 @@ sub calc_usage {
# length($cdr->billsec) ? $cdr->billsec : $cdr->duration;
$seconds = $use_duration ? $cdr->duration : $cdr->billsec;
+ $seconds -= $rate_detail->conn_sec;
+ $seconds = 0 if $seconds < 0;
+
$seconds += $granularity - ( $seconds % $granularity )
if $seconds # don't granular-ize 0 billsec calls (bills them)
&& $granularity; # 0 is per call
@@ -546,12 +549,15 @@ sub calc_usage {
$included_min{$regionnum} -= $minutes;
+ $charge = sprintf('%.2f', $rate_detail->conn_charge);
+
if ( $included_min{$regionnum} < 0 ) {
my $charge_min = 0 - $included_min{$regionnum}; #XXX should preserve
#(display?) this
$included_min{$regionnum} = 0;
- $charge = sprintf('%.2f', ( $rate_detail->min_charge * $charge_min )
- + 0.00000001 ); #so 1.005 rounds to 1.01
+ $charge += sprintf('%.2f', ($rate_detail->min_charge * $charge_min)
+ + 0.00000001 ); #so 1.005 rounds to 1.01
+ $charge = sprintf('%.2f', $charge);
$charges += $charge;
}
diff --git a/FS/FS/part_svc.pm b/FS/FS/part_svc.pm
index db39ea9ae..3ed153e0c 100644
--- a/FS/FS/part_svc.pm
+++ b/FS/FS/part_svc.pm
@@ -724,7 +724,18 @@ sub process {
ref($param->{'svc_acct__usergroup'})
? join(',', @{$param->{'svc_acct__usergroup'}} )
: $param->{'svc_acct__usergroup'};
+
+ #unmunge cgp_accessmodes (falze laziness-ish w/edit/process/svc_acct.cgi)
+ $param->{'svc_acct__cgp_accessmodes'} ||=
+ join(' ', sort
+ grep { $_ !~ /^(flag|label)$/ }
+ map { /^svc_acct__cgp_accessmodes_([\w\/]+)$/ or die "no way"; $1; }
+ grep $param->{$_},
+ grep /^svc_acct__cgp_accessmodes_([\w\/]+)$/,
+ keys %$param
+ );
+
my $new = new FS::part_svc ( {
map {
$_ => $param->{$_};
diff --git a/FS/FS/rate_detail.pm b/FS/FS/rate_detail.pm
index b7b23babe..f6cdedf6e 100644
--- a/FS/FS/rate_detail.pm
+++ b/FS/FS/rate_detail.pm
@@ -232,6 +232,31 @@ sub granularities {
%granularities;
}
+=item conn_secs
+
+ Returns an (ordered) hash of conn_sec => name pairs
+
+=cut
+
+tie my %conn_secs, 'Tie::IxHash',
+ '0' => 'connection',
+ '1' => 'first second',
+ '6' => 'first 6 seconds',
+ '30' => 'first 30 seconds', # '1/2 minute',
+ '60' => 'first minute',
+ '120' => 'first 2 minutes',
+ '180' => 'first 3 minutes',
+ '300' => 'first 5 minutes',
+;
+
+sub conn_secs {
+ %conn_secs;
+}
+
+=item process_edit_import
+
+=cut
+
use Storable qw(thaw);
use Data::Dumper;
use MIME::Base64;
@@ -311,6 +336,10 @@ sub process_edit_import {
}
+=item edit_import
+
+=cut
+
#false laziness w/ #FS::Record::batch_import, grep "edit_import" for differences
#could be turned into callbacks or something
use Text::CSV_XS;
@@ -569,8 +598,6 @@ sub edit_import {
}
-
-
=back
=head1 BUGS
diff --git a/FS/FS/reason.pm b/FS/FS/reason.pm
index 5311ec5aa..377da4985 100644
--- a/FS/FS/reason.pm
+++ b/FS/FS/reason.pm
@@ -114,60 +114,6 @@ sub reasontype {
qsearchs( 'reason_type', { 'typenum' => shift->reason_type } );
}
-# _upgrade_data
-#
-# Used by FS::Upgrade to migrate to a new database.
-#
-#
-
-sub _upgrade_data { # class method
- my ($self, %opts) = @_;
- my $dbh = dbh;
-
- warn "$me upgrading $self\n" if $DEBUG;
-
- my $column = dbdef->table($self->table)->column('reason');
- unless ($column->type eq 'text') { # assume history matches main table
-
- # ideally this would be supported in DBIx-DBSchema and friends
- warn "$me Shifting reason column to type 'text'\n" if $DEBUG;
- foreach my $table ( $self->table, 'h_'. $self->table ) {
- my @sql = ();
-
- $column = dbdef->table($self->table)->column('reason');
- my $columndef = $column->line($dbh);
- $columndef =~ s/varchar\(\d+\)/text/i;
-
- if ( $dbh->{Driver}->{Name} eq 'Pg' ) {
-
- my $notnull = $columndef =~ s/not null//i;
- push @sql,"ALTER TABLE $table RENAME reason TO freeside_upgrade_reason";
- push @sql,"ALTER TABLE $table ADD $columndef";
- push @sql,"UPDATE $table SET reason = freeside_upgrade_reason";
- push @sql,"ALTER TABLE $table ALTER reason SET NOT NULL"
- if $notnull;
- push @sql,"ALTER TABLE $table DROP freeside_upgrade_reason";
-
- } elsif ( $dbh->{Driver}->{Name} =~ /^mysql/i ){
-
- #crap, this isn't working
- #push @sql,"ALTER TABLE $table MODIFY reason ". $column->line($dbh);
- warn "WARNING: reason table upgrade not yet supported for mysql, sorry";
-
- } else {
- die "watchu talkin' 'bout, Willis? (unsupported database type)";
- }
-
- foreach (@sql) {
- my $sth = $dbh->prepare($_) or die $dbh->errstr;
- $sth->execute or die $sth->errstr;
- }
- }
- }
-
- '';
-
-}
=back
=head1 BUGS
diff --git a/FS/FS/svc_Common.pm b/FS/FS/svc_Common.pm
index a67504a5b..fd2745dac 100644
--- a/FS/FS/svc_Common.pm
+++ b/FS/FS/svc_Common.pm
@@ -401,7 +401,7 @@ sub replace {
local $FS::UID::AutoCommit = 0;
my $dbh = dbh;
- my $error = $new->set_auto_inventory;
+ my $error = $new->set_auto_inventory($old);
if ( $error ) {
$dbh->rollback if $oldAutoCommit;
return $error;
@@ -586,15 +586,115 @@ sub part_svc {
}
+=item svc_pbx
+
+Returns the FS::svc_pbx record for this service, if any (see L<FS::svc_pbx>).
+
+Only makes sense if the service has a pbxsvc field (currently, svc_phone and
+svc_acct).
+
+=cut
+
+# XXX FS::h_svc_{acct,phone} could have a history-aware svc_pbx override
+
+sub svc_pbx {
+ my $self = shift;
+ return '' unless $self->pbxsvc;
+ qsearchs( 'svc_pbx', { 'svcnum' => $self->pbxsvc } );
+}
+
+=item pbx_title
+
+Returns the title of the FS::svc_pbx record associated with this service, if
+any.
+
+Only makes sense if the service has a pbxsvc field (currently, svc_phone and
+svc_acct).
+
+=cut
+
+sub pbx_title {
+ my $self = shift;
+ my $svc_pbx = $self->svc_pbx or return '';
+ $svc_pbx->title;
+}
+
+=item pbx_select_hash %OPTIONS
+
+Can be called as an object method or a class method.
+
+Returns a hash SVCNUM => TITLE ... representing the PBXes this customer
+that may be associated with this service.
+
+Currently available options are: I<pkgnum> I<svcpart>
+
+Only makes sense if the service has a pbxsvc field (currently, svc_phone and
+svc_acct).
+
+=cut
+
+#false laziness w/svc_acct::domain_select_hash
+sub pbx_select_hash {
+ my ($self, %options) = @_;
+ my %pbxes = ();
+ my $part_svc;
+ my $cust_pkg;
+
+ if (ref($self)) {
+ $part_svc = $self->part_svc;
+ $cust_pkg = $self->cust_svc->cust_pkg
+ if $self->cust_svc;
+ }
+
+ $part_svc = qsearchs('part_svc', { 'svcpart' => $options{svcpart} })
+ if $options{'svcpart'};
+
+ $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $options{pkgnum} })
+ if $options{'pkgnum'};
+
+ if ($part_svc && ( $part_svc->part_svc_column('pbxsvc')->columnflag eq 'S'
+ || $part_svc->part_svc_column('pbxsvc')->columnflag eq 'F')) {
+ %pbxes = map { $_->svcnum => $_->title }
+ map { qsearchs('svc_pbx', { 'svcnum' => $_ }) }
+ split(',', $part_svc->part_svc_column('pbxsvc')->columnvalue);
+ } elsif ($cust_pkg) { # && !$conf->exists('svc_acct-alldomains') ) {
+ %pbxes = map { $_->svcnum => $_->title }
+ map { qsearchs('svc_pbx', { 'svcnum' => $_->svcnum }) }
+ map { qsearch('cust_svc', { 'pkgnum' => $_->pkgnum } ) }
+ qsearch('cust_pkg', { 'custnum' => $cust_pkg->custnum });
+ } else {
+ #XXX agent-virt
+ %pbxes = map { $_->svcnum => $_->title } qsearch('svc_pbx', {} );
+ }
+
+ if ($part_svc && $part_svc->part_svc_column('pbxsvc')->columnflag eq 'D') {
+ my $svc_pbx = qsearchs('svc_pbx',
+ { 'svcnum' => $part_svc->part_svc_column('pbxsvc')->columnvalue } );
+ if ( $svc_pbx ) {
+ $pbxes{$svc_pbx->svcnum} = $svc_pbx->title;
+ } else {
+ warn "unknown svc_pbx.svcnum for part_svc_column pbxsvc: ".
+ $part_svc->part_svc_column('pbxsvc')->columnvalue;
+
+ }
+ }
+
+ (%pbxes);
+
+}
+
=item set_auto_inventory
-Sets any fields which auto-populate from inventory (see L<FS::part_svc>).
+Sets any fields which auto-populate from inventory (see L<FS::part_svc>), and
+also check any manually populated inventory fields.
+
If there is an error, returns the error, otherwise returns false.
=cut
sub set_auto_inventory {
my $self = shift;
+ my $old = @_ ? shift : '';
my $error =
$self->ut_numbern('svcnum')
@@ -618,39 +718,69 @@ sub set_auto_inventory {
#set default/fixed/whatever fields from part_svc
my $table = $self->table;
foreach my $field ( grep { $_ ne 'svcnum' } $self->fields ) {
+
my $part_svc_column = $part_svc->part_svc_column($field);
- if ( $part_svc_column->columnflag eq 'A' && $self->$field() eq '' ) {
-
- my $classnum = $part_svc_column->columnvalue;
- my $inventory_item = qsearchs({
- 'table' => 'inventory_item',
- 'hashref' => { 'classnum' => $classnum,
- 'svcnum' => '',
- },
- 'extra_sql' => 'LIMIT 1 FOR UPDATE',
- });
+ my $columnflag = $part_svc_column->columnflag;
+ next unless $columnflag =~ /^[AM]$/;
- unless ( $inventory_item ) {
- $dbh->rollback if $oldAutoCommit;
- my $inventory_class =
- qsearchs('inventory_class', { 'classnum' => $classnum } );
- return "Can't find inventory_class.classnum $classnum"
- unless $inventory_class;
- return "Out of ". $inventory_class->classname. "s\n"; #Lingua:: BS
- #for pluralizing
- }
+ next if $columnflag eq 'A' && $self->$field() ne '';
- $inventory_item->svcnum( $self->svcnum );
- my $ierror = $inventory_item->replace();
- if ( $ierror ) {
- $dbh->rollback if $oldAutoCommit;
- return "Error provisioning inventory: $ierror";
-
- }
+ my $classnum = $part_svc_column->columnvalue;
+ my %hash = ( 'classnum' => $classnum );
+
+ if ( $columnflag eq 'A' && $self->$field() eq '' ) {
+ $hash{'svcnum'} = '';
+ } elsif ( $columnflag eq 'M' ) {
+ return "Select inventory item for $field" unless $self->getfield($field);
+ $hash{'item'} = $self->getfield($field);
+ }
+
+ my $inventory_item = qsearchs({
+ 'table' => 'inventory_item',
+ 'hashref' => \%hash,
+ 'extra_sql' => 'LIMIT 1 FOR UPDATE',
+ });
+
+ unless ( $inventory_item ) {
+ $dbh->rollback if $oldAutoCommit;
+ my $inventory_class =
+ qsearchs('inventory_class', { 'classnum' => $classnum } );
+ return "Can't find inventory_class.classnum $classnum"
+ unless $inventory_class;
+ return "Out of ". $inventory_class->classname. "s\n"; #Lingua:: BS
+ #for pluralizing
+ }
+
+ next if $columnflag eq 'M' && $inventory_item->svcnum == $self->svcnum;
- $self->setfield( $field, $inventory_item->item );
+ $self->setfield( $field, $inventory_item->item );
+ #if $columnflag eq 'A' && $self->$field() eq '';
+ $inventory_item->svcnum( $self->svcnum );
+ my $ierror = $inventory_item->replace();
+ if ( $ierror ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "Error provisioning inventory: $ierror";
}
+
+ if ( $old && $old->$field() && $old->$field() ne $self->$field() ) {
+ my $old_inv = qsearchs({
+ 'table' => 'inventory_item',
+ 'hashref' => { 'classnum' => $classnum,
+ 'svcnum' => $old->svcnum,
+ 'item' => $old->$field(),
+ },
+ });
+ if ( $old_inv ) {
+ $old_inv->svcnum('');
+ my $oerror = $old_inv->replace;
+ if ( $oerror ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "Error unprovisioning inventory: $oerror";
+ }
+ }
+ }
+
}
$dbh->commit or die $dbh->errstr if $oldAutoCommit;
@@ -757,6 +887,25 @@ sub export_links {
$return;
}
+=item export_getsettings
+
+Runs export_getsettings callbacks and returns the two hashrefs.
+
+=cut
+
+sub export_getsettings {
+ my $self = shift;
+ my %settings = ();
+ my %defaults = ();
+ my $error = $self->export('getsettings', \%settings, \%defaults);
+ if ( $error ) {
+ #XXX bubble this up better
+ warn "error running export_getsetings: $error";
+ return ( {}, {} );
+ }
+ ( \%settings, \%defaults );
+}
+
=item export HOOK [ EXPORT_ARGS ]
Runs the provided export hook (i.e. "suspend", "unsuspend") for this service.
diff --git a/FS/FS/svc_Domain_Mixin.pm b/FS/FS/svc_Domain_Mixin.pm
new file mode 100644
index 000000000..202899cab
--- /dev/null
+++ b/FS/FS/svc_Domain_Mixin.pm
@@ -0,0 +1,134 @@
+package FS::svc_Domain_Mixin;
+
+use strict;
+use FS::Conf;
+use FS::Record qw(qsearch qsearchs);
+use FS::part_svc;
+use FS::cust_pkg;
+use FS::cust_svc;
+use FS::svc_domain;
+
+=head1 NAME
+
+FS::svc_Domain_Mixin - Mixin class for svc_classes with a domsvc field
+
+=head1 SYNOPSIS
+
+package FS::svc_table;
+use base qw( FS::svc_Domain_Mixin FS::svc_Common );
+
+=head1 DESCRIPTION
+
+This is a mixin class for svc_ classes that contain a domsvc field linking to
+a domain (see L<FS::svc_domain>).
+
+=head1 METHODS
+
+=over 4
+
+=item domain [ END_TIMESTAMP [ START_TIMESTAMP ] ]
+
+Returns the domain associated with this account.
+
+END_TIMESTAMP and START_TIMESTAMP can optionally be passed when dealing with
+history records.
+
+=cut
+
+sub domain {
+ my $self = shift;
+ #die "svc_acct.domsvc is null for svcnum ". $self->svcnum unless $self->domsvc;
+ return '' unless $self->domsvc;
+ my $svc_domain = $self->svc_domain(@_)
+ or die "no svc_domain.svcnum for domsvc ". $self->domsvc;
+ $svc_domain->domain;
+}
+
+=item svc_domain
+
+Returns the FS::svc_domain record for this account's domain (see
+L<FS::svc_domain>).
+
+=cut
+
+# FS::h_svc_acct has a history-aware svc_domain override
+
+sub svc_domain {
+ my $self = shift;
+ $self->{'_domsvc'}
+ ? $self->{'_domsvc'}
+ : qsearchs( 'svc_domain', { 'svcnum' => $self->domsvc } );
+}
+
+=item domain_select_hash %OPTIONS
+
+Object or class method.
+
+Returns a hash SVCNUM => DOMAIN ... representing the domains this customer
+may at present purchase.
+
+Currently available options are: I<pkgnum> and I<svcpart>.
+
+=cut
+
+sub domain_select_hash {
+ my ($self, %options) = @_;
+ my %domains = ();
+
+ my $conf = new FS::Conf;
+
+ my $part_svc;
+ my $cust_pkg;
+
+ if (ref($self)) {
+ $part_svc = $self->part_svc;
+ $cust_pkg = $self->cust_svc->cust_pkg
+ if $self->cust_svc;
+ }
+
+ $part_svc = qsearchs('part_svc', { 'svcpart' => $options{svcpart} })
+ if $options{'svcpart'};
+
+ $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $options{pkgnum} })
+ if $options{'pkgnum'};
+
+ if ($part_svc && ( $part_svc->part_svc_column('domsvc')->columnflag eq 'S'
+ || $part_svc->part_svc_column('domsvc')->columnflag eq 'F')) {
+ %domains = map { $_->svcnum => $_->domain }
+ map { qsearchs('svc_domain', { 'svcnum' => $_ }) }
+ split(',', $part_svc->part_svc_column('domsvc')->columnvalue);
+ }elsif ($cust_pkg && !$conf->exists('svc_acct-alldomains') ) {
+ %domains = map { $_->svcnum => $_->domain }
+ map { qsearchs('svc_domain', { 'svcnum' => $_->svcnum }) }
+ map { qsearch('cust_svc', { 'pkgnum' => $_->pkgnum } ) }
+ qsearch('cust_pkg', { 'custnum' => $cust_pkg->custnum });
+ }else{
+ %domains = map { $_->svcnum => $_->domain } qsearch('svc_domain', {} );
+ }
+
+ if ($part_svc && $part_svc->part_svc_column('domsvc')->columnflag eq 'D') {
+ my $svc_domain = qsearchs('svc_domain',
+ { 'svcnum' => $part_svc->part_svc_column('domsvc')->columnvalue } );
+ if ( $svc_domain ) {
+ $domains{$svc_domain->svcnum} = $svc_domain->domain;
+ }else{
+ warn "unknown svc_domain.svcnum for part_svc_column domsvc: ".
+ $part_svc->part_svc_column('domsvc')->columnvalue;
+
+ }
+ }
+
+ (%domains);
+}
+
+=back
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::svc_Common>, L<FS::Record>
+
+=cut
+
+1;
diff --git a/FS/FS/svc_acct.pm b/FS/FS/svc_acct.pm
index 3e264e6a3..fbf47072d 100644
--- a/FS/FS/svc_acct.pm
+++ b/FS/FS/svc_acct.pm
@@ -1,7 +1,8 @@
package FS::svc_acct;
use strict;
-use vars qw( @ISA $DEBUG $me $conf $skip_fuzzyfiles
+use base qw( FS::svc_Domain_Mixin FS::svc_Common );
+use vars qw( $DEBUG $me $conf $skip_fuzzyfiles
$dir_prefix @shells $usernamemin
$usernamemax $passwordmin $passwordmax
$username_ampersand $username_letter $username_letterfirst
@@ -32,12 +33,11 @@ use FS::Msgcat qw(gettext);
use FS::UI::bytecount;
use FS::UI::Web;
use FS::part_pkg;
-use FS::svc_Common;
-use FS::cust_svc;
use FS::part_svc;
use FS::svc_acct_pop;
use FS::cust_main_invoice;
use FS::svc_domain;
+use FS::svc_pbx;
use FS::raddb;
use FS::queue;
use FS::radius_usergroup;
@@ -47,8 +47,6 @@ use FS::svc_forward;
use FS::svc_www;
use FS::cdr;
-@ISA = qw( FS::svc_Common );
-
$DEBUG = 0;
$me = '[FS::svc_acct]';
@@ -161,45 +159,71 @@ FS::svc_Common. The following fields are currently supported:
=over 4
-=item svcnum - primary key (assigned automatcially for new accounts)
+=item svcnum
+
+Primary key (assigned automatcially for new accounts)
=item username
-=item _password - generated if blank
+=item _password
+
+generated if blank
+
+=item _password_encoding
+
+plain, crypt, ldap (or empty for autodetection)
+
+=item sec_phrase
-=item _password_encoding - plain, crypt, ldap (or empty for autodetection)
+security phrase
-=item sec_phrase - security phrase
+=item popnum
-=item popnum - Point of presence (see L<FS::svc_acct_pop>)
+Point of presence (see L<FS::svc_acct_pop>)
=item uid
=item gid
-=item finger - GECOS
+=item finger
-=item dir - set automatically if blank (and uid is not)
+GECOS
+
+=item dir
+
+set automatically if blank (and uid is not)
=item shell
-=item quota - (unimplementd)
+=item quota
+
+=item slipip
+
+IP address
+
+=item seconds
+
+=item upbytes
-=item slipip - IP address
+=item downbyte
-=item seconds -
+=item totalbytes
-=item upbytes -
+=item domsvc
+
+svcnum from svc_domain
+
+=item pbxsvc
-=item downbytes -
+Optional svcnum from svc_pbx
-=item totalbytes -
+=item radius_I<Radius_Attribute>
-=item domsvc - svcnum from svc_domain
+I<Radius-Attribute> (reply)
-=item radius_I<Radius_Attribute> - I<Radius-Attribute> (reply)
+=item rc_I<Radius_Attribute>
-=item rc_I<Radius_Attribute> - I<Radius-Attribute> (check)
+I<Radius-Attribute> (check)
=back
@@ -244,8 +268,64 @@ sub table_info {
disable_fixed => 1,
disable_select => 1,
},
+ 'cgp_type'=> {
+ label => 'Communigate account type',
+ type => 'select',
+ select_list => [qw( MultiMailbox TextMailbox MailDirMailbox AGrade BGrade CGrade )],
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'cgp_accessmodes' => {
+ label => 'Communigate enabled services',
+ type => 'communigate_pro-accessmodes',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'cgp_aliases' => {
+ label => 'Communigate aliases',
+ type => 'text',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'password_selfchange' => { label => 'Password modification',
+ type => 'checkbox',
+ },
+ 'password_recover' => { label => 'Password recovery',
+ type => 'checkbox',
+ },
+ 'cgp_deletemode' => {
+ label => 'Communigate message delete method',
+ type => 'select',
+ select_list => [ 'Move To Trash', 'Immediately', 'Mark' ],
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'cgp_emptytrash' => {
+ label => 'Communigate on logout remove trash',
+ type => 'text',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
'quota' => {
- label => 'Quota',
+ label => 'Quota', #Mail storage limit
+ type => 'text',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'file_quota'=> {
+ label => 'File storage limit',
+ type => 'text',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'file_maxnum'=> {
+ label => 'Number of files limit',
+ type => 'text',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'file_maxsize'=> {
+ label => 'File size limit',
type => 'text',
disable_inventory => 1,
disable_select => 1,
@@ -273,7 +353,11 @@ sub table_info {
select_key => 'svcnum',
select_label => 'domain',
disable_inventory => 1,
-
+ },
+ 'pbxsvc' => { label => 'PBX',
+ type => 'select-svc_pbx.html',
+ disable_inventory => 1,
+ disable_select => 1, #UI wonky, pry works otherwise
},
'usergroup' => {
label => 'RADIUS groups',
@@ -656,13 +740,16 @@ sub insert {
}
# set usage fields and thresholds if unset but set in a package def
+# AND the package already has a last bill date (otherwise they get double added)
sub preinsert_hook_first {
my $self = shift;
return '' unless $self->pkgnum;
my $cust_pkg = qsearchs( 'cust_pkg', { 'pkgnum' => $self->pkgnum } );
- my $part_pkg = $cust_pkg->part_pkg if $cust_pkg;
+ return '' unless $cust_pkg && $cust_pkg->last_bill;
+
+ my $part_pkg = $cust_pkg->part_pkg;
return '' unless $part_pkg && $part_pkg->can('usage_valuehash');
my %values = $part_pkg->usage_valuehash;
@@ -1011,15 +1098,21 @@ sub check {
my $error = $self->ut_numbern('svcnum')
#|| $self->ut_number('domsvc')
- || $self->ut_foreign_key('domsvc', 'svc_domain', 'svcnum' )
+ || $self->ut_foreign_key( 'domsvc', 'svc_domain', 'svcnum' )
+ || $self->ut_foreign_keyn('pbxsvc', 'svc_pbx', 'svcnum' )
|| $self->ut_textn('sec_phrase')
|| $self->ut_snumbern('seconds')
|| $self->ut_snumbern('upbytes')
|| $self->ut_snumbern('downbytes')
|| $self->ut_snumbern('totalbytes')
- || $self->ut_enum( '_password_encoding',
- [ '', qw( plain crypt ldap ) ]
- )
+ || $self->ut_enum('_password_encoding', ['',qw(plain crypt ldap)])
+ || $self->ut_enum('password_selfchange', [ '', 'Y' ])
+ || $self->ut_enum('password_recover', [ '', 'Y' ])
+ || $self->ut_textn('cgp_accessmodes')
+ || $self->ut_alphan('cgp_type')
+ || $self->ut_textn('cgp_aliases' ) #well
+ || $self->ut_alphasn('cgp_deletemode')
+ || $self->ut_alphan('cgp_emptytrash')
;
return $error if $error;
@@ -1155,8 +1248,12 @@ sub check {
or return "Illegal finger: ". $self->getfield('finger');
$self->setfield('finger', $1);
- $recref->{quota} =~ /^(\w*)$/ or return "Illegal quota";
- $recref->{quota} = $1;
+ for (qw( quota file_quota file_maxsize )) {
+ $recref->{$_} =~ /^(\w*)$/ or return "Illegal $_";
+ $recref->{$_} = $1;
+ }
+ $recref->{file_maxnum} =~ /^\s*(\d*)\s*$/ or return "Illegal file_maxnum";
+ $recref->{file_maxnum} = $1;
unless ( $part_svc->part_svc_column('slipip')->columnflag eq 'F' ) {
if ( $recref->{slipip} eq '' ) {
@@ -1289,80 +1386,81 @@ is >0), one will be generated randomly.
=cut
sub set_password {
- my $self = shift;
- my $pass = shift;
- my ($encoding, $encryption);
+ my( $self, $pass ) = ( shift, shift );
+
+ warn "[$me] set_password (to $pass) called on $self: ". Dumper($self)
+ if $DEBUG;
+
my $failure = gettext('illegal_password'). " $passwordmin-$passwordmax ".
FS::Msgcat::_gettext('illegal_password_characters').
": ". $pass;
- if(($passwordmin and length($pass) < $passwordmin) or
- ($passwordmax and length($pass) > $passwordmax)) {
- return $failure;
- }
+ my( $encoding, $encryption ) = ('', '');
- if($self->_password_encoding) {
+ if ( $self->_password_encoding ) {
$encoding = $self->_password_encoding;
# identify existing encryption method, try to use it.
$encryption = $self->_password_encryption;
- if(!$encryption) {
+ if (!$encryption) {
# use the system default
undef $encoding;
}
}
- if(!$encoding) {
+ if ( !$encoding ) {
# set encoding to system default
- ($encoding, $encryption) = split(/-/, lc($conf->config('default-password-encoding')));
+ ($encoding, $encryption) =
+ split(/-/, lc($conf->config('default-password-encoding')));
$encoding ||= 'legacy';
$self->_password_encoding($encoding);
}
- if($encoding eq 'legacy') {
+ if ( $encoding eq 'legacy' ) {
+
# The legacy behavior from check():
# If the password is blank, randomize it and set encoding to 'plain'.
if(!defined($pass) or (length($pass) == 0 and $passwordmin)) {
$pass = join('',map($pw_set[ int(rand $#pw_set) ], (0..7) ) );
$self->_password_encoding('plain');
- }
- else {
+ } else {
# Prefix + valid-length password
if ( $pass =~ /^((\*SUSPENDED\* |!!?)?)([^\t\n]{$passwordmin,$passwordmax})$/ ) {
$pass = $1.$3;
$self->_password_encoding('plain');
- }
# Prefix + crypt string
- elsif ( $pass =~ /^((\*SUSPENDED\* |!!?)?)([\w\.\/\$\;\+]{13,64})$/ ) {
+ } elsif ( $pass =~ /^((\*SUSPENDED\* |!!?)?)([\w\.\/\$\;\+]{13,64})$/ ) {
$pass = $1.$3;
$self->_password_encoding('crypt');
- }
# Various disabled crypt passwords
- elsif ( $pass eq '*' or
- $pass eq '!' or
- $pass eq '!!' ) {
+ } elsif ( $pass eq '*' || $pass eq '!' || $pass eq '!!' ) {
$self->_password_encoding('crypt');
- }
- else {
+ } else {
return $failure;
}
- }
+ }
+
+ $self->_password($pass);
+ return;
+
}
- elsif($encoding eq 'crypt') {
- if($encryption eq 'md5') {
+
+ return $failure
+ if $passwordmin && length($pass) < $passwordmin
+ or $passwordmax && length($pass) > $passwordmax;
+
+ if ( $encoding eq 'crypt' ) {
+ if ($encryption eq 'md5') {
$pass = unix_md5_crypt($pass);
- }
- elsif($encryption eq 'des') {
+ } elsif ($encryption eq 'des') {
$pass = crypt($pass, $saltset[int(rand(64))].$saltset[int(rand(64))]);
}
- }
- elsif($encoding eq 'ldap') {
- if($encryption eq 'md5') {
+
+ } elsif ( $encoding eq 'ldap' ) {
+ if ($encryption eq 'md5') {
$pass = md5_base64($pass);
- }
- elsif($encryption eq 'sha1') {
+ } elsif ($encryption eq 'sha1') {
$pass = sha1_base64($pass);
- }
- elsif($encryption eq 'crypt') {
+ } elsif ($encryption eq 'crypt') {
$pass = crypt($pass, $saltset[int(rand(64))].$saltset[int(rand(64))]);
}
# else $encryption eq 'plain', do nothing
@@ -1630,30 +1728,20 @@ for the password.
sub radius_password {
my $self = shift;
- my($pw_attrib, $password);
+ my $pw_attrib;
if ( $self->_password_encoding eq 'ldap' ) {
-
$pw_attrib = 'Password-With-Header';
- $password = $self->_password;
-
} elsif ( $self->_password_encoding eq 'crypt' ) {
-
$pw_attrib = 'Crypt-Password';
- $password = $self->_password;
-
} elsif ( $self->_password_encoding eq 'plain' ) {
-
- $pw_attrib = $radius_password; #Cleartext-Password? man rlm_pap
- $password = $self->_password;
-
+ $pw_attrib = $radius_password;
} else {
-
- $pw_attrib = length($password) <= 12 ? $radius_password : 'Crypt-Password';
- $password = $self->_password;
-
+ $pw_attrib = length($self->_password) <= 12
+ ? $radius_password
+ : 'Crypt-Password';
}
- ($pw_attrib, $password);
+ ($pw_attrib, $self->_password);
}
@@ -1709,22 +1797,6 @@ sub domain {
$svc_domain->domain;
}
-=item svc_domain
-
-Returns the FS::svc_domain record for this account's domain (see
-L<FS::svc_domain>).
-
-=cut
-
-# FS::h_svc_acct has a history-aware svc_domain override
-
-sub svc_domain {
- my $self = shift;
- $self->{'_domsvc'}
- ? $self->{'_domsvc'}
- : qsearchs( 'svc_domain', { 'svcnum' => $self->domsvc } );
-}
-
=item cust_svc
Returns the FS::cust_svc record for this account (see L<FS::cust_svc>).
@@ -3046,61 +3118,4 @@ schema.html from the base documentation.
=cut
-=item domain_select_hash %OPTIONS
-
-Returns a hash SVCNUM => DOMAIN ... representing the domains this customer
-may at present purchase.
-
-Currently available options are: I<pkgnum> I<svcpart>
-
-=cut
-
-sub domain_select_hash {
- my ($self, %options) = @_;
- my %domains = ();
- my $part_svc;
- my $cust_pkg;
-
- if (ref($self)) {
- $part_svc = $self->part_svc;
- $cust_pkg = $self->cust_svc->cust_pkg
- if $self->cust_svc;
- }
-
- $part_svc = qsearchs('part_svc', { 'svcpart' => $options{svcpart} })
- if $options{'svcpart'};
-
- $cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $options{pkgnum} })
- if $options{'pkgnum'};
-
- if ($part_svc && ( $part_svc->part_svc_column('domsvc')->columnflag eq 'S'
- || $part_svc->part_svc_column('domsvc')->columnflag eq 'F')) {
- %domains = map { $_->svcnum => $_->domain }
- map { qsearchs('svc_domain', { 'svcnum' => $_ }) }
- split(',', $part_svc->part_svc_column('domsvc')->columnvalue);
- }elsif ($cust_pkg && !$conf->exists('svc_acct-alldomains') ) {
- %domains = map { $_->svcnum => $_->domain }
- map { qsearchs('svc_domain', { 'svcnum' => $_->svcnum }) }
- map { qsearch('cust_svc', { 'pkgnum' => $_->pkgnum } ) }
- qsearch('cust_pkg', { 'custnum' => $cust_pkg->custnum });
- }else{
- %domains = map { $_->svcnum => $_->domain } qsearch('svc_domain', {} );
- }
-
- if ($part_svc && $part_svc->part_svc_column('domsvc')->columnflag eq 'D') {
- my $svc_domain = qsearchs('svc_domain',
- { 'svcnum' => $part_svc->part_svc_column('domsvc')->columnvalue } );
- if ( $svc_domain ) {
- $domains{$svc_domain->svcnum} = $svc_domain->domain;
- }else{
- warn "unknown svc_domain.svcnum for part_svc_column domsvc: ".
- $part_svc->part_svc_column('domsvc')->columnvalue;
-
- }
- }
-
- (%domains);
-}
-
1;
-
diff --git a/FS/FS/svc_domain.pm b/FS/FS/svc_domain.pm
index 8ca30c2ff..d6eaf2579 100644
--- a/FS/FS/svc_domain.pm
+++ b/FS/FS/svc_domain.pm
@@ -89,6 +89,8 @@ FS::svc_Common. The following fields are currently supported:
=item expiration_date - UNIX timestamp
+=item max_accounts
+
=back
=head1 METHODS
@@ -109,6 +111,86 @@ sub table_info {
'cancel_weight' => 60,
'fields' => {
'domain' => 'Domain',
+ 'parent_svcnum' => {
+ label => 'Parent domain / Communigate administrator domain',
+ type => 'select',
+ select_table => 'svc_domain',
+ select_key => 'svcnum',
+ select_label => 'domain',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'max_accounts' => { label => 'Maximum number of accounts',
+ 'disable_inventory' => 1,
+ },
+ 'cgp_aliases' => {
+ label => 'Communigate aliases',
+ type => 'text',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'cgp_accessmodes' => {
+ label => 'Communigate enabled services',
+ type => 'communigate_pro-accessmodes',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+
+ 'acct_def_cgp_accessmodes' => {
+ label => 'Acct. default Communigate enabled services',
+ type => 'communigate_pro-accessmodes',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'acct_def_password_selfchange' => { label => 'Acct. default Password modification',
+ type => 'checkbox',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'acct_def_password_recover' => { label => 'Acct. default Password recovery',
+ type => 'checkbox',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'acct_def_cgp_deletemode' => {
+ label => 'Acct. default Communigate message delete method',
+ type => 'select',
+ select_list => [ 'Move To Trash', 'Immediately', 'Mark' ],
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'acct_def_cgp_emptytrash' => {
+ label => 'Acct. default Communigate on logout remove trash',
+ type => 'text',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'acct_def_quota' => {
+ label => 'Acct. default Quota', #Mail storage limit
+ type => 'text',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'acct_def_file_quota'=> {
+ label => 'Acct. default File storage limit',
+ type => 'text',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'acct_def_file_maxnum'=> {
+ label => 'Acct. default Number of files limit',
+ type => 'text',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+ 'acct_def_file_maxsize'=> {
+ label => 'Acct. default File size limit',
+ type => 'text',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
+
+
},
};
}
@@ -290,7 +372,8 @@ sub replace {
: $new->replace_old;
return "Can't change domain - reorder."
- if $old->getfield('domain') ne $new->getfield('domain');
+ if $old->getfield('domain') ne $new->getfield('domain')
+ && ! $conf->exists('svc_domain-edit_domain');
# Better to do it here than to force the caller to remember that svc_domain is weird.
$new->setfield(action => 'I');
@@ -335,6 +418,17 @@ sub check {
my $error = $self->ut_numbern('svcnum')
|| $self->ut_numbern('catchall')
+ || $self->ut_numbern('max_accounts')
+ || $self->ut_textn('cgp_aliases') #well
+ || $self->ut_enum('acct_def_password_selfchange', [ '', 'Y' ])
+ || $self->ut_enum('acct_def_password_recover', [ '', 'Y' ])
+ || $self->ut_textn('acct_def_cgp_accessmodes')
+ || $self->ut_alphan('acct_def_quota')
+ || $self->ut_alphan('acct_def_file_quota')
+ || $self->ut_alphan('acct_def_maxnum')
+ || $self->ut_alphan('acct_def_maxsize')
+ || $self->ut_alphasn('acct_def_cgp_deletemode')
+ || $self->ut_alphan('acct_def_cgp_emptytrash')
;
return $error if $error;
@@ -429,6 +523,7 @@ sub domain_record {
'PTR' => sub { $_[0]->reczone <=> $_[1]->reczone },
);
+ map { $_ } #return $self->num_domain_record( PARAMS ) unless wantarray;
sort { $order{$a->rectype} <=> $order{$b->rectype}
or &{ $sort{$a->rectype} || sub { 0; } }($a, $b)
}
diff --git a/FS/FS/svc_external.pm b/FS/FS/svc_external.pm
index aca7c1bcc..338fdbcd9 100644
--- a/FS/FS/svc_external.pm
+++ b/FS/FS/svc_external.pm
@@ -76,7 +76,7 @@ sub table_info {
},
'title' => { label => 'Printed on invoice line items',
type => 'text',
- disable_inventory => 1,
+ #disable_inventory => 1,
},
},
};
diff --git a/FS/FS/svc_mailinglist.pm b/FS/FS/svc_mailinglist.pm
new file mode 100644
index 000000000..ba297eedc
--- /dev/null
+++ b/FS/FS/svc_mailinglist.pm
@@ -0,0 +1,330 @@
+package FS::svc_mailinglist;
+
+use strict;
+use base qw( FS::svc_Domain_Mixin FS::svc_Common );
+use Scalar::Util qw( blessed );
+use FS::Record qw( qsearchs dbh ); # qsearch );
+use FS::svc_domain;
+use FS::mailinglist;
+
+=head1 NAME
+
+FS::svc_mailinglist - Object methods for svc_mailinglist records
+
+=head1 SYNOPSIS
+
+ use FS::svc_mailinglist;
+
+ $record = new FS::svc_mailinglist \%hash;
+ $record = new FS::svc_mailinglist { 'column' => 'value' };
+
+ $error = $record->insert;
+
+ $error = $new_record->replace($old_record);
+
+ $error = $record->delete;
+
+ $error = $record->check;
+
+=head1 DESCRIPTION
+
+An FS::svc_mailinglist object represents a mailing list customer service.
+FS::svc_mailinglist inherits from FS::Record. The following fields are
+currently supported:
+
+=over 4
+
+=item svcnum
+
+primary key
+
+=item username
+
+username
+
+=item domsvc
+
+domsvc
+
+=item listnum
+
+listnum
+
+=item reply_to_group
+
+reply_to_group
+
+=item remove_author
+
+remove_author
+
+=item reject_auto
+
+reject_auto
+
+=item remove_to_and_cc
+
+remove_to_and_cc
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item new HASHREF
+
+Creates a new record. To add the record to the database, see L<"insert">.
+
+Note that this stores the hash reference, not a distinct copy of the hash it
+points to. You can ask the object for a copy with the I<hash> method.
+
+=cut
+
+# the new method can be inherited from FS::Record, if a table method is defined
+
+sub table { 'svc_mailinglist'; }
+
+sub table_info {
+ {
+ 'name' => 'Mailing list',
+ 'display_weight' => 80,
+ 'cancel_weight' => 55,
+ 'fields' => {
+ 'username' => { 'label' => 'List address',
+ 'disable_default' => 1,
+ 'disable_fixed' => 1,
+ 'disable_inventory' => 1,
+ },
+ 'domsvc' => { 'label' => 'List address domain',
+ 'disable_inventory' => 1,
+ },
+ 'domain' => 'List address domain',
+ 'listnum' => { 'label' => 'List name',
+ 'disable_inventory' => 1,
+ },
+ 'listname' => 'List name', #actually mailinglist.listname
+ 'reply_to' => { 'label' => 'Reply-To list',
+ 'type' => 'checkbox',
+ 'disable_inventory' => 1,
+ 'disable_select' => 1,
+ },
+ 'remove_from' => { 'label' => 'Remove From: from messages',
+ 'type' => 'checkbox',
+ 'disable_inventory' => 1,
+ 'disable_select' => 1,
+ },
+ 'reject_auto' => { 'label' => 'Reject automatic messages',
+ 'type' => 'checkbox',
+ 'disable_inventory' => 1,
+ 'disable_select' => 1,
+ },
+ 'remove_to_and_cc' => { 'label' => 'Remove To: and Cc: from messages',
+ 'type' => 'checkbox',
+ 'disable_inventory' => 1,
+ 'disable_select' => 1,
+ },
+ },
+ };
+}
+
+=item insert
+
+Adds this record to the database. If there is an error, returns the error,
+otherwise returns false.
+
+=cut
+
+sub insert {
+ my $self = shift;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ my $error;
+
+ #attach to existing lists? sound scary
+ #unless ( $self->listnum ) {
+ my $mailinglist = new FS::mailinglist {
+ 'listname' => $self->get('listname'),
+ };
+ $error = $mailinglist->insert;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ $self->listnum($mailinglist->listnum);
+ #}
+
+ $error = $self->SUPER::insert(@_);
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
+}
+
+=item delete
+
+Delete this record from the database.
+
+=cut
+
+sub delete {
+ my $self = shift;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ my $error = $self->mailinglist->delete || $self->SUPER::delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
+
+}
+
+=item replace OLD_RECORD
+
+Replaces the OLD_RECORD with this one in the database. If there is an error,
+returns the error, otherwise returns false.
+
+=cut
+
+sub replace {
+ my $new = shift;
+
+ my $old = ( blessed($_[0]) && $_[0]->isa('FS::Record') )
+ ? shift
+ : $new->replace_old;
+
+ return "can't change listnum" if $old->listnum != $new->listnum; #?
+
+ my %options = @_;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ if ( $new->get('listname') && $new->get('listname') ne $old->listname ) {
+ my $mailinglist = $old->mailinglist;
+ $mailinglist->listname($new->get('listname'));
+ my $error = $mailinglist->replace;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error if $error;
+ }
+ }
+
+ my $error = $new->SUPER::replace($old, %options);
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error if $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ ''; #no error
+
+
+}
+
+=item check
+
+Checks all fields to make sure this is a valid record. If there is
+an error, returns the error, otherwise returns false. Called by the insert
+and replace methods.
+
+=cut
+
+# the check method should currently be supplied - FS::Record contains some
+# data checking routines
+
+sub check {
+ my $self = shift;
+
+ my $error =
+ $self->ut_numbern('svcnum')
+ || $self->ut_text('username')
+ || $self->ut_foreign_key('domsvc', 'svc_domain', 'svcnum')
+ #|| $self->ut_foreign_key('listnum', 'mailinglist', 'listnum')
+ || $self->ut_foreign_keyn('listnum', 'mailinglist', 'listnum')
+ || $self->ut_enum('reply_to_group', [ '', 'Y' ] )
+ || $self->ut_enum('remove_author', [ '', 'Y' ] )
+ || $self->ut_enum('reject_auto', [ '', 'Y' ] )
+ || $self->ut_enum('remove_to_and_cc', [ '', 'Y' ] )
+ ;
+ return $error if $error;
+
+ return "Can't remove listnum" if $self->svcnum && ! $self->listnum;
+
+ $self->SUPER::check;
+}
+
+=item mailinglist
+
+=cut
+
+sub mailinglist {
+ my $self = shift;
+ qsearchs('mailinglist', { 'listnum' => $self->listnum } );
+}
+
+=item listname
+
+=cut
+
+sub listname {
+ my $self = shift;
+ my $mailinglist = $self->mailinglist;
+ $mailinglist ? $mailinglist->listname : '';
+}
+
+=item label
+
+=cut
+
+sub label {
+ my $self = shift;
+ $self->listname. ' <'. $self->username. '@'. $self->domain. '>';
+}
+
+=back
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::Record>, schema.html from the base documentation.
+
+=cut
+
+1;
+
diff --git a/FS/FS/svc_pbx.pm b/FS/FS/svc_pbx.pm
new file mode 100644
index 000000000..6ae04189c
--- /dev/null
+++ b/FS/FS/svc_pbx.pm
@@ -0,0 +1,277 @@
+package FS::svc_pbx;
+
+use strict;
+use base qw( FS::svc_External_Common );
+use FS::Record qw( qsearch qsearchs dbh );
+use FS::cust_svc;
+use FS::svc_phone;
+use FS::svc_acct;
+
+=head1 NAME
+
+FS::svc_pbx - Object methods for svc_pbx records
+
+=head1 SYNOPSIS
+
+ use FS::svc_pbx;
+
+ $record = new FS::svc_pbx \%hash;
+ $record = new FS::svc_pbx { 'column' => 'value' };
+
+ $error = $record->insert;
+
+ $error = $new_record->replace($old_record);
+
+ $error = $record->delete;
+
+ $error = $record->check;
+
+ $error = $record->suspend;
+
+ $error = $record->unsuspend;
+
+ $error = $record->cancel;
+
+=head1 DESCRIPTION
+
+An FS::svc_pbx object represents a PBX tenant. FS::svc_pbx inherits from
+FS::svc_Common. The following fields are currently supported:
+
+=over 4
+
+=item svcnum
+
+Primary key (assigned automatcially for new accounts)
+
+=item id
+
+(Unique?) number of external record
+
+=item title
+
+PBX name
+
+=item max_extensions
+
+Maximum number of extensions
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item new HASHREF
+
+Creates a new PBX tenant. To add the PBX tenant to the database, see
+L<"insert">.
+
+Note that this stores the hash reference, not a distinct copy of the hash it
+points to. You can ask the object for a copy with the I<hash> method.
+
+=cut
+
+sub table { 'svc_pbx'; }
+
+sub table_info {
+ {
+ 'name' => 'PBX',
+ 'name_plural' => 'PBXs', #optional,
+ 'longname_plural' => 'PBXs', #optional
+ 'sorts' => 'svcnum', # optional sort field (or arrayref of sort fields, main first)
+ 'display_weight' => 70,
+ 'cancel_weight' => 90,
+ 'fields' => {
+ 'id' => 'ID',
+ 'title' => 'Name',
+ 'max_extensions' => 'Maximum number of User Extensions',
+# 'field' => 'Description',
+# 'another_field' => {
+# 'label' => 'Description',
+# 'def_label' => 'Description for service definitions',
+# 'type' => 'text',
+# 'disable_default' => 1, #disable switches
+# 'disable_fixed' => 1, #
+# 'disable_inventory' => 1, #
+# },
+# 'foreign_key' => {
+# 'label' => 'Description',
+# 'def_label' => 'Description for service defs',
+# 'type' => 'select',
+# 'select_table' => 'foreign_table',
+# 'select_key' => 'key_field_in_table',
+# 'select_label' => 'label_field_in_table',
+# },
+
+ },
+ };
+}
+
+=item search_sql STRING
+
+Class method which returns an SQL fragment to search for the given string.
+
+=cut
+
+#XXX
+#or something more complicated if necessary
+#sub search_sql {
+# my($class, $string) = @_;
+# $class->search_sql_field('title', $string);
+#}
+
+=item label
+
+Returns the title field for this PBX tenant.
+
+=cut
+
+sub label {
+ my $self = shift;
+ $self->title;
+}
+
+=item insert
+
+Adds this record to the database. If there is an error, returns the error,
+otherwise returns false.
+
+The additional fields pkgnum and svcpart (see L<FS::cust_svc>) should be
+defined. An FS::cust_svc record will be created and inserted.
+
+=cut
+
+sub insert {
+ my $self = shift;
+ my $error;
+
+ $error = $self->SUPER::insert;
+ return $error if $error;
+
+ '';
+}
+
+=item delete
+
+Delete this record from the database.
+
+=cut
+
+sub delete {
+ my $self = shift;
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ foreach my $svc_phone (qsearch('svc_phone', { 'pbxsvc' => $self->svcnum } )) {
+ $svc_phone->pbxsvc('');
+ my $error = $svc_phone->replace;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
+ foreach my $svc_acct (qsearch('svc_acct', { 'pbxsvc' => $self->svcnum } )) {
+ my $error = $svc_acct->delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+ }
+
+ my $error = $self->SUPER::delete;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
+}
+
+
+=item replace OLD_RECORD
+
+Replaces the OLD_RECORD with this one in the database. If there is an error,
+returns the error, otherwise returns false.
+
+=cut
+
+sub replace {
+ my ( $new, $old ) = ( shift, shift );
+ my $error;
+
+ $error = $new->SUPER::replace($old);
+ return $error if $error;
+
+ '';
+}
+
+=item suspend
+
+Called by the suspend method of FS::cust_pkg (see L<FS::cust_pkg>).
+
+=item unsuspend
+
+Called by the unsuspend method of FS::cust_pkg (see L<FS::cust_pkg>).
+
+=item cancel
+
+Called by the cancel method of FS::cust_pkg (see L<FS::cust_pkg>).
+
+=item check
+
+Checks all fields to make sure this is a valid PBX tenant. If there is
+an error, returns the error, otherwise returns false. Called by the insert
+and repalce methods.
+
+=cut
+
+sub check {
+ my $self = shift;
+
+ my $x = $self->setfixed;
+ return $x unless ref($x);
+ my $part_svc = $x;
+
+
+ $self->SUPER::check;
+}
+
+#XXX this is a way-too simplistic implementation
+# at the very least, title should be unique across exports that need that or
+# controlled by a conf setting or something
+sub _check_duplicate {
+ my $self = shift;
+
+ $self->lock_table;
+
+ if ( qsearchs( 'svc_pbx', { 'title' => $self->title } ) ) {
+ return "Name in use";
+ } else {
+ return '';
+ }
+}
+
+=back
+
+=head1 BUGS
+
+=head1 SEE ALSO
+
+L<FS::svc_Common>, L<FS::Record>, L<FS::cust_svc>, L<FS::part_svc>,
+L<FS::cust_pkg>, schema.html from the base documentation.
+
+=cut
+
+1;
+
diff --git a/FS/FS/svc_phone.pm b/FS/FS/svc_phone.pm
index 88582d393..30572ecc0 100644
--- a/FS/FS/svc_phone.pm
+++ b/FS/FS/svc_phone.pm
@@ -1,15 +1,21 @@
package FS::svc_phone;
use strict;
-use vars qw( @ISA @pw_set $conf );
+use base qw( FS::svc_Domain_Mixin FS::location_Mixin FS::svc_Common );
+use vars qw( $DEBUG $me @pw_set $conf $phone_name_max );
+use Data::Dumper;
+use Scalar::Util qw( blessed );
use FS::Conf;
use FS::Record qw( qsearch qsearchs dbh );
use FS::Msgcat qw(gettext);
-use FS::svc_Common;
use FS::part_svc;
use FS::phone_device;
+use FS::svc_pbx;
+use FS::svc_domain;
+use FS::cust_location;
-@ISA = qw( FS::svc_Common );
+$me = '[' . __PACKAGE__ . ']';
+$DEBUG = 0;
#avoid l 1 and o O 0
@pw_set = ( 'a'..'k', 'm','n', 'p-z', 'A'..'N', 'P'..'Z' , '2'..'9' );
@@ -17,6 +23,7 @@ use FS::phone_device;
#ask FS::UID to run this stuff for us later
$FS::UID::callback{'FS::svc_acct'} = sub {
$conf = new FS::Conf;
+ $phone_name_max = $conf->config('svc_phone-phone_name-max_length');
};
=head1 NAME
@@ -67,6 +74,10 @@ Voicemail PIN
=item phone_name
+=item pbxsvc
+
+Optional svcnum from svc_pbx
+
=back
=head1 METHODS
@@ -104,6 +115,24 @@ sub table_info {
},
'sip_password' => 'SIP password',
'phone_name' => 'Name',
+ 'pbxsvc' => { label => 'PBX',
+ type => 'select-svc_pbx.html',
+ disable_inventory => 1,
+ disable_select => 1, #UI wonky, pry works otherwise
+ },
+ 'domsvc' => {
+ label => 'Domain',
+ type => 'select',
+ select_table => 'svc_domain',
+ select_key => 'svcnum',
+ select_label => 'domain',
+ disable_inventory => 1,
+ },
+ 'locationnum' => {
+ label => 'E911 location',
+ disable_inventory => 1,
+ disable_select => 1,
+ },
},
};
}
@@ -149,18 +178,61 @@ sub label {
my $self = shift;
my $phonenum = $self->phonenum; #XXX format it better
my $label = $phonenum;
+ $label .= '@'.$self->domain if $self->domsvc;
$label .= ' ('.$self->phone_name.')' if $self->phone_name;
$label;
}
=item insert
-Adds this record to the database. If there is an error, returns the error,
-otherwise returns false.
+Adds this phone number to the database. If there is an error, returns the
+error, otherwise returns false.
=cut
-# the insert method can be inherited from FS::Record
+sub insert {
+ my $self = shift;
+ my %options = @_;
+
+ if ( $DEBUG ) {
+ warn "[$me] insert called on $self: ". Dumper($self).
+ "\nwith options: ". Dumper(%options);
+ }
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ #false laziness w/cust_pkg.pm... move this to location_Mixin? that would
+ #make it more of a base class than a mixin... :)
+ if ( $options{'cust_location'}
+ && ( ! $self->locationnum || $self->locationnum == -1 ) ) {
+ my $error = $options{'cust_location'}->insert;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "inserting cust_location (transaction rolled back): $error";
+ }
+ $self->locationnum( $options{'cust_location'}->locationnum );
+ }
+ #what about on-the-fly edits? if the ui supports it?
+
+ my $error = $self->SUPER::insert(%options);
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ '';
+
+}
=item delete
@@ -210,7 +282,53 @@ returns the error, otherwise returns false.
=cut
-# the replace method can be inherited from FS::Record
+sub replace {
+ my $new = shift;
+
+ my $old = ( blessed($_[0]) && $_[0]->isa('FS::Record') )
+ ? shift
+ : $new->replace_old;
+
+ my %options = @_;
+
+ if ( $DEBUG ) {
+ warn "[$me] replacing $old with $new\n".
+ "\nwith options: ". Dumper(%options);
+ }
+
+ local $SIG{HUP} = 'IGNORE';
+ local $SIG{INT} = 'IGNORE';
+ local $SIG{QUIT} = 'IGNORE';
+ local $SIG{TERM} = 'IGNORE';
+ local $SIG{TSTP} = 'IGNORE';
+ local $SIG{PIPE} = 'IGNORE';
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
+ #false laziness w/cust_pkg.pm... move this to location_Mixin? that would
+ #make it more of a base class than a mixin... :)
+ if ( $options{'cust_location'}
+ && ( ! $new->locationnum || $new->locationnum == -1 ) ) {
+ my $error = $options{'cust_location'}->insert;
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "inserting cust_location (transaction rolled back): $error";
+ }
+ $new->locationnum( $options{'cust_location'}->locationnum );
+ }
+ #what about on-the-fly edits? if the ui supports it?
+
+ my $error = $new->SUPER::replace($old, %options);
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return $error if $error;
+ }
+
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+ ''; #no error
+}
=item suspend
@@ -251,6 +369,8 @@ sub check {
}
$self->phonenum($phonenum);
+ $self->locationnum('') if !$self->locationnum || $self->locationnum == -1;
+
my $error =
$self->ut_numbern('svcnum')
|| $self->ut_numbern('countrycode')
@@ -258,9 +378,16 @@ sub check {
|| $self->ut_anything('sip_password')
|| $self->ut_numbern('pin')
|| $self->ut_textn('phone_name')
+ || $self->ut_foreign_keyn('pbxsvc', 'svc_pbx', 'svcnum' )
+ || $self->ut_foreign_keyn('domsvc', 'svc_domain', 'svcnum' )
+ || $self->ut_foreign_keyn('locationnum', 'cust_location', 'locationnum')
;
return $error if $error;
+ return 'Name ('. $self->phone_name.
+ ") is longer than $phone_name_max characters"
+ if $phone_name_max && length($self->phone_name) > $phone_name_max;
+
$self->countrycode(1) unless $self->countrycode;
unless ( length($self->sip_password) ) {
@@ -387,6 +514,17 @@ sub phone_device {
qsearch('phone_device', { 'svcnum' => $self->svcnum } );
}
+#override location_Mixin version cause we want to try the cust_pkg location
+#in between us and cust_main
+# XXX what to do in the unlinked case??? return a pseudo-object that returns
+# empty fields?
+sub cust_location_or_main {
+ my $self = shift;
+ return $self->cust_location if $self->locationnum;
+ my $cust_pkg = $self->cust_svc->cust_pkg;
+ $cust_pkg ? $cust_pkg->cust_location_or_main : '';
+}
+
=back
=head1 BUGS
diff --git a/FS/FS/tax_rate.pm b/FS/FS/tax_rate.pm
index 30d7f58d0..75e72c542 100644
--- a/FS/FS/tax_rate.pm
+++ b/FS/FS/tax_rate.pm
@@ -3,11 +3,11 @@ package FS::tax_rate;
use strict;
use vars qw( @ISA $DEBUG $me
%tax_unittypes %tax_maxtypes %tax_basetypes %tax_authorities
- %tax_passtypes %GetInfoType );
+ %tax_passtypes %GetInfoType $keep_cch_files );
use Date::Parse;
use DateTime;
use DateTime::Format::Strptime;
-use Storable qw( thaw );
+use Storable qw( thaw nfreeze );
use IO::File;
use File::Temp;
use LWP::UserAgent;
@@ -31,6 +31,7 @@ use FS::Misc qw( csv_from_fixed );
$DEBUG = 0;
$me = '[FS::tax_rate]';
+$keep_cch_files = 0;
=head1 NAME
@@ -501,7 +502,9 @@ given customer (see L<FS::cust_main>)
=cut
+ #hot
sub tax_on_tax {
+ #akshun
my $self = shift;
my $cust_main = shift;
@@ -575,6 +578,10 @@ sub tax_rate_location {
=cut
+sub _progressbar_foo {
+ return (0, time, 5);
+}
+
sub batch_import {
my ($param, $job) = @_;
@@ -603,7 +610,7 @@ sub batch_import {
}
my $line;
- my ( $count, $last, $min_sec ) = (0, time, 5); #progressbar
+ my ( $count, $last, $min_sec ) = _progressbar_foo();
if ( $job || scalar(@column_callbacks) ) {
my $error =
csv_from_fixed(\$fh, \$count, \@column_lengths, \@column_callbacks);
@@ -629,6 +636,7 @@ sub batch_import {
my $dt = $parser->parse_datetime( $hash->{'effective_date'} );
$hash->{'effective_date'} = $dt ? $dt->epoch : '';
+ $hash->{$_} =~ s/\s//g foreach qw( inoutcity inoutlocal ) ;
$hash->{$_} = sprintf("%.2f", $hash->{$_}) foreach qw( taxbase taxmax );
my $taxclassid =
@@ -874,57 +882,43 @@ Load a batch import as a queued JSRPC job
sub process_batch_import {
my $job = shift;
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+
my $param = thaw(decode_base64(shift));
- my $format = $param->{'format'}; #well... this is all cch specific
+ my $args = '$job, encode_base64( nfreeze( $param ) )';
- my $files = $param->{'uploaded_files'}
- or die "No files provided.";
+ my $method = '_perform_batch_import';
+ if ( $param->{reload} ) {
+ $method = 'process_batch_reload';
+ }
- my (%files) = map { /^(\w+):([\.\w]+)$/ ? ($1,$2):() } split /,/, $files;
+ eval "$method($args);";
+ if ($@) {
+ $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
+ die $@;
+ }
- if ($format eq 'cch' || $format eq 'cch-fixed') {
+ #success!
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+}
- my $oldAutoCommit = $FS::UID::AutoCommit;
- local $FS::UID::AutoCommit = 0;
- my $dbh = dbh;
- my $error = '';
- my $have_location = 0;
-
- my @list = ( 'GEOCODE', 'geofile', \&FS::tax_rate_location::batch_import,
- 'CODE', 'codefile', \&FS::tax_class::batch_import,
- 'PLUS4', 'plus4file', \&FS::cust_tax_location::batch_import,
- 'ZIP', 'zipfile', \&FS::cust_tax_location::batch_import,
- 'TXMATRIX', 'txmatrix', \&FS::part_pkg_taxrate::batch_import,
- 'DETAIL', 'detail', \&FS::tax_rate::batch_import,
- );
- while( scalar(@list) ) {
- my ($name, $file, $import_sub) = (shift @list, shift @list, shift @list);
- unless ($files{$file}) {
- next if $name eq 'PLUS4';
- $error = "No $name supplied";
- $error = "Neither PLUS4 nor ZIP supplied"
- if ($name eq 'ZIP' && !$have_location);
- next;
- }
- $have_location = 1 if $name eq 'PLUS4';
- my $fmt = $format. ( $name eq 'ZIP' ? '-zip' : '' );
- my $dir = '%%%FREESIDE_CACHE%%%/cache.'. $FS::UID::datasrc;
- my $filename = "$dir/". $files{$file};
- open my $fh, "< $filename" or $error ||= "Can't open $name file: $!";
+sub _perform_batch_import {
+ my $job = shift;
- $error ||= &{$import_sub}({ 'filehandle' => $fh, 'format' => $fmt }, $job);
- close $fh;
- unlink $filename or warn "Can't delete $filename: $!";
- }
-
- if ($error) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }else{
- $dbh->commit or die $dbh->errstr if $oldAutoCommit;
- }
+ my $param = thaw(decode_base64(shift));
+ my $format = $param->{'format'}; #well... this is all cch specific
- }elsif ($format eq 'cch-update' || $format eq 'cch-fixed-update') {
+ my $files = $param->{'uploaded_files'}
+ or die "No files provided.";
+
+ my (%files) = map { /^(\w+):((taxdata\/\w+\.\w+\/)?[\.\w]+)$/ ? ($1,$2):() }
+ split /,/, $files;
+
+ if ( $format eq 'cch' || $format eq 'cch-fixed'
+ || $format eq 'cch-update' || $format eq 'cch-fixed-update' )
+ {
my $oldAutoCommit = $FS::UID::AutoCommit;
local $FS::UID::AutoCommit = 0;
@@ -933,116 +927,70 @@ sub process_batch_import {
my @insert_list = ();
my @delete_list = ();
my @predelete_list = ();
+ my $insertname = '';
+ my $deletename = '';
+ my $dir = '%%%FREESIDE_CACHE%%%/cache.'. $FS::UID::datasrc;
- my @list = ( 'GEOCODE', 'geofile', \&FS::tax_rate_location::batch_import,
- 'CODE', 'codefile', \&FS::tax_class::batch_import,
- 'PLUS4', 'plus4file', \&FS::cust_tax_location::batch_import,
- 'ZIP', 'zipfile', \&FS::cust_tax_location::batch_import,
- 'TXMATRIX', 'txmatrix', \&FS::part_pkg_taxrate::batch_import,
+ my @list = ( 'GEOCODE', \&FS::tax_rate_location::batch_import,
+ 'CODE', \&FS::tax_class::batch_import,
+ 'PLUS4', \&FS::cust_tax_location::batch_import,
+ 'ZIP', \&FS::cust_tax_location::batch_import,
+ 'TXMATRIX', \&FS::part_pkg_taxrate::batch_import,
+ 'DETAIL', \&FS::tax_rate::batch_import,
);
- my $dir = '%%%FREESIDE_CACHE%%%/cache.'. $FS::UID::datasrc;
while( scalar(@list) ) {
- my ($name, $file, $import_sub) = (shift @list, shift @list, shift @list);
- unless ($files{$file}) {
- my $vendor = $name eq 'ZIP' ? 'cch' : 'cch-zip';
- next # update expected only for previously installed location data
- if ( ($name eq 'PLUS4' || $name eq 'ZIP')
- && !scalar( qsearch( { table => 'cust_tax_location',
- hashref => { data_vendor => $vendor },
- select => 'DISTINCT data_vendor',
- } )
- )
- );
+ my ( $name, $import_sub ) = splice( @list, 0, 2 );
+ my $file = lc($name). 'file';
+ unless ($files{$file}) {
$error = "No $name supplied";
next;
}
+ next if $name eq 'DETAIL' && $format =~ /update/;
+
my $filename = "$dir/". $files{$file};
- open my $fh, "< $filename" or $error ||= "Can't open $name file $filename: $!";
- unlink $filename or warn "Can't delete $filename: $!";
-
- my $ifh = new File::Temp( TEMPLATE => "$name.insert.XXXXXXXX",
- DIR => $dir,
- UNLINK => 0, #meh
- ) or die "can't open temp file: $!\n";
-
- my $dfh = new File::Temp( TEMPLATE => "$name.delete.XXXXXXXX",
- DIR => $dir,
- UNLINK => 0, #meh
- ) or die "can't open temp file: $!\n";
-
- my $insert_pattern = ($format eq 'cch-update') ? qr/"I"\s*$/ : qr/I\s*$/;
- my $delete_pattern = ($format eq 'cch-update') ? qr/"D"\s*$/ : qr/D\s*$/;
- while(<$fh>) {
- my $handle = '';
- $handle = $ifh if $_ =~ /$insert_pattern/;
- $handle = $dfh if $_ =~ /$delete_pattern/;
- unless ($handle) {
- $error = "bad input line: $_" unless $handle;
- last;
+
+ if ( $format =~ /update/ ) {
+
+ ( $error, $insertname, $deletename ) =
+ _perform_cch_insert_delete_split( $name, $filename, $dir, $format )
+ unless $error;
+ last if $error;
+
+ unlink $filename or warn "Can't delete $filename: $!"
+ unless $keep_cch_files;
+ push @insert_list, $name, $insertname, $import_sub, $format;
+ if ( $name eq 'GEOCODE' ) { #handle this whole ordering issue better
+ unshift @predelete_list, $name, $deletename, $import_sub, $format;
+ } else {
+ unshift @delete_list, $name, $deletename, $import_sub, $format;
}
- print $handle $_;
- }
- close $fh;
- close $ifh;
- close $dfh;
- push @insert_list, $name, $ifh->filename, $import_sub;
- if ( $name eq 'GEOCODE' ) { #handle this whole ordering issue better
- unshift @predelete_list, $name, $dfh->filename, $import_sub;
} else {
- unshift @delete_list, $name, $dfh->filename, $import_sub;
+
+ push @insert_list, $name, $filename, $import_sub, $format;
+
}
}
- while( scalar(@predelete_list) ) {
- my ($name, $file, $import_sub) =
- (shift @predelete_list, shift @predelete_list, shift @predelete_list);
+ push @insert_list,
+ 'DETAIL', "$dir/".$files{detail}, \&FS::tax_rate::batch_import, $format
+ if $format =~ /update/;
- my $fmt = $format. ( $name eq 'ZIP' ? '-zip' : '' );
- open my $fh, "< $file" or $error ||= "Can't open $name file $file: $!";
- $error ||=
- &{$import_sub}({ 'filehandle' => $fh, 'format' => $fmt }, $job);
- close $fh;
- unlink $file or warn "Can't delete $file: $!";
- }
+ $error ||= _perform_cch_tax_import( $job,
+ [ @predelete_list ],
+ [ @insert_list ],
+ [ @delete_list ],
+ );
- while( scalar(@insert_list) ) {
- my ($name, $file, $import_sub) =
- (shift @insert_list, shift @insert_list, shift @insert_list);
-
- my $fmt = $format. ( $name eq 'ZIP' ? '-zip' : '' );
- open my $fh, "< $file" or $error ||= "Can't open $name file $file: $!";
- $error ||=
- &{$import_sub}({ 'filehandle' => $fh, 'format' => $fmt }, $job);
- close $fh;
- unlink $file or warn "Can't delete $file: $!";
- }
- $error ||= "No DETAIL supplied"
- unless ($files{detail});
- open my $fh, "< $dir/". $files{detail}
- or $error ||= "Can't open DETAIL file: $!";
- $error ||=
- &FS::tax_rate::batch_import({ 'filehandle' => $fh, 'format' => $format },
- $job);
- close $fh;
- unlink "$dir/". $files{detail} or warn "Can't delete $files{detail}: $!"
- if $files{detail};
-
- while( scalar(@delete_list) ) {
- my ($name, $file, $import_sub) =
- (shift @delete_list, shift @delete_list, shift @delete_list);
-
- my $fmt = $format. ( $name eq 'ZIP' ? '-zip' : '' );
- open my $fh, "< $file" or $error ||= "Can't open $name file $file: $!";
- $error ||=
- &{$import_sub}({ 'filehandle' => $fh, 'format' => $fmt }, $job);
- close $fh;
+ @list = ( @predelete_list, @insert_list, @delete_list );
+ while( !$keep_cch_files && scalar(@list) ) {
+ my ( undef, $file, undef, undef ) = splice( @list, 0, 4 );
unlink $file or warn "Can't delete $file: $!";
}
-
+
if ($error) {
$dbh->rollback or die $dbh->errstr if $oldAutoCommit;
die $error;
@@ -1056,45 +1004,207 @@ sub process_batch_import {
}
-=item process_download_and_reload
-Download and process a tax update as a queued JSRPC job after wiping the
-existing wipable tax data.
+sub _perform_cch_tax_import {
+ my ( $job, $predelete_list, $insert_list, $delete_list ) = @_;
-=cut
+ my $error = '';
+ foreach my $list ($predelete_list, $insert_list, $delete_list) {
+ while( scalar(@$list) ) {
+ my ( $name, $file, $method, $format ) = splice( @$list, 0, 4 );
+ my $fmt = "$format-update";
+ $fmt = $format. ( lc($name) eq 'zip' ? '-zip' : '' );
+ open my $fh, "< $file" or $error ||= "Can't open $name file $file: $!";
+ $error ||= &{$method}({ 'filehandle' => $fh, 'format' => $fmt }, $job);
+ close $fh;
+ }
+ }
-sub process_download_and_reload {
- my $job = shift;
+ return $error;
+}
- my $param = thaw(decode_base64($_[0]));
- my $format = $param->{'format'}; #well... this is all cch specific
+sub _perform_cch_insert_delete_split {
+ my ($name, $filename, $dir, $format) = @_;
- my ( $count, $last, $min_sec, $imported ) = (0, time, 5, 0); #progressbar
- $count = 100;
+ my $error = '';
- if ( $job ) { # progress bar
- my $error = $job->update_statustext( int( 100 * $imported / $count ) );
+ open my $fh, "< $filename"
+ or $error ||= "Can't open $name file $filename: $!";
+
+ my $ifh = new File::Temp( TEMPLATE => "$name.insert.XXXXXXXX",
+ DIR => $dir,
+ UNLINK => 0, #meh
+ ) or die "can't open temp file: $!\n";
+ my $insertname = $ifh->filename;
+
+ my $dfh = new File::Temp( TEMPLATE => "$name.delete.XXXXXXXX",
+ DIR => $dir,
+ UNLINK => 0, #meh
+ ) or die "can't open temp file: $!\n";
+ my $deletename = $dfh->filename;
+
+ my $insert_pattern = ($format eq 'cch-update') ? qr/"I"\s*$/ : qr/I\s*$/;
+ my $delete_pattern = ($format eq 'cch-update') ? qr/"D"\s*$/ : qr/D\s*$/;
+ while(<$fh>) {
+ my $handle = '';
+ $handle = $ifh if $_ =~ /$insert_pattern/;
+ $handle = $dfh if $_ =~ /$delete_pattern/;
+ unless ($handle) {
+ $error = "bad input line: $_" unless $handle;
+ last;
+ }
+ print $handle $_;
+ }
+ close $fh;
+ close $ifh;
+ close $dfh;
+
+ return ($error, $insertname, $deletename);
+}
+
+sub _perform_cch_diff {
+ my ($name, $newdir, $olddir) = @_;
+
+ my %oldlines = ();
+
+ if ($olddir) {
+ open my $oldcsvfh, "$olddir/$name.txt"
+ or die "failed to open $olddir/$name.txt: $!\n";
+
+ while(<$oldcsvfh>) {
+ chomp;
+ $oldlines{$_} = 1;
+ }
+ close $oldcsvfh;
+ }
+
+ open my $newcsvfh, "$newdir/$name.txt"
+ or die "failed to open $newdir/$name.txt: $!\n";
+
+ my $dfh = new File::Temp( TEMPLATE => "$name.diff.XXXXXXXX",
+ DIR => "$newdir",
+ UNLINK => 0, #meh
+ ) or die "can't open temp file: $!\n";
+ my $diffname = $dfh->filename;
+
+ while(<$newcsvfh>) {
+ chomp;
+ if (exists($oldlines{$_})) {
+ $oldlines{$_} = 0;
+ } else {
+ print $dfh $_, ',"I"', "\n";
+ }
+ }
+ close $newcsvfh;
+
+ for (keys %oldlines) {
+ print $dfh $_, ',"D"', "\n" if $oldlines{$_};
+ }
+
+ close $dfh;
+
+ return $diffname;
+}
+
+sub _cch_fetch_and_unzip {
+ my ( $job, $urls, $secret, $dir ) = @_;
+
+ my $ua = new LWP::UserAgent;
+ foreach my $url (split ',', $urls) {
+ my @name = split '/', $url; #somewhat restrictive
+ my $name = pop @name;
+ $name =~ /([\w.]+)/; # untaint that which we don't trust so much any more
+ $name = $1;
+
+ open my $taxfh, ">$dir/$name" or die "Can't open $dir/$name: $!\n";
+
+ my ( $imported, $last, $min_sec ) = _progressbar_foo();
+ my $res = $ua->request(
+ new HTTP::Request( GET => $url ),
+ sub {
+ print $taxfh $_[0] or die "Can't write to $dir/$name: $!\n";
+ my $content_length = $_[1]->content_length;
+ $imported += length($_[0]);
+ if ( time - $min_sec > $last ) {
+ my $error = $job->update_statustext(
+ ($content_length ? int(100 * $imported/$content_length) : 0 ).
+ ",Downloading data from CCH"
+ );
+ die $error if $error;
+ $last = time;
+ }
+ },
+ );
+ die "download of $url failed: ". $res->status_line
+ unless $res->is_success;
+
+ close $taxfh;
+ my $error = $job->update_statustext( "0,Unpacking data" );
die $error if $error;
+ $secret =~ /([\w.]+)/; # untaint that which we don't trust so much any more
+ $secret = $1;
+ system('unzip', "-P", $secret, "-d", "$dir", "$dir/$name") == 0
+ or die "unzip -P $secret -d $dir $dir/$name failed";
+ #unlink "$dir/$name";
}
+}
+
+sub _cch_extract_csv_from_dbf {
+ my ( $job, $dir, $name ) = @_;
- my $oldAutoCommit = $FS::UID::AutoCommit;
- local $FS::UID::AutoCommit = 0;
- my $dbh = dbh;
- my $error = '';
+ eval "use Text::CSV_XS;";
+ die $@ if $@;
- my $sql =
- "SELECT count(*) FROM part_pkg_taxoverride JOIN tax_class ".
- "USING (taxclassnum) WHERE data_vendor = '$format'";
- my $sth = $dbh->prepare($sql) or die $dbh->errstr;
- $sth->execute
- or die "Unexpected error executing statement $sql: ". $sth->errstr;
- die "Don't (yet) know how to handle part_pkg_taxoverride records."
- if $sth->fetchrow_arrayref->[0];
+ eval "use XBase;";
+ die $@ if $@;
- # really should get a table EXCLUSIVE lock here
+ my ( $imported, $last, $min_sec ) = _progressbar_foo();
+ my $error = $job->update_statustext( "0,Unpacking $name" );
+ die $error if $error;
+ warn "opening $dir.new/$name.dbf\n" if $DEBUG;
+ my $table = new XBase 'name' => "$dir.new/$name.dbf";
+ die "failed to access $dir.new/$name.dbf: ". XBase->errstr
+ unless defined($table);
+ my $count = $table->last_record; # approximately;
+ open my $csvfh, ">$dir.new/$name.txt"
+ or die "failed to open $dir.new/$name.txt: $!\n";
+
+ my $csv = new Text::CSV_XS { 'always_quote' => 1 };
+ my @fields = $table->field_names;
+ my $cursor = $table->prepare_select;
+ my $format_date =
+ sub { my $date = shift;
+ $date =~ /^(\d{4})(\d{2})(\d{2})$/ && ($date = "$2/$3/$1");
+ $date;
+ };
+ while (my $row = $cursor->fetch_hashref) {
+ $csv->combine( map { ($table->field_type($_) eq 'D')
+ ? &{$format_date}($row->{$_})
+ : $row->{$_}
+ }
+ @fields
+ );
+ print $csvfh $csv->string, "\n";
+ $imported++;
+ if ( time - $min_sec > $last ) {
+ my $error = $job->update_statustext(
+ int(100 * $imported/$count). ",Unpacking $name"
+ );
+ die $error if $error;
+ $last = time;
+ }
+ }
+ $table->close;
+ close $csvfh;
+}
+
+sub _remember_disabled_taxes {
+ my ( $job, $format, $disabled_tax_rate ) = @_;
+
+ # cch specific hash
+
+ my ( $imported, $last, $min_sec ) = _progressbar_foo();
- #remember disabled taxes
- my %disabled_tax_rate = ();
my @items = qsearch( { table => 'tax_rate',
hashref => { disabled => 'Y',
data_vendor => $format,
@@ -1102,16 +1212,12 @@ sub process_download_and_reload {
select => 'geocode, taxclassnum',
}
);
- $count = scalar(@items);
+ my $count = scalar(@items);
foreach my $tax_rate ( @items ) {
if ( time - $min_sec > $last ) {
- my $error = $job->update_statustext(
+ $job->update_statustext(
int( 100 * $imported / $count ). ",Remembering disabled taxes"
);
- if ($error) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }
$last = time;
}
$imported++;
@@ -1121,148 +1227,75 @@ sub process_download_and_reload {
warn "failed to find tax_class ". $tax_rate->taxclassnum;
next;
}
- $disabled_tax_rate{$tax_rate->geocode. ':'. $tax_class->taxclass} = 1;
+ $disabled_tax_rate->{$tax_rate->geocode. ':'. $tax_class->taxclass} = 1;
}
+}
+
+sub _remember_tax_products {
+ my ( $job, $format, $taxproduct ) = @_;
- #remember tax products
# XXX FIXME this loop only works when cch is the only data provider
- my %taxproduct = ();
+
+ my ( $imported, $last, $min_sec ) = _progressbar_foo();
+
my $extra_sql = "WHERE taxproductnum IS NOT NULL OR ".
"0 < ( SELECT count(*) from part_pkg_option WHERE ".
" part_pkg_option.pkgpart = part_pkg.pkgpart AND ".
" optionname LIKE 'usage_taxproductnum_%' AND ".
" optionvalue != '' )";
- @items = qsearch( { table => 'part_pkg',
- select => 'DISTINCT pkgpart,taxproductnum',
- hashref => {},
- extra_sql => $extra_sql,
- }
- );
- $count = scalar(@items);
- $imported = 0;
+ my @items = qsearch( { table => 'part_pkg',
+ select => 'DISTINCT pkgpart,taxproductnum',
+ hashref => {},
+ extra_sql => $extra_sql,
+ }
+ );
+ my $count = scalar(@items);
foreach my $part_pkg ( @items ) {
if ( time - $min_sec > $last ) {
- my $error = $job->update_statustext(
+ $job->update_statustext(
int( 100 * $imported / $count ). ",Remembering tax products"
);
- if ($error) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }
$last = time;
}
$imported++;
warn "working with package part ". $part_pkg->pkgpart.
"which has a taxproductnum of ". $part_pkg->taxproductnum. "\n" if $DEBUG;
my $part_pkg_taxproduct = $part_pkg->taxproduct('');
- $taxproduct{$part_pkg->pkgpart}{''} = $part_pkg_taxproduct->taxproduct
- if $part_pkg_taxproduct;
+ $taxproduct->{$part_pkg->pkgpart}->{''} = $part_pkg_taxproduct->taxproduct
+ if $part_pkg_taxproduct && $part_pkg_taxproduct->data_vendor eq $format;
foreach my $option ( $part_pkg->part_pkg_option ) {
- next unless $option->optionname =~ /^usage_taxproductnum_(\w)$/;
+ next unless $option->optionname =~ /^usage_taxproductnum_(\w+)$/;
my $class = $1;
$part_pkg_taxproduct = $part_pkg->taxproduct($class);
- $taxproduct{$part_pkg->pkgpart}{$class} = $part_pkg_taxproduct->taxproduct
- if $part_pkg_taxproduct;
+ $taxproduct->{$part_pkg->pkgpart}->{$class} =
+ $part_pkg_taxproduct->taxproduct
+ if $part_pkg_taxproduct && $part_pkg_taxproduct->data_vendor eq $format;
}
}
+}
- #wipe out the old data
- $error = $job->update_statustext( "0,Removing old tax data" );
- if ($error) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }
- foreach my $tax_rate_location ( qsearch( 'tax_rate_location',
- { data_vendor => $format,
- disabled => '',
- }
- )
- )
- {
- $tax_rate_location->disabled('Y');
- my $error = $tax_rate_location->replace;
- if ( $error ) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }
- }
+sub _restore_remembered_tax_products {
+ my ( $job, $format, $taxproduct ) = @_;
- local $FS::part_pkg_taxproduct::delete_kludge = 1;
- my @table = qw(
- tax_rate part_pkg_taxrate part_pkg_taxproduct tax_class cust_tax_location
- );
- foreach my $table ( @table ) {
- my $dbh = dbh;
-# my $primary_key = dbdef->table($table)->primary_key;
-# my $sql = "SELECT $primary_key FROM $table WHERE data_vendor = ".
- my $sql = "DELETE FROM $table WHERE data_vendor = ".
- $dbh->quote($format);
- my $sth = $dbh->prepare($sql);
- unless ($sth) {
- $error = $dbh->errstr;
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }
- unless ($sth->execute) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die "Failed to execute $sql: ". $sth->errstr;
- }
-# foreach my $row ( @{ $sth->fetchall_arrayref } ) {
-# my $record = qsearchs( $table, { $primary_key => $row->[0] } )
-# or die "Failed to find $table with $primary_key ". $row->[0];
-# my $error = $record->delete;
-# if ( $error ) {
-# $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
-# die $error;
-# }
-# }
- }
+ # cch specific
- if ( $format eq 'cch' ) {
- foreach my $cust_tax_location ( qsearch( 'cust_tax_location',
- { data_vendor => "$format-zip" }
- )
- )
- {
- my $error = $cust_tax_location->delete;
- if ( $error ) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }
- }
- }
-
- #import new data
- my $statement = ' &process_download_and_update($job, @_); ';
- eval $statement;
- if ($@) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $@;
- }
-
- #restore taxproducts
- $count = scalar(keys %taxproduct);
- $imported = 0;
- foreach my $pkgpart ( keys %taxproduct ) {
+ my ( $imported, $last, $min_sec ) = _progressbar_foo();
+ my $count = scalar(keys %$taxproduct);
+ foreach my $pkgpart ( keys %$taxproduct ) {
warn "restoring taxproductnums on pkgpart $pkgpart\n" if $DEBUG;
if ( time - $min_sec > $last ) {
- my $error = $job->update_statustext(
+ $job->update_statustext(
int( 100 * $imported / $count ). ",Restoring tax products"
);
- if ( $error ) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }
$last = time;
}
$imported++;
my $part_pkg = qsearchs('part_pkg', { pkgpart => $pkgpart } );
unless ( $part_pkg ) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die "somehow failed to find part_pkg with pkgpart $pkgpart!\n";
+ return "somehow failed to find part_pkg with pkgpart $pkgpart!\n";
}
my %options = $part_pkg->options;
@@ -1270,19 +1303,18 @@ sub process_download_and_reload {
my $primary_svc = $part_pkg->svcpart;
my $new = new FS::part_pkg { $part_pkg->hash };
- foreach my $class ( keys %{ $taxproduct{$pkgpart} } ) {
+ foreach my $class ( keys %{ $taxproduct->{$pkgpart} } ) {
warn "working with class '$class'\n" if $DEBUG;
my $part_pkg_taxproduct =
qsearchs( 'part_pkg_taxproduct',
- { taxproduct => $taxproduct{$pkgpart}{$class},
+ { taxproduct => $taxproduct->{$pkgpart}->{$class},
data_vendor => $format,
}
);
unless ( $part_pkg_taxproduct ) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die "failed to find part_pkg_taxproduct ($taxproduct{pkgpart}{$class})".
- " for pkgpart $pkgpart\n";
+ return "failed to find part_pkg_taxproduct (".
+ $taxproduct->{pkgpart}->{$class}. ") for pkgpart $pkgpart\n";
}
if ( $class eq '' ) {
@@ -1301,24 +1333,23 @@ sub process_download_and_reload {
'options' => \%options,
);
- if ( $error ) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }
+ return $error if $error;
+
}
- #disable tax_rates
- $count = scalar(keys %disabled_tax_rate);
- $imported = 0;
- foreach my $key (keys %disabled_tax_rate) {
+ '';
+}
+
+sub _restore_remembered_disabled_taxes {
+ my ( $job, $format, $disabled_tax_rate ) = @_;
+
+ my ( $imported, $last, $min_sec ) = _progressbar_foo();
+ my $count = scalar(keys %$disabled_tax_rate);
+ foreach my $key (keys %$disabled_tax_rate) {
if ( time - $min_sec > $last ) {
- my $error = $job->update_statustext(
+ $job->update_statustext(
int( 100 * $imported / $count ). ",Disabling tax rates"
);
- if ( $error ) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }
$last = time;
}
$imported++;
@@ -1326,10 +1357,8 @@ sub process_download_and_reload {
my @tax_class = qsearch( 'tax_class', { data_vendor => $format,
taxclass => $taxclass,
} );
- if (scalar(@tax_class) > 1) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die "found multiple tax_class records for format $format class $taxclass";
- }
+ return "found multiple tax_class records for format $format class $taxclass"
+ if scalar(@tax_class) > 1;
unless (scalar(@tax_class)) {
warn "no tax_class for format $format class $taxclass\n";
@@ -1344,28 +1373,188 @@ sub process_download_and_reload {
);
if (scalar(@tax_rate) > 1) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die "found multiple tax_rate records for format $format geocode $geocode".
- " and taxclass $taxclass ( taxclassnum ". $tax_class[0]->taxclassnum.
- " )";
+ return "found multiple tax_rate records for format $format geocode ".
+ "$geocode and taxclass $taxclass ( taxclassnum ".
+ $tax_class[0]->taxclassnum. " )";
}
if (scalar(@tax_rate)) {
$tax_rate[0]->disabled('Y');
my $error = $tax_rate[0]->replace;
- if ( $error ) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }
+ return $error if $error;
}
}
+}
- #success!
+sub _remove_old_tax_data {
+ my ( $job, $format ) = @_;
+
+ my $dbh = dbh;
+ my $error = $job->update_statustext( "0,Removing old tax data" );
+ die $error if $error;
+
+ my $sql = "UPDATE public.tax_rate_location SET disabled='Y' ".
+ "WHERE data_vendor = ". $dbh->quote($format);
+ $dbh->do($sql) or return "Failed to execute $sql: ". $dbh->errstr;
+
+ my @table = qw(
+ tax_rate part_pkg_taxrate part_pkg_taxproduct tax_class cust_tax_location
+ );
+ foreach my $table ( @table ) {
+ $sql = "DELETE FROM public.$table WHERE data_vendor = ".
+ $dbh->quote($format);
+ $dbh->do($sql) or return "Failed to execute $sql: ". $dbh->errstr;
+ }
+
+ if ( $format eq 'cch' ) {
+ $sql = "DELETE FROM public.cust_tax_location WHERE data_vendor = ".
+ $dbh->quote("$format-zip");
+ $dbh->do($sql) or return "Failed to execute $sql: ". $dbh->errstr;
+ }
+
+ '';
+}
+
+sub _create_temporary_tables {
+ my ( $job, $format ) = @_;
+
+ my $dbh = dbh;
+ my $error = $job->update_statustext( "0,Creating temporary tables" );
+ die $error if $error;
+
+ my @table = qw( tax_rate
+ tax_rate_location
+ part_pkg_taxrate
+ part_pkg_taxproduct
+ tax_class
+ cust_tax_location
+ );
+ foreach my $table ( @table ) {
+ my $sql =
+ "CREATE TEMPORARY TABLE $table ( LIKE $table INCLUDING DEFAULTS )";
+ $dbh->do($sql) or return "Failed to execute $sql: ". $dbh->errstr;
+ }
+
+ '';
+}
+
+sub _copy_from_temp {
+ my ( $job, $format ) = @_;
+
+ my $dbh = dbh;
+ my $error = $job->update_statustext( "0,Making permanent" );
+ die $error if $error;
+
+ my @table = qw( tax_rate
+ tax_rate_location
+ part_pkg_taxrate
+ part_pkg_taxproduct
+ tax_class
+ cust_tax_location
+ );
+ foreach my $table ( @table ) {
+ my $sql =
+ "INSERT INTO public.$table SELECT * from $table";
+ $dbh->do($sql) or return "Failed to execute $sql: ". $dbh->errstr;
+ }
+
+ '';
+}
+
+=item process_download_and_reload
+
+Download and process a tax update as a queued JSRPC job after wiping the
+existing wipable tax data.
+
+=cut
+
+sub process_download_and_reload {
+ _process_reload('process_download_and_update', @_);
+}
+
+
+=item process_batch_reload
+
+Load and process a tax update from the provided files as a queued JSRPC job
+after wiping the existing wipable tax data.
+
+=cut
+
+sub process_batch_reload {
+ _process_reload('_perform_batch_import', @_);
+}
- $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+sub _process_reload {
+ my ( $method, $job ) = ( shift, shift );
+
+ my $param = thaw(decode_base64($_[0]));
+ my $format = $param->{'format'}; #well... this is all cch specific
+
+ my ( $imported, $last, $min_sec ) = _progressbar_foo();
+
+ if ( $job ) { # progress bar
+ my $error = $job->update_statustext( 0 );
+ die $error if $error;
+ }
+
+ my $oldAutoCommit = $FS::UID::AutoCommit;
+ local $FS::UID::AutoCommit = 0;
+ my $dbh = dbh;
+ my $error = '';
+
+ my $sql =
+ "SELECT count(*) FROM part_pkg_taxoverride JOIN tax_class ".
+ "USING (taxclassnum) WHERE data_vendor = '$format'";
+ my $sth = $dbh->prepare($sql) or die $dbh->errstr;
+ $sth->execute
+ or die "Unexpected error executing statement $sql: ". $sth->errstr;
+ die "Don't (yet) know how to handle part_pkg_taxoverride records."
+ if $sth->fetchrow_arrayref->[0];
+
+ # really should get a table EXCLUSIVE lock here
+
+ #remember disabled taxes
+ my %disabled_tax_rate = ();
+ $error ||= _remember_disabled_taxes( $job, $format, \%disabled_tax_rate );
+
+ #remember tax products
+ my %taxproduct = ();
+ $error ||= _remember_tax_products( $job, $format, \%taxproduct );
+
+ #create temp tables
+ $error ||= _create_temporary_tables( $job, $format );
+
+ #import new data
+ unless ($error) {
+ my $args = '$job, @_';
+ eval "$method($args);";
+ $error = $@ if $@;
+ }
+
+ #restore taxproducts
+ $error ||= _restore_remembered_tax_products( $job, $format, \%taxproduct );
+
+ #disable tax_rates
+ $error ||=
+ _restore_remembered_disabled_taxes( $job, $format, \%disabled_tax_rate );
+
+ #wipe out the old data
+ $error ||= _remove_old_tax_data( $job, $format );
+
+ #untemporize
+ $error ||= _copy_from_temp( $job, $format );
+
+ if ($error) {
+ $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
+ die $error;
+ }
+
+ #success!
+ $dbh->commit or die $dbh->errstr if $oldAutoCommit;
}
+
=item process_download_and_update
Download and process a tax update as a queued JSRPC job
@@ -1378,26 +1567,22 @@ sub process_download_and_update {
my $param = thaw(decode_base64(shift));
my $format = $param->{'format'}; #well... this is all cch specific
- my ( $count, $last, $min_sec, $imported ) = (0, time, 5, 0); #progressbar
- $count = 100;
+ my ( $imported, $last, $min_sec ) = _progressbar_foo();
if ( $job ) { # progress bar
- my $error = $job->update_statustext( int( 100 * $imported / $count ) );
+ my $error = $job->update_statustext( 0);
die $error if $error;
}
- my $dir = '%%%FREESIDE_CACHE%%%/cache.'. $FS::UID::datasrc. '/taxdata';
+ my $cache_dir = '%%%FREESIDE_CACHE%%%/cache.'. $FS::UID::datasrc. '/';
+ my $dir = $cache_dir. 'taxdata';
unless (-d $dir) {
mkdir $dir or die "can't create $dir: $!\n";
}
if ($format eq 'cch') {
- eval "use Text::CSV_XS;";
- die $@ if $@;
-
- eval "use XBase;";
- die $@ if $@;
+ my @namelist = qw( code detail geocode plus4 txmatrix zip );
my $conf = new FS::Conf;
die "direct download of tax data not enabled\n"
@@ -1410,18 +1595,18 @@ sub process_download_and_update {
$dir .= '/cch';
- my $oldAutoCommit = $FS::UID::AutoCommit;
- local $FS::UID::AutoCommit = 0;
my $dbh = dbh;
my $error = '';
# really should get a table EXCLUSIVE lock here
# check if initial import or update
+ #
+ # relying on mkdir "$dir.new" as a mutex
my $sql = "SELECT count(*) from tax_rate WHERE data_vendor='$format'";
my $sth = $dbh->prepare($sql) or die $dbh->errstr;
$sth->execute() or die $sth->errstr;
- my $upgrade = $sth->fetchrow_arrayref->[0];
+ my $update = $sth->fetchrow_arrayref->[0];
# create cache and/or rotate old tax data
@@ -1445,7 +1630,7 @@ sub process_download_and_update {
} else {
- die "can't find previous tax data\n" if $upgrade;
+ die "can't find previous tax data\n" if $update;
}
@@ -1453,215 +1638,37 @@ sub process_download_and_update {
# fetch and unpack the zip files
- my $ua = new LWP::UserAgent;
- foreach my $url (split ',', $urls) {
- my @name = split '/', $url; #somewhat restrictive
- my $name = pop @name;
- $name =~ /(.*)/; # untaint that which we trust;
- $name = $1;
-
- open my $taxfh, ">$dir.new/$name" or die "Can't open $dir.new/$name: $!\n";
-
- my $res = $ua->request(
- new HTTP::Request( GET => $url),
- sub { #my ($data, $response_object) = @_;
- print $taxfh $_[0] or die "Can't write to $dir.new/$name: $!\n";
- my $content_length = $_[1]->content_length;
- $imported += length($_[0]);
- if ( time - $min_sec > $last ) {
- my $error = $job->update_statustext(
- ($content_length ? int(100 * $imported/$content_length) : 0 ).
- ",Downloading data from CCH"
- );
- die $error if $error;
- $last = time;
- }
- },
- );
- die "download of $url failed: ". $res->status_line
- unless $res->is_success;
-
- close $taxfh;
- my $error = $job->update_statustext( "0,Unpacking data" );
- die $error if $error;
- $secret =~ /(.*)/; # untaint that which we trust;
- $secret = $1;
- system('unzip', "-P", $secret, "-d", "$dir.new", "$dir.new/$name") == 0
- or die "unzip -P $secret -d $dir.new $dir.new/$name failed";
- #unlink "$dir.new/$name";
- }
+ _cch_fetch_and_unzip( $job, $urls, $secret, "$dir.new" );
# extract csv files from the dbf files
- foreach my $name ( qw( code detail geocode plus4 txmatrix zip ) ) {
- my $error = $job->update_statustext( "0,Unpacking $name" );
- die $error if $error;
- warn "opening $dir.new/$name.dbf\n" if $DEBUG;
- my $table = new XBase 'name' => "$dir.new/$name.dbf";
- die "failed to access $dir.new/$name.dbf: ". XBase->errstr
- unless defined($table);
- $count = $table->last_record; # approximately;
- $imported = 0;
- open my $csvfh, ">$dir.new/$name.txt"
- or die "failed to open $dir.new/$name.txt: $!\n";
-
- my $csv = new Text::CSV_XS { 'always_quote' => 1 };
- my @fields = $table->field_names;
- my $cursor = $table->prepare_select;
- my $format_date =
- sub { my $date = shift;
- $date =~ /^(\d{4})(\d{2})(\d{2})$/ && ($date = "$2/$3/$1");
- $date;
- };
- while (my $row = $cursor->fetch_hashref) {
- $csv->combine( map { ($table->field_type($_) eq 'D')
- ? &{$format_date}($row->{$_})
- : $row->{$_}
- }
- @fields
- );
- print $csvfh $csv->string, "\n";
- $imported++;
- if ( time - $min_sec > $last ) {
- my $error = $job->update_statustext(
- int(100 * $imported/$count). ",Unpacking $name"
- );
- die $error if $error;
- $last = time;
- }
- }
- $table->close;
- close $csvfh;
+ foreach my $name ( @namelist ) {
+ _cch_extract_csv_from_dbf( $job, $dir, $name );
}
# generate the diff files
- my @insert_list = ();
- my @delete_list = ();
- my @predelete_list = ();
-
- my @list = (
- 'geocode', \&FS::tax_rate_location::batch_import,
- 'code', \&FS::tax_class::batch_import,
- 'plus4', \&FS::cust_tax_location::batch_import,
- 'zip', \&FS::cust_tax_location::batch_import,
- 'txmatrix', \&FS::part_pkg_taxrate::batch_import,
- 'detail', \&FS::tax_rate::batch_import,
- );
-
- while( scalar(@list) ) {
- my ( $name, $method ) = ( shift @list, shift @list );
- my %oldlines = ();
-
- my $error = $job->update_statustext( "0,Comparing to previous $name" );
- die $error if $error;
-
- warn "processing $dir.new/$name.txt\n" if $DEBUG;
-
- if ($upgrade) {
- open my $oldcsvfh, "$dir.1/$name.txt"
- or die "failed to open $dir.1/$name.txt: $!\n";
-
- while(<$oldcsvfh>) {
- chomp;
- $oldlines{$_} = 1;
- }
- close $oldcsvfh;
+ my @list = ();
+ foreach my $name ( @namelist ) {
+ my $difffile = "$dir.new/$name.txt";
+ if ($update) {
+ my $error = $job->update_statustext( "0,Comparing to previous $name" );
+ die $error if $error;
+ warn "processing $dir.new/$name.txt\n" if $DEBUG;
+ my $olddir = $update ? "$dir.1" : "";
+ $difffile = _perform_cch_diff( $name, "$dir.new", $olddir );
}
-
- open my $newcsvfh, "$dir.new/$name.txt"
- or die "failed to open $dir.new/$name.txt: $!\n";
-
- my $ifh = new File::Temp( TEMPLATE => "$name.insert.XXXXXXXX",
- DIR => "$dir.new",
- UNLINK => 0, #meh
- ) or die "can't open temp file: $!\n";
-
- my $dfh = new File::Temp( TEMPLATE => "$name.delete.XXXXXXXX",
- DIR => "$dir.new",
- UNLINK => 0, #meh
- ) or die "can't open temp file: $!\n";
-
- while(<$newcsvfh>) {
- chomp;
- if (exists($oldlines{$_})) {
- $oldlines{$_} = 0;
- } else {
- print $ifh $_, ',"I"', "\n";
- }
- }
- close $newcsvfh;
-
- if ($name eq 'detail') {
- for (keys %oldlines) { # one file for rate details
- print $ifh $_, ',"D"', "\n" if $oldlines{$_};
- }
- } else {
- for (keys %oldlines) {
- print $dfh $_, ',"D"', "\n" if $oldlines{$_};
- }
- }
- %oldlines = ();
-
- push @insert_list, $name, $ifh->filename, $method;
- if ( $name eq 'geocode' ) {
- unshift @predelete_list, $name, $dfh->filename, $method
- unless $name eq 'detail';
- } else {
- unshift @delete_list, $name, $dfh->filename, $method
- unless $name eq 'detail';
- }
-
- close $dfh;
- close $ifh;
+ $difffile =~ s/^$cache_dir//;
+ push @list, "${name}file:$difffile";
}
- while( scalar(@predelete_list) ) {
- my ($name, $file, $method) =
- (shift @predelete_list, shift @predelete_list, shift @predelete_list);
-
- my $fmt = "$format-update";
- $fmt = $fmt. ( $name eq 'zip' ? '-zip' : '' );
- open my $fh, "< $file" or $error ||= "Can't open $name file $file: $!";
- $error ||=
- &{$method}({ 'filehandle' => $fh, 'format' => $fmt }, $job);
- close $fh;
- #unlink $file or warn "Can't delete $file: $!";
- }
-
- while( scalar(@insert_list) ) {
- my ($name, $file, $method) =
- (shift @insert_list, shift @insert_list, shift @insert_list);
-
- my $fmt = "$format-update";
- $fmt = $fmt. ( $name eq 'zip' ? '-zip' : '' );
- open my $fh, "< $file" or $error ||= "Can't open $name file $file: $!";
- $error ||=
- &{$method}({ 'filehandle' => $fh, 'format' => $fmt }, $job);
- close $fh;
- #unlink $file or warn "Can't delete $file: $!";
- }
-
- while( scalar(@delete_list) ) {
- my ($name, $file, $method) =
- (shift @delete_list, shift @delete_list, shift @delete_list);
-
- my $fmt = "$format-update";
- $fmt = $fmt. ( $name eq 'zip' ? '-zip' : '' );
- open my $fh, "< $file" or $error ||= "Can't open $name file $file: $!";
- $error ||=
- &{$method}({ 'filehandle' => $fh, 'format' => $fmt }, $job);
- close $fh;
- #unlink $file or warn "Can't delete $file: $!";
- }
+ # perform the import
+ local $keep_cch_files = 1;
+ $param->{uploaded_files} = join( ',', @list );
+ $param->{format} .= '-update' if $update;
+ $error ||=
+ _perform_batch_import( $job, encode_base64( nfreeze( $param ) ) );
- if ($error) {
- $dbh->rollback or die $dbh->errstr if $oldAutoCommit;
- die $error;
- }else{
- $dbh->commit or die $dbh->errstr if $oldAutoCommit;
- }
-
rename "$dir.new", "$dir"
or die "cch tax update processed, but can't rename $dir.new: $!\n";
@@ -1750,111 +1757,6 @@ sub browse_queries {
return ($query, "SELECT COUNT(*) FROM tax_rate $extra_sql");
}
-# _upgrade_data
-#
-# Used by FS::Upgrade to migrate to a new database.
-#
-#
-
-sub _upgrade_data { # class method
- my ($self, %opts) = @_;
- my $dbh = dbh;
-
- warn "$me upgrading $self\n" if $DEBUG;
-
- my @column = qw ( tax excessrate usetax useexcessrate fee excessfee
- feebase feemax );
-
- if ( $dbh->{Driver}->{Name} eq 'Pg' ) {
-
- eval "use DBI::Const::GetInfoType;";
- die $@ if $@;
-
- my $major_version = 0;
- $dbh->get_info( $GetInfoType{SQL_DBMS_VER} ) =~ /^(\d{2})/
- && ( $major_version = sprintf("%d", $1) );
-
- if ( $major_version > 7 ) {
-
- # ideally this would be supported in DBIx-DBSchema and friends
-
- foreach my $column ( @column ) {
- my $columndef = dbdef->table($self->table)->column($column);
- unless ($columndef->type eq 'numeric') {
-
- warn "updating tax_rate column $column to numeric\n" if $DEBUG;
- my $sql = "ALTER TABLE tax_rate ALTER $column TYPE numeric(14,8)";
- my $sth = $dbh->prepare($sql) or die $dbh->errstr;
- $sth->execute or die $sth->errstr;
-
- warn "updating h_tax_rate column $column to numeric\n" if $DEBUG;
- $sql = "ALTER TABLE h_tax_rate ALTER $column TYPE numeric(14,8)";
- $sth = $dbh->prepare($sql) or die $dbh->errstr;
- $sth->execute or die $sth->errstr;
-
- }
- }
-
- } elsif ( $dbh->{pg_server_version} =~ /^704/ ) {
-
- # ideally this would be supported in DBIx-DBSchema and friends
-
- foreach my $column ( @column ) {
- my $columndef = dbdef->table($self->table)->column($column);
- unless ($columndef->type eq 'numeric') {
-
- warn "updating tax_rate column $column to numeric\n" if $DEBUG;
-
- foreach my $table ( qw( tax_rate h_tax_rate ) ) {
-
- my $sql = "ALTER TABLE $table RENAME $column TO old_$column";
- my $sth = $dbh->prepare($sql) or die $dbh->errstr;
- $sth->execute or die $sth->errstr;
-
- my $def = dbdef->table($table)->column($column);
- $def->type('numeric');
- $def->length('14,8');
- my $null = $def->null;
- $def->null('NULL');
-
- $sql = "ALTER TABLE $table ADD COLUMN ". $def->line($dbh);
- $sth = $dbh->prepare($sql) or die $dbh->errstr;
- $sth->execute or die $sth->errstr;
-
- $sql = "UPDATE $table SET $column = CAST( old_$column AS numeric )";
- $sth = $dbh->prepare($sql) or die $dbh->errstr;
- $sth->execute or die $sth->errstr;
-
- unless ( $null eq 'NULL' ) {
- $sql = "ALTER TABLE $table ALTER $column SET NOT NULL";
- $sth = $dbh->prepare($sql) or die $dbh->errstr;
- $sth->execute or die $sth->errstr;
- }
-
- $sql = "ALTER TABLE $table DROP old_$column";
- $sth = $dbh->prepare($sql) or die $dbh->errstr;
- $sth->execute or die $sth->errstr;
-
- }
- }
- }
-
- } else {
-
- warn "WARNING: tax_rate table upgrade unsupported for this Pg version\n";
-
- }
-
- } else {
-
- warn "WARNING: tax_rate table upgrade only supported for Pg 8+\n";
-
- }
-
- '';
-
-}
-
=back
=head1 BUGS
diff --git a/FS/MANIFEST b/FS/MANIFEST
index 56436792f..4755f1f64 100644
--- a/FS/MANIFEST
+++ b/FS/MANIFEST
@@ -87,6 +87,7 @@ FS/h_svc_www.pm
FS/part_bill_event.pm
FS/payinfo_Mixin.pm
FS/export_svc.pm
+FS/export_device.pm
FS/part_export.pm
FS/part_export_option.pm
FS/part_export/acct_sql.pm
@@ -231,6 +232,7 @@ t/domain_record.t
t/nas.t
t/part_bill_event.t
t/export_svc.t
+t/export_device.t
t/part_export.t
t/part_export_option.t
t/part_export-acct_sql.t
@@ -364,6 +366,8 @@ FS/cust_credit_bill_pkg.pm
t/cust_credit_bill_pkg.t
FS/registrar.pm
t/registrar.t
+FS/svc_Domain_Mixin.pm
+t/svc_Domain_Mixin.t
FS/svc_External_Common.pm
t/svc_External_Common.t
FS/svc_Parent_Mixin.pm
@@ -455,3 +459,20 @@ FS/cust_statement.pm
t/cust_statement.t
FS/cdr_batch.pm
t/cdr_batch.t
+FS/svc_pbx.pm
+t/svc_pbx.t
+FS/h_svc_www.pm
+t/h_svc_www.t
+FS/location_Mixin.pm
+t/location_Mixin.t
+FS/svc_mailinglist.pm
+t/svc_mailinglist.t
+FS/mailinglist.pm
+t/mailinglist.t
+FS/mailinglistmember.pm
+t/mailinglistmember.t
+FS/part_event/Action/Mixin/credit_pkg.pm
+FS/part_event/Action/pkg_agent_credit.pm
+FS/part_event/Action/pkg_agent_credit_pkg.pm
+FS/part_event/Action/pkg_employee_credit.pm
+FS/part_event/Action/pkg_employee_credit_pkg.pm
diff --git a/FS/bin/freeside-paymentech-upload b/FS/bin/freeside-paymentech-upload
index 06bef68be..3f8abc047 100755
--- a/FS/bin/freeside-paymentech-upload
+++ b/FS/bin/freeside-paymentech-upload
@@ -12,15 +12,15 @@ use FS::pay_batch;
use FS::cust_pay_batch;
use FS::Conf;
-use vars qw( $opt_a $opt_t $opt_v );
-getopts('avt');
+use vars qw( $opt_a $opt_t $opt_v $opt_p );
+getopts('avtp:');
#$Net::SFTP::Foreign::debug = -1;
sub usage { "
Usage:
freeside-paymentech-upload [ -v ] [ -t ] user batchnum
- freeside-paymentech-upload -a [ -v ] [ -t ] user\n
+ freeside-paymentech-upload -a [ -p payby ] [ -v ] [ -t ] user\n
" }
my $user = shift or die &usage;
@@ -31,8 +31,11 @@ my $zip_check = `which zip` or die "can't find zip executable\n";
my @batches;
if($opt_a) {
- @batches = qsearch('pay_batch', { status => 'O' } );
- die "No open batches found.\n" if !@batches;
+ my %criteria = (status => 'O');
+ $criteria{'payby'} = uc($opt_p) if $opt_p;
+ @batches = qsearch('pay_batch', \%criteria);
+ die "No open batches found".($opt_p ? " of type '$opt_p'" : '').".\n"
+ if !@batches;
}
else {
my $batchnum = shift;
@@ -95,7 +98,7 @@ freeside-paymentech-upload - Transmit a payment batch to Chase Paymentech via SF
=head1 SYNOPSIS
- freeside-paymentech-upload [ -a ] [ -v ] [ -t ] user batchnum
+ freeside-paymentech-upload [ -a [ -p PAYBY ] ] [ -v ] [ -t ] user batchnum
=head1 DESCRIPTION
@@ -106,6 +109,8 @@ response file.
-a: Send all open batches, instead of specifying a batchnum.
+-p PAYBY: With -a, limit to batches of that payment type, e.g. -p CARD.
+
-v: Be verbose.
-t: Send the transaction to the test server.
diff --git a/FS/bin/freeside-upgrade b/FS/bin/freeside-upgrade
index 97c704c91..f4ff1c28e 100755
--- a/FS/bin/freeside-upgrade
+++ b/FS/bin/freeside-upgrade
@@ -4,7 +4,7 @@ use strict;
use vars qw($opt_d $opt_s $opt_q $opt_v $opt_r);
use vars qw($DEBUG $DRY_RUN);
use Getopt::Std;
-use DBIx::DBSchema 0.31;
+use DBIx::DBSchema 0.31; #0.39
use FS::UID qw(adminsuidsetup checkeuid datasrc driver_name); #getsecrets);
use FS::CurrentUser;
use FS::Schema qw( dbdef dbdef_dist reload_dbdef );
@@ -30,6 +30,11 @@ $FS::UID::callback_hack = 1;
my $dbh = adminsuidsetup($user);
$FS::UID::callback_hack = 0;
+if ( driver_name =~ /^mysql/i ) { #until 0.39 is required above
+ eval "use DBIx::DBSchema 0.39;";
+ die $@ if $@;
+}
+
#needs to match FS::Schema...
my $dbdef_file = "%%%FREESIDE_CONF%%%/dbdef.". datasrc;
diff --git a/FS/t/h_svc_mailinglist.t b/FS/t/h_svc_mailinglist.t
new file mode 100644
index 000000000..d75575a81
--- /dev/null
+++ b/FS/t/h_svc_mailinglist.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::h_svc_mailinglist;
+$loaded=1;
+print "ok 1\n";
diff --git a/FS/t/h_svc_pbx.t b/FS/t/h_svc_pbx.t
new file mode 100644
index 000000000..8b30f52a7
--- /dev/null
+++ b/FS/t/h_svc_pbx.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::h_svc_pbx;
+$loaded=1;
+print "ok 1\n";
diff --git a/FS/t/location_Mixin.t b/FS/t/location_Mixin.t
new file mode 100644
index 000000000..b6a9bf23f
--- /dev/null
+++ b/FS/t/location_Mixin.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::location_Mixin;
+$loaded=1;
+print "ok 1\n";
diff --git a/FS/t/mailinglist.t b/FS/t/mailinglist.t
new file mode 100644
index 000000000..45b7dd583
--- /dev/null
+++ b/FS/t/mailinglist.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::mailinglist;
+$loaded=1;
+print "ok 1\n";
diff --git a/FS/t/mailinglistmember.t b/FS/t/mailinglistmember.t
new file mode 100644
index 000000000..1ceb2f567
--- /dev/null
+++ b/FS/t/mailinglistmember.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::mailinglistmember;
+$loaded=1;
+print "ok 1\n";
diff --git a/FS/t/svc_Domain_Mixin.t b/FS/t/svc_Domain_Mixin.t
new file mode 100644
index 000000000..261af7537
--- /dev/null
+++ b/FS/t/svc_Domain_Mixin.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::svc_Domain_Mixin;
+$loaded=1;
+print "ok 1\n";
diff --git a/FS/t/svc_mailinglist.t b/FS/t/svc_mailinglist.t
new file mode 100644
index 000000000..73896da3c
--- /dev/null
+++ b/FS/t/svc_mailinglist.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::svc_mailinglist;
+$loaded=1;
+print "ok 1\n";
diff --git a/FS/t/svc_pbx.t b/FS/t/svc_pbx.t
new file mode 100644
index 000000000..2a41372a0
--- /dev/null
+++ b/FS/t/svc_pbx.t
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::svc_pbx;
+$loaded=1;
+print "ok 1\n";
diff --git a/Makefile b/Makefile
index 34e3fdd1e..b7b355c72 100644
--- a/Makefile
+++ b/Makefile
@@ -123,7 +123,7 @@ RT_PATH = /opt/rt3
FREESIDE_PATH = `pwd`
PERL_INC_DEV_KLUDGE = /usr/local/share/perl/5.10.0/
-VERSION=1.9.2cvs
+VERSION=1.9.2
TAG=freeside_1_9_2
DEBVERSION = `echo ${VERSION} | perl -pe 's/(\d)([a-z])/\1~\2/'`-1
@@ -203,6 +203,7 @@ perl-modules:
s|%%%FREESIDE_EXPORT%%%|${FREESIDE_EXPORT}|g;\
" blib/lib/FS/Cron/*.pm;\
perl -p -i -e "\
+ s|%%%FREESIDE_CONF%%%|${FREESIDE_CONF}|g;\
s|%%%FREESIDE_EXPORT%%%|${FREESIDE_EXPORT}|g;\
s|%%%FREESIDE_LOG%%%|${FREESIDE_LOG}|g;\
" blib/lib/FS/part_export/*.pm;\
@@ -361,12 +362,12 @@ create-rt: configure-rt
|| true
install-rt:
- [ ${RT_ENABLED} -eq 1 ] && ( cd rt; make install ) || true
- [ ${RT_ENABLED} -eq 1 ] && perl -p -i -e "\
+ if [ ${RT_ENABLED} -eq 1 ]; then ( cd rt; make install ); fi
+ if [ ${RT_ENABLED} -eq 1 ]; then perl -p -i -e "\
s'%%%RT_DOMAIN%%%'${RT_DOMAIN}'g;\
s'%%%RT_TIMEZONE%%%'${RT_TIMEZONE}'g;\
s'%%%FREESIDE_URL%%%'${FREESIDE_URL}'g;\
- " ${RT_PATH}/etc/RT_SiteConfig.pm
+ " ${RT_PATH}/etc/RT_SiteConfig.pm; fi
clean:
rm -rf masondocs
diff --git a/conf/invoice_from b/conf/invoice_from
index 110ec8f41..e20d96bcf 100644
--- a/conf/invoice_from
+++ b/conf/invoice_from
@@ -1 +1 @@
-ivan-unconfigured-freeside-installation@420.am
+ivan-unconfigured-freeside-installation@freeside.biz
diff --git a/debian/changelog b/debian/changelog
index 20a0b4fe6..7f9977c2e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,15 @@
+freeside (1.9.2-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Ivan Kohler <ivan-debian@420.am> Mon, 05 Apr 2010 00:08:55 -0700
+
+freeside (1.9.2~cvs-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Ivan Kohler <ivan-debian@420.am> Mon, 05 Apr 2010 00:05:25 -0700
+
freeside (1.9.1-1) unstable; urgency=low
* New upstream release
diff --git a/debian/control b/debian/control
index 75869a07e..4ea4815d2 100644
--- a/debian/control
+++ b/debian/control
@@ -22,7 +22,7 @@ Description: Billing and trouble ticketing for service providers
Package: freeside-lib
Architecture: all
-Depends: ghostscript | gs-gpl, gsfonts, tetex-base, tetex-bin, libauthen-passphrase-perl, libbusiness-creditcard-perl, libcache-cache-perl, libcache-simple-timedexpiry-perl, libclass-returnvalue-perl, libcrypt-passwdmd5-perl, libdate-manip-perl, libdbd-pg-perl | libdbd-mysql-perl, libdbi-perl, libdbix-dbschema-perl (>= 0.35), libdbix-searchbuilder-perl, libdigest-sha1-perl, libfile-counterfile-perl, libfile-rsync-perl, libfrontier-rpc-perl, libhtml-format-perl, libhtml-tree-perl, libipc-run3-perl, libipc-sharelite-perl, liblingua-en-nameparse-perl, liblocale-maketext-fuzzy-perl, liblocale-maketext-lexicon-perl, liblocale-subcountry-perl, liblog-dispatch-perl, libmailtools-perl (>= 2), libmime-perl (>= 5.424) | libmime-perl (< 5.421), libnet-domain-tld-perl, libnet-scp-perl, libnet-ssh-perl, libnet-whois-raw-perl, libnetaddr-ip-perl, libnumber-format-perl, libregexp-common-perl, libstring-approx-perl, libstring-shellquote-perl, libterm-readkey-perl, libtest-inline-perl, libtext-autoformat-perl, libtext-csv-perl, libtext-template-perl, libtext-wrapper-perl, libtie-ixhash-perl, libtime-duration-perl, libtime-modules-perl, libtimedate-perl, libuniversal-require-perl, liburi-perl, libwant-perl, libwww-perl
+Depends: ghostscript | gs-gpl, gsfonts, tetex-base, tetex-bin, libauthen-passphrase-perl, libbusiness-creditcard-perl, libcache-cache-perl, libcache-simple-timedexpiry-perl, libclass-returnvalue-perl, libcrypt-passwdmd5-perl, libdate-manip-perl, libdbd-pg-perl | libdbd-mysql-perl, libdbi-perl, libdbix-dbschema-perl (>= 0.35), libdbix-searchbuilder-perl, libdigest-sha1-perl, libfile-counterfile-perl, libfile-rsync-perl, libfrontier-rpc-perl, libhtml-format-perl, libhtml-tree-perl, libipc-run3-perl, libipc-sharelite-perl, liblingua-en-nameparse-perl, liblocale-maketext-fuzzy-perl, liblocale-maketext-lexicon-perl, liblocale-subcountry-perl, liblog-dispatch-perl, libmailtools-perl (>= 2), libmime-perl (>= 5.424) | libmime-perl (< 5.421), libnet-domain-tld-perl, libnet-scp-perl, libnet-ssh-perl, libnet-whois-raw-perl, libnetaddr-ip-perl, libnumber-format-perl, libregexp-common-perl, libstring-approx-perl, libstring-shellquote-perl, libterm-readkey-perl, libtest-inline-perl, libtext-autoformat-perl, libtext-csv-perl, libtext-template-perl, libtext-wrapper-perl, libtie-ixhash-perl, libtime-duration-perl, libtime-modules-perl, libtimedate-perl, libuniversal-require-perl, liburi-perl, libwant-perl, libwww-perl, libemail-sender-perl, libemail-sender-transport-smtp-tls-perl
Recommends: libdbd-pg-perl, libdbd-mysql-perl, rsync
Suggests: libbusiness-onlinepayment-perl
Description: Libraries for Freeside billing and trouble ticketing
diff --git a/fs_selfservice/FS-SelfService/SelfService.pm b/fs_selfservice/FS-SelfService/SelfService.pm
index 49629d423..7e6821b60 100644
--- a/fs_selfservice/FS-SelfService/SelfService.pm
+++ b/fs_selfservice/FS-SelfService/SelfService.pm
@@ -59,6 +59,7 @@ $socket .= '.'.$tag if defined $tag && length($tag);
'provision_external' => 'MyAccount/provision_external',
'unprovision_svc' => 'MyAccount/unprovision_svc',
'myaccount_passwd' => 'MyAccount/myaccount_passwd',
+ 'create_ticket' => 'MyAccount/create_ticket',
'signup_info' => 'Signup/signup_info',
'skin_info' => 'MyAccount/skin_info',
'access_info' => 'MyAccount/access_info',
diff --git a/fs_selfservice/FS-SelfService/cgi/ach_payment_results.html b/fs_selfservice/FS-SelfService/cgi/ach_payment_results.html
index 987b97efb..9cdb65e36 100644
--- a/fs_selfservice/FS-SelfService/cgi/ach_payment_results.html
+++ b/fs_selfservice/FS-SelfService/cgi/ach_payment_results.html
@@ -1,7 +1,6 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Payment results') %>
-<FONT SIZE=4>Payment results</FONT><BR><BR>
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">Error processing your payment: $error</FONT>!;
} else {
diff --git a/fs_selfservice/FS-SelfService/cgi/change_bill.html b/fs_selfservice/FS-SelfService/cgi/change_bill.html
index c0977d946..7941971ba 100755
--- a/fs_selfservice/FS-SelfService/cgi/change_bill.html
+++ b/fs_selfservice/FS-SelfService/cgi/change_bill.html
@@ -1,7 +1,6 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Edit billing address') %>
-<FONT SIZE=4>Edit billing address</FONT><BR><BR>
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">Error: $error</FONT><BR><BR>!;
} ''; %>
diff --git a/fs_selfservice/FS-SelfService/cgi/change_password.html b/fs_selfservice/FS-SelfService/cgi/change_password.html
index 9b91d2cad..68b6fd824 100644
--- a/fs_selfservice/FS-SelfService/cgi/change_password.html
+++ b/fs_selfservice/FS-SelfService/cgi/change_password.html
@@ -1,7 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
-
-<FONT SIZE=4>Change password</FONT><BR><BR>
+<%= include('header', 'Change password') %>
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!;
diff --git a/fs_selfservice/FS-SelfService/cgi/change_pay.html b/fs_selfservice/FS-SelfService/cgi/change_pay.html
index bbe452786..9633e8920 100644
--- a/fs_selfservice/FS-SelfService/cgi/change_pay.html
+++ b/fs_selfservice/FS-SelfService/cgi/change_pay.html
@@ -1,7 +1,6 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Change payment information') %>
-<FONT SIZE=4>Change payment information</FONT><BR><BR>
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">Error: $error</FONT><BR><BR>!;
} ''; %>
diff --git a/fs_selfservice/FS-SelfService/cgi/change_ship.html b/fs_selfservice/FS-SelfService/cgi/change_ship.html
index f03aeb5be..59f91767a 100755
--- a/fs_selfservice/FS-SelfService/cgi/change_ship.html
+++ b/fs_selfservice/FS-SelfService/cgi/change_ship.html
@@ -1,7 +1,6 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Edit service address') %>
-<FONT SIZE=4>Edit service address</FONT><BR><BR>
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">Error: $error</FONT><BR><BR>!;
} ''; %>
diff --git a/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html b/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html
index 95bdab76c..37dccaaf2 100644
--- a/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html
+++ b/fs_selfservice/FS-SelfService/cgi/customer_change_pkg.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Change package') %>
<%= include('change_pkg') %>
diff --git a/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html b/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html
index a20e8acbc..192c29fa4 100755
--- a/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html
+++ b/fs_selfservice/FS-SelfService/cgi/customer_order_pkg.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Purchase additional package') %>
<%= include('order_pkg') %>
diff --git a/fs_selfservice/FS-SelfService/cgi/delete_svc.html b/fs_selfservice/FS-SelfService/cgi/delete_svc.html
index e16b01eea..80a14f85c 100644
--- a/fs_selfservice/FS-SelfService/cgi/delete_svc.html
+++ b/fs_selfservice/FS-SelfService/cgi/delete_svc.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Remove service') %>
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">Error: $error</FONT>!;
diff --git a/fs_selfservice/FS-SelfService/cgi/header.html b/fs_selfservice/FS-SelfService/cgi/header.html
index 630959e33..692348f44 100644
--- a/fs_selfservice/FS-SelfService/cgi/header.html
+++ b/fs_selfservice/FS-SelfService/cgi/header.html
@@ -3,6 +3,28 @@
<TITLE><%= $title || 'MyAccount' %></TITLE>
<%= $head %>
</HEAD>
+ <STYLE TYPE="text/css">
+ body {
+ color: <%= $text_color || '#000000' %>;
+ <%= $font ? "font: $font;" : '' %>
+ }
+ a {
+ color: <%= $link_color || 'blue' %>;
+ <%= $menu_nounderline ? 'text-decoration: none' : '' %>
+ }
+ a:visited {
+ color: <%= $vlink_color || 'purple' %>;
+ <%= $menu_nounderline ? 'text-decoration: none' : '' %>
+ }
+ a:active {
+ color: <%= $alink_color || 'blue' %>;
+ <%= $menu_nounderline ? 'text-decoration: none' : '' %>
+ }
+ a:hover {
+ color: <%= $hlink_color || '' %>;
+ <%= $menu_nounderline ? 'text-decoration: none' : '' %>
+ }
+ </STYLE>
<BODY BGCOLOR="<%= $body_bgcolor || '#eeeeee' %>">
<script language="JavaScript"><!--
var mywindow = -1;
@@ -17,7 +39,24 @@
}
//--></script>
<%= $body_header %>
- <FONT SIZE=5><%= $title || 'MyAccount' %></FONT>
- <BR><BR>
+
+ <TABLE BORDER=0 WIDTH="100%" CELLPADDING=0 CELLSPACING=0>
+ <TR STYLE="padding:0px">
+ <TD><IMG SRC="image.cgi?logo"></TD>
+ <TD WIDTH = "29%"
+ STYLE = "background: url(image.cgi?title_left_image) no-repeat left center; padding:0px">
+ </TD>
+ <TD WIDTH = "49%"
+ ALIGN="<%= $title_align || 'left' %>"
+ STYLE = "background: url(image.cgi?title_right_image) no-repeat right center; padding:0px">
+ <FONT SIZE = "<%= $title_size || 5 %>"
+ COLOR = "<%= $title_color %>"
+ ><%= $INCLUDE_ARGS[0] %>&nbsp;&nbsp;&nbsp;</FONT>
+ </DIV>
+ </TD>
+ </TR>
+ </TABLE>
+
<%= include('myaccount_menu') %>
<TD VALIGN="top">
+
diff --git a/fs_selfservice/FS-SelfService/cgi/image.cgi b/fs_selfservice/FS-SelfService/cgi/image.cgi
new file mode 100755
index 000000000..e951dcd1a
--- /dev/null
+++ b/fs_selfservice/FS-SelfService/cgi/image.cgi
@@ -0,0 +1,20 @@
+#!/usr/bin/perl -T
+#!/usr/bin/perl -Tw
+
+use strict;
+use CGI;
+use FS::SelfService qw( skin_info );
+
+my $cgi = new CGI;
+
+my($query) = $cgi->keywords;
+$query =~ /^(\w+)$/ or '' =~ /^()$/;
+my $name = $1;
+
+my $info = skin_info();
+
+print $cgi->header( '-type' => 'image/png', #for now
+ #'-expires' => 'now',
+ ).
+ $info->{$name};
+
diff --git a/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html b/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html
index 8802a5d97..09391e7ae 100644
--- a/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html
+++ b/fs_selfservice/FS-SelfService/cgi/make_ach_payment.html
@@ -1,7 +1,6 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Make a payment') %>
-<FONT SIZE=4>Make a payment</FONT><BR><BR>
<FORM NAME="OneTrueForm" METHOD="POST" ACTION="<%=$selfurl%>" onSubmit="document.OneTrueForm.process.disabled=true">
<INPUT TYPE="hidden" NAME="session" VALUE="<%=$session_id%>">
<INPUT TYPE="hidden" NAME="action" VALUE="ach_payment_results">
@@ -25,7 +24,7 @@
<%= include('check') %>
<TR>
<TD COLSPAN=2>
- <INPUT TYPE="checkbox" CHECKED NAME="save" VALUE="1">
+ <INPUT TYPE="checkbox" <%= $save_unchecked ? '' : 'CHECKED' %> NAME="save" VALUE="1">
Remember this information
</TD>
</TR><TR>
diff --git a/fs_selfservice/FS-SelfService/cgi/make_payment.html b/fs_selfservice/FS-SelfService/cgi/make_payment.html
index 96a17ba4c..e454647cc 100644
--- a/fs_selfservice/FS-SelfService/cgi/make_payment.html
+++ b/fs_selfservice/FS-SelfService/cgi/make_payment.html
@@ -1,7 +1,6 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Make a payment') %>
-<FONT SIZE=4>Make a payment</FONT><BR><BR>
<FORM NAME="OneTrueForm" METHOD="POST" ACTION="<%=$selfurl%>" onSubmit="document.OneTrueForm.process.disabled=true">
<INPUT TYPE="hidden" NAME="session" VALUE="<%=$session_id%>">
<INPUT TYPE="hidden" NAME="action" VALUE="payment_results">
@@ -35,8 +34,8 @@
<%= include('card') %>
<TR>
<TD COLSPAN=8>
- <INPUT TYPE="checkbox" CHECKED NAME="save" VALUE="1">
- Remember this information
+ <INPUT TYPE="checkbox" <%= $save_unchecked ? '' : 'CHECKED' %> NAME="save" VALUE="1">
+ Remember this card and billing address
</TD>
</TR><TR>
<TD COLSPAN=8>
diff --git a/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html b/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html
index b2900b1e9..4055ed09e 100755
--- a/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html
+++ b/fs_selfservice/FS-SelfService/cgi/make_thirdparty_payment.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Pay now') %>
<SCRIPT TYPE="text/javascript">
function popcollect() {
@@ -13,8 +13,6 @@
<SCRIPT TYPE="text/javascript" SRC="overlibmws_crossframe.js"></SCRIPT>
<SCRIPT TYPE="text/javascript" SRC="iframecontentmws.js"></SCRIPT>
-<FONT SIZE=4>Pay now</FONT><BR><BR>
-
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!;
}else{
diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount.html b/fs_selfservice/FS-SelfService/cgi/myaccount.html
index 9b54794bc..0de738515 100644
--- a/fs_selfservice/FS-SelfService/cgi/myaccount.html
+++ b/fs_selfservice/FS-SelfService/cgi/myaccount.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'My Account') %>
Hello <%= $name %>!<BR><BR>
<%= $small_custview %>
diff --git a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html
index 8765323fa..9d330361c 100644
--- a/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html
+++ b/fs_selfservice/FS-SelfService/cgi/myaccount_menu.html
@@ -1,11 +1,15 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
<TABLE BORDER=0><TR>
-<TD VALIGN="top" HEIGHT="100%" BGCOLOR="<%= $box_bgcolor || '#c0c0c0' %>">
+<TD VALIGN="top" BGCOLOR="<%= $menu_bgcolor || $box_bgcolor || '#c0c0c0' %>">
<TABLE CELLSPACING=0 BORDER=0 HEIGHT="100%">
<%=
+if ( $menu_top_image ) {
+ $OUT .= '<TR><TD STYLE="padding:0px"><IMG SRC="image.cgi?menu_top_image"></TD></TR>';
+}
+
my @menu = (
{ title=>' ' },
{ title=>'Overview', url=>'myaccount', size=>'+1', },
@@ -85,25 +89,43 @@ push @menu,
foreach my $item ( @menu ) {
+ next if $menu_skipblanks && $item->{'title'} =~ /^\s*$/;
+ next if $menu_skipheadings && ! $item->{'url'};
+
$OUT .= '<TR><TD';
- if ( exists $item->{'url'} && $action eq $item->{'url'} ) {
- $OUT .= ' BGCOLOR="'. ( $body_bgcolor || '#eeeeee' ). '" '.
- ' STYLE="border-top: 1px solid black;'.
- ' border-left: 1px solid black;'.
- ' border-bottom: 1px solid black"';
+ if ( $menu_body_image ) {
+ if ( exists $item->{'url'} && $action eq $item->{'url'} ) {
+ $OUT .= #' BGCOLOR="'. ( $body_bgcolor || '#eeeeee' ). '" '.
+ ' STYLE="background: url(image.cgi?menu_body_image) 0 bottom; '.
+ ' color:#3366CC"; '. #XXX config
+ ' " ';
+ } else {
+ $OUT .= ' STYLE="background: url(image.cgi?menu_body_image) 0 bottom" ';
+ }
} else {
- $OUT .= ' STYLE="border-right: 1px solid black"';
+ if ( exists $item->{'url'} && $action eq $item->{'url'} ) {
+ $OUT .= ' BGCOLOR="'. ( $body_bgcolor || '#eeeeee' ). '" '.
+ ' STYLE="border-top: 1px solid black;'.
+ ' border-left: 1px solid black;'.
+ ' border-bottom: 1px solid black"';
+ } else {
+ $OUT .= ' STYLE="border-right: 1px solid black"';
+ }
}
$OUT.='>';
- $OUT .= '&nbsp;' x $item->{'indent'}
- if exists $item->{'indent'};
+ if ( $menu_skipheadings ) {
+ $OUT .= '&nbsp;&nbsp;';
+ } else {
+ $OUT .= '&nbsp;' x $item->{'indent'}
+ if exists $item->{'indent'};
+ }
$OUT .= '<A HREF="'. $url. $item->{'url'}. '">'
if exists $item->{'url'} && $action ne $item->{'url'};
- $OUT .= '<FONT SIZE="'. $item->{'size'}. '">'
- if exists $item->{'size'};
+ $OUT .= '<FONT SIZE="'. ( $menu_fontsize || $item->{'size'} ). '">'
+ if $menu_fontsize || exists($item->{'size'});
$item->{'title'} =~ s/ /&nbsp;/g;
$OUT .= $item->{'title'};
@@ -118,9 +140,13 @@ foreach my $item ( @menu ) {
}
-%>
+if ( $menu_bottom_image ) {
+ $OUT .= '<TR><TD STYLE="padding:0px"><IMG SRC="image.cgi?menu_bottom_image"></TD></TR>';
+} else {
+ $OUT .= '<TR><TD STYLE="border-right: 1px solid black" HEIGHT="100%"><BR><BR><BR><BR></TD></TR>';
+}
-<TR><TD STYLE="border-right: 1px solid black" HEIGHT="100%"><BR><BR><BR><BR></TD></TR>
+%>
</TABLE>
diff --git a/fs_selfservice/FS-SelfService/cgi/order_pkg.html b/fs_selfservice/FS-SelfService/cgi/order_pkg.html
index 4abfd8440..79335a0c2 100644
--- a/fs_selfservice/FS-SelfService/cgi/order_pkg.html
+++ b/fs_selfservice/FS-SelfService/cgi/order_pkg.html
@@ -7,7 +7,7 @@ function enable_order_pkg () {
}
}
</SCRIPT>
-<FONT SIZE=4>Purchase additional package</FONT><BR><BR>
+
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!;
} ''; %>
diff --git a/fs_selfservice/FS-SelfService/cgi/payment_results.html b/fs_selfservice/FS-SelfService/cgi/payment_results.html
index 987b97efb..9cdb65e36 100644
--- a/fs_selfservice/FS-SelfService/cgi/payment_results.html
+++ b/fs_selfservice/FS-SelfService/cgi/payment_results.html
@@ -1,7 +1,6 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Payment results') %>
-<FONT SIZE=4>Payment results</FONT><BR><BR>
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">Error processing your payment: $error</FONT>!;
} else {
diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_bill.html b/fs_selfservice/FS-SelfService/cgi/process_change_bill.html
index a4402848d..bf7ad778d 100644
--- a/fs_selfservice/FS-SelfService/cgi/process_change_bill.html
+++ b/fs_selfservice/FS-SelfService/cgi/process_change_bill.html
@@ -1,6 +1,4 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
-
+<%= include('header', 'Information updated successfully') %>
<FONT SIZE=4>Information updated successfully.</FONT>
-
<%= include('footer') %>
diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_password.html b/fs_selfservice/FS-SelfService/cgi/process_change_password.html
index ffe0cab35..4eca91fb6 100644
--- a/fs_selfservice/FS-SelfService/cgi/process_change_password.html
+++ b/fs_selfservice/FS-SelfService/cgi/process_change_password.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', "Password changed" ) %>
<FONT SIZE=4>Password changed for <%= $value %> <%= $label %>.</FONT>
diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_pay.html b/fs_selfservice/FS-SelfService/cgi/process_change_pay.html
index a4402848d..e399aea17 100644
--- a/fs_selfservice/FS-SelfService/cgi/process_change_pay.html
+++ b/fs_selfservice/FS-SelfService/cgi/process_change_pay.html
@@ -1,6 +1,4 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
-
+<%= include('header', 'Information updated successfully' ) %>
<FONT SIZE=4>Information updated successfully.</FONT>
-
<%= include('footer') %>
diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html b/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html
index c7c69f0a5..bf15b6ea6 100644
--- a/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html
+++ b/fs_selfservice/FS-SelfService/cgi/process_change_pkg.html
@@ -1,6 +1,4 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
-
-<FONT SIZE=4>Package change successful.</FONT>
+<%= include('header', 'Package change successful') %>
<%= include('footer') %>
diff --git a/fs_selfservice/FS-SelfService/cgi/process_change_ship.html b/fs_selfservice/FS-SelfService/cgi/process_change_ship.html
index a4402848d..bf7ad778d 100644
--- a/fs_selfservice/FS-SelfService/cgi/process_change_ship.html
+++ b/fs_selfservice/FS-SelfService/cgi/process_change_ship.html
@@ -1,6 +1,4 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
-
+<%= include('header', 'Information updated successfully') %>
<FONT SIZE=4>Information updated successfully.</FONT>
-
<%= include('footer') %>
diff --git a/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html b/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html
index b86893715..649d92092 100755
--- a/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html
+++ b/fs_selfservice/FS-SelfService/cgi/process_order_pkg.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Package order successful') %>
<FONT SIZE=4>Package order successful.</FONT>
diff --git a/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html b/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html
index 9dfc32807..4a16ec56a 100644
--- a/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html
+++ b/fs_selfservice/FS-SelfService/cgi/process_order_recharge.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', "$svc recharged successfully") %>
<FONT SIZE=4><%= $svc %> recharged successfully.</FONT>
diff --git a/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html b/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html
index 39920cb0d..d6515e7f4 100644
--- a/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html
+++ b/fs_selfservice/FS-SelfService/cgi/process_svc_acct.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', "$svc setup successfully") %>
<FONT SIZE=4><%= $svc %> setup successfully.</FONT>
diff --git a/fs_selfservice/FS-SelfService/cgi/process_svc_external.html b/fs_selfservice/FS-SelfService/cgi/process_svc_external.html
index 103eb9e35..c20aae02c 100644
--- a/fs_selfservice/FS-SelfService/cgi/process_svc_external.html
+++ b/fs_selfservice/FS-SelfService/cgi/process_svc_external.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', "$svc setup successfully") %>
<FONT SIZE=4><%= $svc %> setup successfully.</FONT>
diff --git a/fs_selfservice/FS-SelfService/cgi/provision.html b/fs_selfservice/FS-SelfService/cgi/provision.html
index f5b2c2b71..7c0f861e4 100644
--- a/fs_selfservice/FS-SelfService/cgi/provision.html
+++ b/fs_selfservice/FS-SelfService/cgi/provision.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Setup my services') %>
<%= include('provision_list') %>
diff --git a/fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html b/fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html
index bffd22fd1..bae57305e 100644
--- a/fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html
+++ b/fs_selfservice/FS-SelfService/cgi/provision_svc_acct.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Setup account') %>
<%= include('svc_acct') %>
diff --git a/fs_selfservice/FS-SelfService/cgi/recharge_prepay.html b/fs_selfservice/FS-SelfService/cgi/recharge_prepay.html
index 6f0aa1f62..c716e8242 100644
--- a/fs_selfservice/FS-SelfService/cgi/recharge_prepay.html
+++ b/fs_selfservice/FS-SelfService/cgi/recharge_prepay.html
@@ -1,7 +1,6 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Recharge with prepaid card') %>
-<FONT SIZE=4>Recharge with prepaid card</FONT><BR><BR>
<FORM NAME="OneTrueForm" METHOD="POST" ACTION="<%=$selfurl%>" onSubmit="document.OneTrueForm.process.disabled=true">
<INPUT TYPE="hidden" NAME="session" VALUE="<%=$session_id%>">
<INPUT TYPE="hidden" NAME="action" VALUE="recharge_results">
diff --git a/fs_selfservice/FS-SelfService/cgi/recharge_results.html b/fs_selfservice/FS-SelfService/cgi/recharge_results.html
index af15365b0..147b66bbe 100644
--- a/fs_selfservice/FS-SelfService/cgi/recharge_results.html
+++ b/fs_selfservice/FS-SelfService/cgi/recharge_results.html
@@ -1,7 +1,6 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Recharge results') %>
-<FONT SIZE=4>Recharge results</FONT><BR><BR>
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">Error processing your prepaid card: $error</FONT>!;
} else {
diff --git a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi
index 734563be7..2252852d9 100644
--- a/fs_selfservice/FS-SelfService/cgi/selfservice.cgi
+++ b/fs_selfservice/FS-SelfService/cgi/selfservice.cgi
@@ -721,8 +721,12 @@ use HTML::Entities;
use FS::SelfService qw(regionselector popselector domainselector location_form);
#false laziness w/agent.cgi
+use vars qw(@INCLUDE_ARGS);
sub include {
my $name = shift;
+
+ @INCLUDE_ARGS = @_;
+
my $template = new Text::Template( TYPE => 'FILE',
SOURCE => "$main::template_dir/$name.html",
DELIMITERS => [ '<%=', '%>' ],
@@ -736,3 +740,4 @@ sub include {
}
+1;
diff --git a/fs_selfservice/FS-SelfService/cgi/view_cdr_details.html b/fs_selfservice/FS-SelfService/cgi/view_cdr_details.html
index 32bd632b4..6d4d8475e 100644
--- a/fs_selfservice/FS-SelfService/cgi/view_cdr_details.html
+++ b/fs_selfservice/FS-SelfService/cgi/view_cdr_details.html
@@ -1,10 +1,10 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
-
-<FONT SIZE=4>Call usage for
-<%= Date::Format::time2str('%b&nbsp;%o&nbsp;%Y', $beginning) %> -
-<%= Date::Format::time2str('%b&nbsp;%o&nbsp;%Y', $ending) %>
-</FONT><BR><BR>
+<%= include('header', 'Call usage for '.
+ Date::Format::time2str('%b&nbsp;%o&nbsp;%Y', $beginning).
+ ' - '.
+ Date::Format::time2str('%b&nbsp;%o&nbsp;%Y', $ending)
+ )
+%>
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!;
diff --git a/fs_selfservice/FS-SelfService/cgi/view_invoice.html b/fs_selfservice/FS-SelfService/cgi/view_invoice.html
index 8a1c1c73d..072a4147c 100644
--- a/fs_selfservice/FS-SelfService/cgi/view_invoice.html
+++ b/fs_selfservice/FS-SelfService/cgi/view_invoice.html
@@ -1,5 +1,5 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
+<%= include('header', 'Invoice') %>
<%= $invoice_html %>
diff --git a/fs_selfservice/FS-SelfService/cgi/view_usage.html b/fs_selfservice/FS-SelfService/cgi/view_usage.html
index b492102ce..69437632b 100644
--- a/fs_selfservice/FS-SelfService/cgi/view_usage.html
+++ b/fs_selfservice/FS-SelfService/cgi/view_usage.html
@@ -3,15 +3,14 @@
@svc_phone = grep { $_->{svcdb} eq 'svc_phone' } @svcs;
'';
%>
-<%= include('header') %>
+<%= include('header', 'Account usage') %>
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!;
} ''; %>
<%= if ( @svc_acct ) {
- $OUT.= '<FONT SIZE="4">Account usage</FONT><BR><BR>
- <TABLE BGCOLOR="#cccccc">
+ $OUT.= '<TABLE BGCOLOR="#cccccc">
<TR>
<TH ALIGN="left">Account</TH>
<TH ALIGN="right">Time remaining</TH>
diff --git a/fs_selfservice/FS-SelfService/cgi/view_usage_details.html b/fs_selfservice/FS-SelfService/cgi/view_usage_details.html
index 9f02eba79..c4cc177e1 100644
--- a/fs_selfservice/FS-SelfService/cgi/view_usage_details.html
+++ b/fs_selfservice/FS-SelfService/cgi/view_usage_details.html
@@ -1,10 +1,10 @@
<%= $url = "$selfurl?session=$session_id;action="; ''; %>
-<%= include('header') %>
-
-<FONT SIZE=4>Service usage details for
-<%= Date::Format::time2str('%b&nbsp;%o&nbsp;%Y', $beginning) %> -
-<%= Date::Format::time2str('%b&nbsp;%o&nbsp;%Y', $ending) %>
-</FONT><BR><BR>
+<%= include('header', 'Service usage details for '.
+ Date::Format::time2str('%b&nbsp;%o&nbsp;%Y', $beginning).
+ ' - '.
+ Date::Format::time2str('%b&nbsp;%o&nbsp;%Y', $ending)
+ )
+%>
<%= if ( $error ) {
$OUT .= qq!<FONT SIZE="+1" COLOR="#ff0000">$error</FONT><BR><BR>!;
diff --git a/fs_selfservice/java/freeside_create_ticket_example.java b/fs_selfservice/java/freeside_create_ticket_example.java
new file mode 100755
index 000000000..759a4a6a3
--- /dev/null
+++ b/fs_selfservice/java/freeside_create_ticket_example.java
@@ -0,0 +1,85 @@
+
+import biz.freeside.SelfService;
+import org.apache.commons.logging.impl.SimpleLog; //included in apache xmlrpc
+import java.util.HashMap;
+import java.util.Vector;
+
+public class freeside_create_ticket_example {
+ private static SimpleLog logger = new SimpleLog("SelfService");
+
+ public static void main( String args[] ) throws Exception {
+ SelfService client =
+ new SelfService( "http://192.168.1.221:8081/xmlrpc.cgi" );
+
+ Vector params = new Vector();
+ params.addElement( "username" );
+ params.addElement( "4155551212" ); // svc_phone.phonenum
+ params.addElement( "password" );
+ params.addElement( "5454" ); // svc_phone.pin
+ params.addElement( "domain" );
+ params.addElement( "svc_phone" );
+ HashMap result = client.execute( "login", params );
+
+ String error = (String) result.get("error");
+
+ if (error.length() < 1) {
+
+ // successful login
+
+ String sessionId = (String) result.get("session_id");
+
+ logger.trace("[login] logged into freeside with session_id="+sessionId);
+
+ // store session id in your session store to be used for other calls
+
+ // like, say, this one to create a ticket
+
+ Vector ticket_params = new Vector();
+ ticket_params.addElement( "session_id" );
+ ticket_params.addElement( sessionId );
+ ticket_params.addElement( "queue" );
+ ticket_params.addElement( 3 ); // otherwise defaults to
+ // ticket_system-selfservice_queueid
+ // or ticket_system-default_queueid
+ ticket_params.addElement( "requestor" ); // these
+ ticket_params.addElement( "email@example.com" ); // are
+ ticket_params.addElement( "cc" ); // optional
+ ticket_params.addElement( "joe@example.com" ); //
+ ticket_params.addElement( "subject" );
+ ticket_params.addElement( "Houston, we have a problem." );
+ ticket_params.addElement( "message" );
+ ticket_params.addElement( "The Oscillation Overthurster has gone out of alignment!<br><br>It needs to be fixed immediately! <A HREF=\"http://linktest.freeside.biz/hi\">link test</A>" );
+ ticket_params.addElement( "mime_type" );
+ ticket_params.addElement( "text/html" );
+
+ HashMap ticket_result = client.execute( "create_ticket", ticket_params);
+
+ String error = (String) ticket_result.get("error");
+
+ if (error.length() < 1) {
+
+ // successful ticket creation
+
+ String ticketId = (String) ticket_result.get("ticket_id");
+
+ logger.trace("[login] ticket created with id="+ticketId);
+
+ } else {
+
+ // unsuccesful creating ticket
+
+ logger.warn("[login] error creating ticket: "+error);
+
+ }
+
+ }else{
+
+ // unsuccessful login
+
+ logger.warn("[login] error logging into freeside: "+error);
+
+ // display/say error message to user
+
+ }
+ }
+}
diff --git a/fs_selfservice/perl/xmlrpc-create_ticket.pl b/fs_selfservice/perl/xmlrpc-create_ticket.pl
new file mode 100755
index 000000000..0ccada291
--- /dev/null
+++ b/fs_selfservice/perl/xmlrpc-create_ticket.pl
@@ -0,0 +1,41 @@
+#!/usr/bin/perl
+
+use strict;
+use Frontier::Client;
+use Data::Dumper;;
+
+my $server = new Frontier::Client (
+ url => 'http://localhost/selfservice/xmlrpc.cgi',
+);
+
+my $result = $server->call('FS.SelfService.XMLRPC.login',
+ 'username' => '4155551212',
+ 'password' => '5454',
+ 'domain' => 'svc_phone',
+);
+
+#print Dumper($result);
+die $result->{'error'} if $result->{'error'};
+
+my $session_id = $result->{'session_id'};
+warn "logged in with session_id $session_id\n";
+
+my $t_result = $server->call('FS.SelfService.XMLRPC.create_ticket',
+ 'session_id' => $session_id,
+ 'queue' => 3, #otherwise defaults to ticket_system-selfservice_queueid
+ #or ticket_system-default_queueid
+ 'requestor' => 'harveylala@example.com',
+ 'cc' => 'chiquitabanana@example.com',
+ 'subject' => 'Chiquita keeps sitting on me',
+ 'message' => 'Is there something you can do about this?<BR><BR>She keeps waking me up! <A HREF="http://linktest.freeside.biz/hi">link test</A>',
+ 'mime_type' => 'text/html',
+);
+
+die $t_result->{'error'} if $t_result->{'error'};
+
+warn Dumper($t_result);
+
+my $ticket_id = $t_result->{'ticket_id'};
+warn "ticket $ticket_id created\n";
+
+1;
diff --git a/httemplate/browse/access_user.html b/httemplate/browse/access_user.html
index 321025b69..3162e3a6c 100644
--- a/httemplate/browse/access_user.html
+++ b/httemplate/browse/access_user.html
@@ -49,13 +49,29 @@ my $groups_sub = sub {
};
+my $cust_sub = sub {
+ my $access_user = shift;
+ $access_user->user_custnum ? $access_user->user_cust_main->name : '';
+};
+my $cust_link = [ $p.'view/cust_main.cgi?custnum=', 'user_custnum' ];
+
my $count_query = 'SELECT COUNT(*) FROM access_user';
my $link = [ $p.'edit/access_user.html?', 'usernum' ];
-my @header = ( '#', 'Username', 'Full name', 'Groups' );
-my @fields = ( 'usernum', 'username', 'name', $groups_sub );
-my $align = 'rlll';
-my @links = ( $link, $link, $link, '' );
+my @header = ( '#', 'Username', 'Full name', 'Groups', 'Customer' );
+my @fields = ( 'usernum', 'username', 'name', $groups_sub, $cust_sub, );
+my $align = 'rllll';
+my @links = ( $link, $link, $link, '', $cust_link );
+
+#if ( FS::Conf->new->config('ticket_system') ) {
+# push @header, 'Ticketing';
+# push @fields, sub {
+# my $access_user = shift;
+#
+# };
+# $align .= 'l';
+# push @links, '';
+#}
</%init>
diff --git a/httemplate/browse/part_pkg_taxclass.html b/httemplate/browse/part_pkg_taxclass.html
index 04e0e23d6..fb70ee417 100644
--- a/httemplate/browse/part_pkg_taxclass.html
+++ b/httemplate/browse/part_pkg_taxclass.html
@@ -6,7 +6,7 @@
],
'query' => { 'table' => 'part_pkg_taxclass', },
'count_query' => 'SELECT COUNT(*) FROM part_pkg_taxclass',
- 'header' => [ '#', 'Device type' ],
+ 'header' => [ '#', 'Tax class' ],
'fields' => [ 'taxclassnum',
'taxclass',
],
diff --git a/httemplate/browse/rate_detail.html b/httemplate/browse/rate_detail.html
index 23bc23ff8..3371926b4 100644
--- a/httemplate/browse/rate_detail.html
+++ b/httemplate/browse/rate_detail.html
@@ -15,6 +15,7 @@
'Region',
'Prefix(es)',
'Included<BR>minutes',
+ 'Connection<BR>charge',
'Charge per<BR>minute',
'Granularity',
'Usage class',
@@ -22,12 +23,9 @@
'fields' => [
'regionname',
sub { shift->dest_region->prefixes_short },
- sub { shift->min_included.
- '&nbsp;<FONT SIZE="-1">(edit)</FONT>';
- },
- sub { $money_char. shift->min_charge.
- '&nbsp;<FONT SIZE="-1">(edit)</FONT>';
- },
+ sub { shift->min_included. $edit_hint },
+ $conn_charge_sub,
+ sub { $money_char. shift->min_charge. $edit_hint },
sub { $granularity{ shift->sec_granularity } },
'classname',
],
@@ -39,6 +37,7 @@
<%once>
tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
+tie my %conn_secs, 'Tie::IxHash', FS::rate_detail::conn_secs();
my $conf = new FS::Conf;
my $money_char = $conf->config('money_char') || '$';
@@ -59,6 +58,15 @@ my $edit_onclick = sub {
#default# 'color' => '#333399',
);
};
+my $edit_hint = '&nbsp;<FONT SIZE="-1">(edit)</FONT>';
+
+my $conn_charge_sub = sub {
+ my $rate_detail = shift;
+ #return '' unless $rate_detail->conn_charge > 0 || $rate_detail->conn_sec;
+ $money_char. $rate_detail->conn_charge.
+ ($rate_detail->conn_sec ? ' for '.$conn_secs{$rate_detail->conn_sec} : '').
+ $edit_hint;
+};
</%once>
<%init>
diff --git a/httemplate/config/config-view.cgi b/httemplate/config/config-view.cgi
index 13286cf21..08f6c1020 100644
--- a/httemplate/config/config-view.cgi
+++ b/httemplate/config/config-view.cgi
@@ -43,7 +43,10 @@ Click on a configuration value to change it.
<TABLE BGCOLOR="#cccccc" BORDER=1 CELLSPACING=0 CELLPADDING=0 BORDERCOLOR="#999999">
<tr>
<th colspan="2" bgcolor="#dcdcdc">
- <% ucfirst($section || 'unclassified') %> configuration options
+ <% ucfirst($section || 'unclassified') %>
+% if ( $curuser->option('show_confitem_counts') ) {
+ (<% scalar( @{ $section_items{$section} } ) %> items)
+% }
</th>
</tr>
% foreach my $i (@{ $section_items{$section} }) {
@@ -319,8 +322,9 @@ my %namecol = (
</%once>
<%init>
-die "access denied"
- unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
+my $curuser = $FS::CurrentUser::CurrentUser;
+
+die "access denied" unless $curuser->access_right('Configuration');
my $page_agent = '';
my $title;
@@ -345,7 +349,7 @@ my @config_items = grep { $page_agent ? $_->per_agent : 1 }
my @deleteable = qw( invoice_latexreturnaddress invoice_htmlreturnaddress );
my %deleteable = map { $_ => 1 } @deleteable;
-my @sections = qw(required billing username password UI session shell BIND );
+my @sections = qw(required billing invoicing UI self-service username password session shell BIND );
push @sections, '', 'deprecated';
my %section_items = ();
diff --git a/httemplate/docs/about.html b/httemplate/docs/about.html
index 04af73db8..056c17c3e 100644
--- a/httemplate/docs/about.html
+++ b/httemplate/docs/about.html
@@ -8,7 +8,7 @@
</CENTER>
<CENTER>
-<FONT SIZE="-1">&copy; 2009 Freeside Internet Services, Inc.<BR>
+<FONT SIZE="-1">&copy; 2010 Freeside Internet Services, Inc.<BR>
All rights reserved.<BR>
Licensed under the terms of the<BR>
GNU <b>Affero</b> General Public License.<BR>
@@ -29,7 +29,7 @@ GNU <b>Affero</b> General Public License.<BR>
<BR>
<CENTER>
-<FONT SIZE="-3">"I need a miracle every day." -J.P. Barlow</FONT>
+<FONT SIZE="-3">"Put your gold money where your love is, baby" -R. Hunter</FONT>
</CENTER>
<SCRIPT TYPE="text/javascript">
diff --git a/httemplate/docs/credits.html b/httemplate/docs/credits.html
index d927722e0..10b9e70a4 100644
--- a/httemplate/docs/credits.html
+++ b/httemplate/docs/credits.html
@@ -36,12 +36,13 @@ Peter Bowen<BR>
Jeremy Davis<BR>
Jeff Finucane<BR>
Jason Hall<BR>
-Kristian Hoffman<BR>
Ivan Kohler<BR>
Richard Siddall<BR>
+Mark Wells<BR>
<BR>
<H3>Core Emeritus</H3>
+Kristian Hoffman<BR>
Brian McCane<BR>
Matt Simerson<BR>
<BR>
@@ -90,7 +91,6 @@ Audrey Tang<BR>
Jason Thomas<BR>
Jesse Vincent<BR>
Johan Vromans<BR>
-Mark Wells<BR>
Peter Wemm<BR>
Mark Williamson<BR>
Tim Yardley<BR>
diff --git a/httemplate/docs/man/FS/part_export/.cvs_is_on_crack b/httemplate/docs/man/FS/part_export/.cvs_is_on_crack
deleted file mode 100644
index e69de29bb..000000000
--- a/httemplate/docs/man/FS/part_export/.cvs_is_on_crack
+++ /dev/null
diff --git a/httemplate/edit/REAL_cust_pkg.cgi b/httemplate/edit/REAL_cust_pkg.cgi
index c31213805..29c8ca63f 100755
--- a/httemplate/edit/REAL_cust_pkg.cgi
+++ b/httemplate/edit/REAL_cust_pkg.cgi
@@ -94,7 +94,7 @@
<SCRIPT TYPE="text/javascript">
Calendar.setup({
inputField: "<% $column %>_text",
- ifFormat: "%m/%d/%Y",
+ ifFormat: "<% $date_format %>",
button: "<% $column %>_button",
align: "BR"
});
@@ -128,21 +128,20 @@
</FORM>
<% include('/elements/footer.html') %>
+<%shared>
-<%once>
+my $conf = new FS::Conf;
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
-#my $format = "%c %z (%Z)";
-my $format = "%m/%d/%Y %T %z (%Z)";
+my $format = $date_format. ' %T %z (%Z)';
-#false laziness w/view/cust_main/packages.html
-#my( $billed_or_prepaid,
-
-</%once>
+</%shared>
<%init>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Edit customer package dates');
+
my $error = '';
my( $pkgnum, $cust_pkg );
diff --git a/httemplate/edit/access_user.html b/httemplate/edit/access_user.html
index 73488ef9a..1f52b4789 100644
--- a/httemplate/edit/access_user.html
+++ b/httemplate/edit/access_user.html
@@ -7,16 +7,18 @@
{ field=>'_password2', type=>'password' },
'last',
'first',
+ { field=>'user_custnum', type=>'search-cust_main', },
{ field=>'disabled', type=>'checkbox', value=>'Y' },
],
'labels' => {
- 'usernum' => 'User number',
- 'username' => 'Username',
- '_password' => 'Password',
- '_password2'=> 'Re-enter Password',
- 'last' => 'Last name',
- 'first' => 'First name',
- 'disabled' => 'Disable employee',
+ 'usernum' => 'User number',
+ 'username' => 'Username',
+ '_password' => 'Password',
+ '_password2 '=> 'Re-enter Password',
+ 'last' => 'Last name',
+ 'first' => 'First name',
+ 'user_custnum' => 'Customer (optional)',
+ 'disabled' => 'Disable employee',
},
'edit_callback' => sub { my( $c, $o ) = @_;
$o->set('_password', '');
diff --git a/httemplate/edit/cust_credit.cgi b/httemplate/edit/cust_credit.cgi
index febf281f9..dc80847de 100755
--- a/httemplate/edit/cust_credit.cgi
+++ b/httemplate/edit/cust_credit.cgi
@@ -14,7 +14,7 @@
<TR>
<TD ALIGN="right">Date</TD>
- <TD BGCOLOR="#ffffff"><% time2str("%D",$_date) %></TD>
+ <TD BGCOLOR="#ffffff"><% time2str($date_format, $_date) %></TD>
</TR>
<TR>
@@ -64,12 +64,10 @@
</FORM>
</BODY>
</HTML>
-<%once>
+<%init>
my $conf = new FS::Conf;
-
-</%once>
-<%init>
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Post credit');
diff --git a/httemplate/edit/cust_main/top_misc.html b/httemplate/edit/cust_main/top_misc.html
index 041050664..d1d436851 100644
--- a/httemplate/edit/cust_main/top_misc.html
+++ b/httemplate/edit/cust_main/top_misc.html
@@ -43,6 +43,7 @@
%if ( $cust_main->referral_custnum
% and $referring_cust_main =
% qsearchs('cust_main', { custnum => $cust_main->referral_custnum } )
+% and ! $curuser->access_right('Edit referring customer')
%) {
<TR>
@@ -52,8 +53,8 @@
</TD>
</TR>
<INPUT TYPE="hidden" NAME="referral_custnum" VALUE="<% $cust_main->referral_custnum %>">
-% } elsif ( ! $conf->exists('disable_customer_referrals') ) {
+% } elsif ( ! $conf->exists('disable_customer_referrals') ) {
<TR>
<TD ALIGN="right">Referring customer</TD>
@@ -61,13 +62,13 @@
<!-- <INPUT TYPE="text" NAME="referral_custnum" VALUE=""> -->
<% include('/elements/search-cust_main.html',
'field_name' => 'referral_custnum',
+ 'curr_value' => $cust_main->referral_custnum,
)
%>
</TD>
</TR>
-% } else {
-
+% } else {
<INPUT TYPE="hidden" NAME="referral_custnum" VALUE="">
% }
@@ -77,7 +78,7 @@
'name' => 'signupdate',
'value' => $cust_main->signupdate,
'label' => 'Signup date',
- 'format' => $conf->config('date_format') || "%m/%d/%Y",
+ 'format' => ( $conf->config('date_format') || "%m/%d/%Y" ),
})
%>
% }
@@ -92,6 +93,8 @@ my $custnum = $opt{'custnum'};
my $conf = new FS::Conf;
+my $curuser = $FS::CurrentUser::CurrentUser;
+
my $r = qq!<font color="#ff0000">*</font>&nbsp;!;
</%init>
diff --git a/httemplate/edit/cust_main_note.cgi b/httemplate/edit/cust_main_note.cgi
index 6c6a1a9a0..e2501cb54 100755
--- a/httemplate/edit/cust_main_note.cgi
+++ b/httemplate/edit/cust_main_note.cgi
@@ -6,11 +6,11 @@
<INPUT TYPE="hidden" NAME="custnum" VALUE="<% $custnum %>">
<INPUT TYPE="hidden" NAME="notenum" VALUE="<% $notenum %>">
-
-<BR><BR>
-<TEXTAREA NAME="comment" ROWS="12" COLS="60">
-<% $comment %>
-</TEXTAREA>
+<% include('/elements/htmlarea.html', 'field' => 'comment',
+ 'curr_value' => $comment) %>
+% #<TEXTAREA NAME="comment" ROWS="12" COLS="60">
+% # <% $comment %>
+% #</TEXTAREA>
<BR><BR>
<INPUT TYPE="submit" VALUE="<% $notenum ? "Apply Changes" : "Add Note" %>">
@@ -33,6 +33,8 @@ if ( $cgi->param('error') ) {
$comment = $note->comments;
}
+$comment =~ s/\r//g; # remove weird line breaks to protect FCKeditor
+
$cgi->param('custnum') =~ /^(\d+)$/ or die "illeagl custnum";
my $custnum = $1;
diff --git a/httemplate/edit/cust_pay.cgi b/httemplate/edit/cust_pay.cgi
index 07e51989e..a6b73b13a 100755
--- a/httemplate/edit/cust_pay.cgi
+++ b/httemplate/edit/cust_pay.cgi
@@ -26,7 +26,7 @@ Payment
<TR>
<TD ALIGN="right">Date</TD>
<TD COLSPAN=2>
- <INPUT TYPE="text" NAME="_date" ID="_date_text" VALUE="<% time2str("%m/%d/%Y %r",$_date) %>">
+ <INPUT TYPE="text" NAME="_date" ID="_date_text" VALUE="<% time2str($date_format.' %r',$_date) %>">
<IMG SRC="../images/calendar.png" ID="_date_button" STYLE="cursor: pointer" TITLE="Select date">
</TD>
</TR>
@@ -34,7 +34,7 @@ Payment
<SCRIPT TYPE="text/javascript">
Calendar.setup({
inputField: "_date_text",
- ifFormat: "%m/%d/%Y",
+ ifFormat: "<% $date_format %>",
button: "_date_button",
align: "BR"
});
@@ -100,7 +100,8 @@ Payment
my $conf = new FS::Conf;
-my $money_char = $conf->config('money_char') || '$';
+my $money_char = $conf->config('money_char') || '$';
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Post payment');
diff --git a/httemplate/edit/cust_refund.cgi b/httemplate/edit/cust_refund.cgi
index 94c0993d7..59417b4c4 100755
--- a/httemplate/edit/cust_refund.cgi
+++ b/httemplate/edit/cust_refund.cgi
@@ -41,14 +41,14 @@
</TR>
<TR>
- <TD ALIGN="right">Date</TD><TD BGCOLOR="#ffffff"><% time2str("%D",$cust_pay->_date) %></TD>
+ <TD ALIGN="right">Date</TD><TD BGCOLOR="#ffffff"><% time2str($date_format, $cust_pay->_date) %></TD>
</TR>
<TR>
<TD ALIGN="right">Method</TD><TD BGCOLOR="#ffffff"><% $payby %> # <% $paymask %></TD>
</TR>
-% unless ( $paydate ) { # possibly other reasons: i.e. card has since expired
+% unless ( $paydate || $cust_pay->payby ne 'CARD' ) { # possibly other reasons: i.e. card has since expired
<TR>
<TD ALIGN="right">Expiration</TD><TD BGCOLOR="#ffffff">
<% include( '/elements/select-month_year.html',
@@ -93,7 +93,7 @@
<TR>
<TD ALIGN="right">Date</TD>
- <TD BGCOLOR="#ffffff"><% time2str("%D",$_date) %></TD>
+ <TD BGCOLOR="#ffffff"><% time2str($date_format, $_date) %></TD>
</TR>
<TR>
@@ -134,6 +134,8 @@ die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Refund payment');
my $conf = new FS::Conf;
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
+
my $custnum = $cgi->param('custnum');
my $refund = $cgi->param('refund');
my $payby = $cgi->param('payby');
diff --git a/httemplate/edit/elements/ApplicationCommon.html b/httemplate/edit/elements/ApplicationCommon.html
index a485d37de..1fc8a09a9 100644
--- a/httemplate/edit/elements/ApplicationCommon.html
+++ b/httemplate/edit/elements/ApplicationCommon.html
@@ -52,7 +52,7 @@ Examples:
<TR>
<TD ALIGN="right">Date: </TD>
- <TD><B><% time2str("%D", $src->_date) %></B></TD>
+ <TD><B><% time2str($date_format, $src->_date) %></B></TD>
</TR>
<TR>
@@ -107,7 +107,7 @@ Apply to:
<OPTION VALUE="">Select <% $dst_thing %>
% foreach my $dst ( @dst ) {
- <OPTION<% $dst->$dst_pkey eq $dst_pkeyvalue ? ' SELECTED' : '' %> VALUE="<% $dst->$dst_pkey %>">#<% $dst->$dst_pkey %> - <% time2str("%D", $dst->_date) %> - $<% $dst->$dst_unapplied %>
+ <OPTION<% $dst->$dst_pkey eq $dst_pkeyvalue ? ' SELECTED' : '' %> VALUE="<% $dst->$dst_pkey %>">#<% $dst->$dst_pkey %> - <% time2str($date_format, $dst->_date) %> - $<% $dst->$dst_unapplied %>
% }
</SELECT>
@@ -133,7 +133,8 @@ Apply to:
my %opt = @_;
my $conf = new FS::Conf;
-my $money_char = $conf->config('money_char') || '$';
+my $money_char = $conf->config('money_char') || '$';
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
my $src_thing = ucfirst($opt{'src_thing'});
my $src_table = $opt{'src_table'};
diff --git a/httemplate/edit/elements/edit.html b/httemplate/edit/elements/edit.html
index fd73e031e..1a1023cbd 100644
--- a/httemplate/edit/elements/edit.html
+++ b/httemplate/edit/elements/edit.html
@@ -40,8 +40,10 @@ Example:
'disabled' => 0,
'onchange' => 'javascript_function',
- #m2 stuff only tested w/selectlayers so far
- #might work w/select too, dunno others
+ 'include_opt_callback' => sub { my $object = @_;
+ ( 'option' => 'value', );
+ },
+
'm2name_table' => 'table_name',
'm2name_namecol' => 'name_column',
#OR#
@@ -276,9 +278,13 @@ Example:
% $include_common{$_} = $f->{$_}
% foreach grep exists($f->{$_}), qw( empty_label );
%
+% #select-table
+% $include_common{$_} = $f->{$_}
+% foreach grep exists($f->{$_}), qw( value_col extra_sql );
+%
% #select-table, checkboxes-table
% $include_common{$_} = $f->{$_}
-% foreach grep exists($f->{$_}), qw( table name_col );
+% foreach grep exists($f->{$_}), qw( table name_col );
%
% #checkboxes-table
% $include_common{$_} = $f->{$_}
@@ -290,9 +296,17 @@ Example:
%
% if ( $type eq 'tablebreak-tr-title' ) {
% $include_common{'table_id'} = 'TableNumber'. $tablenum++;
+% }
+% if ( $type eq 'tablebreak-tr-title' || $type eq 'title' ) {
% $include_common{'colspan'} = $f->{colspan} if $f->{colspan};
% }
%
+% if ( $f->{include_opt_callback} ) {
+% %include_common = ( %include_common,
+% &{ $f->{include_opt_callback} }( $object )
+% );
+% }
+%
% my $layer_prefix_on = '';
%
% my $include_sub = sub {
diff --git a/httemplate/edit/elements/svc_Common.html b/httemplate/edit/elements/svc_Common.html
index ef04bd04a..36950b2c9 100644
--- a/httemplate/edit/elements/svc_Common.html
+++ b/httemplate/edit/elements/svc_Common.html
@@ -34,12 +34,14 @@
'new_hashref_callback' => sub {
#my( $cgi, $svc_x ) = @_;
- { svcpart => $svcpart };
+ { pkgnum => $pkgnum,
+ svcpart => $svcpart,
+ };
},
'new_callback' => sub {
- my( $cgi, $svc_x, $fields, $opt ) = @_;;
+ my( $cgi, $svc_x, $fields, $opt ) = @_;
$part_svc = qsearchs( 'part_svc', { svcpart=>$svcpart });
die "No part_svc entry!" unless $part_svc;
@@ -48,12 +50,20 @@
#$svcnum='';
+ if ( my $cb = $opt{'svc_new_callback'} ) {
+ my $cust_pkg = $pkgnum
+ ? qsearchs('cust_pkg', {pkgnum=>$pkgnum})
+ : ''; #?
+ &{ $cb }( $cgi,$svc_x, $part_svc,$cust_pkg, $fields,$opt);
+ }
+
$svc_x->set_default_and_fixed;
},
'field_callback' => sub {
my ($cgi, $object, $f) = @_;
+
my $columndef = $part_svc->part_svc_column($f->{'field'});
my $flag = $columndef->columnflag;
if ( $flag eq 'F' ) {
@@ -61,7 +71,41 @@
? 'fixed'
: 'hidden';
$f->{'value'} = $columndef->columnvalue;
+ } elsif ( $flag eq 'A' ) {
+ $f->{'type'} = 'hidden';
+ } elsif ( $flag eq 'M' ) {
+ $f->{'empty_label'} = 'Select inventory item';
+ $f->{'type'} = 'select-table';
+ $f->{'table'} = 'inventory_item';
+ $f->{'name_col'} = 'item';
+ $f->{'value_col'} = 'item';
+ $f->{'hashref'} = {
+ 'classnum'=>$columndef->columnvalue,
+ #'svcnum' => '',
+ };
+ $f->{'extra_sql'} = 'AND ( svcnum IS NULL ';
+ $f->{'extra_sql'} .= ' OR svcnum = '. $object->svcnum
+ if $object->svcnum;
+ $f->{'extra_sql'} .= ' ) ';
+ $f->{'disable_empty'} = $object->svcnum ? 1 : 0,
+ }
+
+ if ( $f->{'type'} eq 'select-svc_pbx'
+ || $f->{'type'} eq 'select-svc-domain'
+ )
+ {
+ $f->{'include_opt_callback'} =
+ sub { ( 'pkgnum' => $pkgnum,
+ 'svcpart' => $svcpart,
+ );
+ };
+ }
+
+ if ( $f->{'field'} eq 'custnum' && $pkgnum ) {
+ my $cust_pkg = qsearchs('cust_pkg', {'pkgnum' => $pkgnum});
+ $object->set('custnum', $cust_pkg->custnum);
}
+
},
'html_init' => sub {
@@ -111,12 +155,33 @@
sub label_fixup {
my( $part_svc, $opt ) = @_;
+ $opt->{'name'} ||= $part_svc->svc;
+
+ my $svcdb = $part_svc->svcdb;
+ require "FS/$svcdb.pm";
+
+ if ( UNIVERSAL::can("FS::$svcdb", 'table_info') ) {
+ #$opt->{'name'} ||= "FS::$svcdb"->table_info->{'name'};
+
+ my $fields = "FS::$svcdb"->table_info->{'fields'};
+ $opt->{'fields'} ||= [ grep { $_ ne 'svcnum' } keys %$fields ];
+
+ $opt->{labels} ||= {
+ map { $_ => ( ref($fields->{$_})
+ ? $fields->{$_}{'label'}
+ : $fields->{$_}
+ );
+ }
+ keys %$fields
+ };
+ }
+
#false laziness w/view/svc_Common.html
#override default labels with service-definition labels if applicable
my $labels = $opt->{labels}; # with -> here
- foreach my $field ( keys %$labels ) {
+ foreach my $field ( keys %{ $opt->{labels} } ) {
my $col = $part_svc->part_svc_column($field);
- $labels->{$field} = $col->columnlabel if $col->columnlabel !~ /^\S*$/;
+ $labels->{$field} = $col->columnlabel if $col->columnlabel !~ /^\s*$/;
}
}
diff --git a/httemplate/edit/mailinglistmember.html b/httemplate/edit/mailinglistmember.html
new file mode 100644
index 000000000..2391cb697
--- /dev/null
+++ b/httemplate/edit/mailinglistmember.html
@@ -0,0 +1,25 @@
+<% include( 'elements/edit.html',
+ 'name_singular' => 'member',
+ 'table' => 'mailinglistmember',
+ 'popup' => 1,
+ 'fields' => [
+ { field=>'listnum', type=>'hidden', },
+ { field=>'svcnum', type=>'hidden', }, #not yet
+ { field=>'contactemailnum', type=>'hidden', }, #not yet
+ { field=>'email', type=>'text', },
+ ],
+ 'labels' => { 'membernum' => 'Member',
+ 'email' => 'Email address',
+ },
+ 'new_callback' => $new_callback,
+ )
+%>
+<%init>
+
+my $new_callback = sub {
+ #my( $cgi, $object, $fields_listref, $opt_hashref ) = @_;
+ my( $cgi, $object ) = @_;
+ $object->listnum( $cgi->param('listnum') );
+};
+
+</%init>
diff --git a/httemplate/edit/part_device.html b/httemplate/edit/part_device.html
index 4f2fe93b4..146070fd9 100644
--- a/httemplate/edit/part_device.html
+++ b/httemplate/edit/part_device.html
@@ -6,6 +6,7 @@
'devicename' => 'Device name',
},
'viewall_dir' => 'browse',
+ 'html_bottom' => $html_bottom_sub,
)
%>
<%init>
@@ -13,4 +14,32 @@
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
+my $extra_sql =
+ join( ' OR ', map { "exporttype = '$_'" }
+ keys %{FS::part_export::export_info('part_device')}
+ );
+$extra_sql = $extra_sql ? " WHERE ( $extra_sql ) " : " WHERE 0 = 1 ";
+
+my $html_bottom_sub = sub {
+ my $part_device = shift;
+
+ '<BR>'.
+ '<FONT SIZE="+1">Exports</FONT><BR>'.
+
+ '<TABLE BGCOLOR="#cccccc" WIDTH=100%>'.
+ '<TR><TD>'.
+ include( '/elements/checkboxes-table.html',
+ 'source_obj' => $part_device,
+ 'link_table' => 'export_device',
+ 'target_table' => 'part_export',
+ 'extra_sql' => $extra_sql,
+ 'name_callback' => sub { my $o = shift;
+ $o->exporttype. ' to '. $o->machine;
+ },
+ ).
+ '</TD></TR></TABLE>';
+
+};
+
</%init>
+
diff --git a/httemplate/edit/part_pkg.cgi b/httemplate/edit/part_pkg.cgi
index a02545f84..f9818c4f9 100755
--- a/httemplate/edit/part_pkg.cgi
+++ b/httemplate/edit/part_pkg.cgi
@@ -162,15 +162,17 @@
{ type => 'columnend' },
- { 'type' => $census ? 'tablebreak-tr-title'
- : 'hidden',
+ { 'type' => $report_option ? 'tablebreak-tr-title'
+ : 'hidden',
'value' => 'Optional report classes',
'field' => 'census_title',
},
{ 'field' => 'report_option',
- 'type' => $census ? 'select-table' : 'hidden',
+ 'type' => $report_option ? 'select-table'
+ : 'hidden',
'table' => 'part_pkg_report_option',
'name_col' => 'name',
+ 'hashref' => { 'disabled' => '' },
'multiple' => 1,
},
@@ -256,7 +258,7 @@ my $sth = dbh->prepare("SELECT COUNT(*) FROM part_pkg_report_option".
" WHERE disabled IS NULL OR disabled = '' ")
or die dbh->errstr;
$sth->execute or die $sth->errstr;
-my $census = $sth->fetchrow_arrayref->[0];
+my $report_option = $sth->fetchrow_arrayref->[0];
#XXX
# - tr-part_pkg_freq: month_increments_only (from price plans)
@@ -409,7 +411,6 @@ my $m2_error_callback_maker = sub {
my $link_type = shift; #yay closures
return sub {
my( $cgi, $object ) = @_;
- my $num;
map {
if ( /^${link_type}_dst_pkgpart(\d+)$/ &&
diff --git a/httemplate/edit/part_svc.cgi b/httemplate/edit/part_svc.cgi
index 79703435c..98ed9fec1 100755
--- a/httemplate/edit/part_svc.cgi
+++ b/httemplate/edit/part_svc.cgi
@@ -15,10 +15,12 @@ Disable new orders <INPUT TYPE="checkbox" NAME="disabled" VALUE="Y"<% $hashref->
Service definitions are the templates for items you offer to your customers.
<UL><LI>svc_acct - Accounts - anything with a username (Mailboxes, PPP accounts, shell accounts, RADIUS entries for broadband, etc.)
<LI>svc_domain - Domains
- <LI>svc_forward - mail forwarding
+ <LI>svc_forward - Mail forwarding
+ <LI>svc_mailinglist - Mailing list
<LI>svc_www - Virtual domain website
<LI>svc_broadband - Broadband/High-speed Internet service (always-on)
<LI>svc_phone - Customer phone numbers
+ <LI>svc_pbx - Customer PBXs
<LI>svc_external - Externally-tracked service
<!-- <LI>svc_charge - One-time charges (Partially unimplemented)
<LI>svc_wo - Work orders (Partially unimplemented)
@@ -64,10 +66,9 @@ that field.
% 'condition' =>
% sub { !ref($_[0]) || $_[0]->{disable_select} },
% },
-%# need to template-ize httemplate/edit/svc_* first
-%# 'M' => { 'desc' => 'Manual selection from inventory',
-%# 'condition' => $inv_sub,
-%# },
+% 'M' => { 'desc' => 'Manual selection from inventory',
+% 'condition' => $inv_sub,
+% },
% 'A' => { 'desc' => 'Automatically fill in from inventory',
% 'condition' => $inv_sub,
% },
@@ -184,6 +185,9 @@ that field.
%
% foreach my $f ( keys %flag ) {
%
+% # need to template-ize more httemplate/edit/svc_* first
+% next if $f eq 'M' and $layer !~ /^svc_(broadband|external|phone)$/;
+%
% #here is where the SUB from above is called, to skip some choices
% next if $flag{$f}->{condition}
% && &{ $flag{$f}->{condition} }( $def, $layer, $field );
@@ -265,6 +269,14 @@ that field.
% 'empty_label' => 'Select inventory class',
% );
%
+% } elsif ( $def->{type} eq 'checkbox' ) {
+%
+% $html .= include('/elements/checkbox.html',
+% 'field' => $layer.'__'.$field,
+% 'curr_value' => $value,
+% 'value' => 'Y',
+% );
+%
% } elsif ( $def->{type} eq 'select' ) {
%
% $html .= qq!<SELECT NAME="${layer}__${field}" $disabled!;
@@ -288,6 +300,15 @@ that field.
% } #endif
% $html .= '</SELECT>';
%
+% } elsif ( $def->{type} eq 'select-svc_pbx.html' ) {
+%
+% $html .= include('/elements/select-svc_pbx.html',
+% 'curr_value' => $value,
+% 'element_name' => "${layer}__${field}",
+% 'element_etc' => $disabled,
+% 'multiple' => ($flag eq 'S'),
+% );
+%
% } elsif ( $def->{type} eq 'radius_usergroup_selector' ) {
%
% #XXX disable the RADIUS usergroup selector? ugh it sure does need
@@ -296,6 +317,14 @@ that field.
% $html .= FS::svc_acct::radius_usergroup_selector(
% [ split(',', $value) ], "${layer}__${field}" );
%
+% } elsif ( $def->{type} eq 'communigate_pro-accessmodes' ) {
+%
+% $html .= include('/elements/communigate_pro-accessmodes.html',
+% 'element_name_prefix' => "${layer}__${field}_",
+% 'curr_value' => $value,
+% #doesn't work#'element_etc' => $disabled,
+% );
+%
% } elsif ( $def->{type} eq 'disabled' ) {
%
% $html .=
@@ -303,7 +332,7 @@ that field.
%
% } else {
%
-% $html .= '<font color="#ff0000">unknown type'. $def->{type};
+% $html .= '<font color="#ff0000">unknown type '. $def->{type};
%
% }
%
diff --git a/httemplate/edit/process/REAL_cust_pkg.cgi b/httemplate/edit/process/REAL_cust_pkg.cgi
index 22aab44e8..b5796ebf5 100755
--- a/httemplate/edit/process/REAL_cust_pkg.cgi
+++ b/httemplate/edit/process/REAL_cust_pkg.cgi
@@ -39,14 +39,15 @@ push @errors, '_setup_areyousure'
&& ! $cgi->param('setup_areyousure'); # and it wasn't confirmed
push @errors, '_start'
- if $hash{'start_date'} && $old->start_date # if a start date was added
- && $hash{'setup'}; # but there's a setup date
+ if $hash{'start_date'} && !$old->start_date # if a start date was added
+ && $hash{'setup'}; # but there's a setup date
my $new;
my $error;
if ( @errors ) {
$error = join(',', @errors);
} else {
+ warn join(',',%hash);
$new = new FS::cust_pkg \%hash;
$error = $new->replace($old);
}
diff --git a/httemplate/edit/process/mailinglistmember.html b/httemplate/edit/process/mailinglistmember.html
new file mode 100644
index 000000000..f1842b8ef
--- /dev/null
+++ b/httemplate/edit/process/mailinglistmember.html
@@ -0,0 +1,6 @@
+<% include( 'elements/process.html',
+ 'table' => 'mailinglistmember',
+ 'popup_reload' => 'Member added',
+ )
+%>
+%#XXX ACL
diff --git a/httemplate/edit/process/rate_region.cgi b/httemplate/edit/process/rate_region.cgi
index 882991e9d..8036f7388 100755
--- a/httemplate/edit/process/rate_region.cgi
+++ b/httemplate/edit/process/rate_region.cgi
@@ -39,7 +39,7 @@ my @dest_detail = map {
new FS::rate_detail {
'ratenum' => $ratenum,
map { $_ => $cgi->param("$_$ratenum") }
- qw( min_included min_charge sec_granularity classnum )
+ qw( min_included conn_charge conn_sec min_charge sec_granularity classnum )
};
} qsearch('rate', {} );
diff --git a/httemplate/edit/process/svc_acct.cgi b/httemplate/edit/process/svc_acct.cgi
index 515d89e91..0d2c007f1 100755
--- a/httemplate/edit/process/svc_acct.cgi
+++ b/httemplate/edit/process/svc_acct.cgi
@@ -11,7 +11,6 @@ die "access denied"
$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!";
my $svcnum = $1;
-my $error;
my $old;
if ( $svcnum ) {
@@ -32,6 +31,18 @@ foreach (map { $_,$_."_threshold" } qw( upbytes downbytes totalbytes )) {
$cgi->param($_, FS::UI::bytecount::parse_bytecount($cgi->param($_)) );
}
+#unmunge cgp_accessmodes (falze laziness-ish w/part_svc.pm::process &svc_domain)
+unless ( $cgi->param('cgp_accessmodes') ) {
+ $cgi->param('cgp_accessmodes',
+ join(' ',
+ sort map { /^cgp_accessmodes_([\w\/]+)$/ or die "no way"; $1; }
+ grep $cgi->param($_),
+ grep /^cgp_accessmodes_([\w\/]+)$/,
+ $cgi->param()
+ )
+ );
+}
+
my %hash = $svcnum ? $old->hash : ();
map {
$hash{$_} = scalar($cgi->param($_));
@@ -40,27 +51,31 @@ map {
} (fields('svc_acct'), qw ( pkgnum svcpart usergroup ));
my $new = new FS::svc_acct ( \%hash );
+my $error = '';
+
$new->_password($old->_password) if $old;
-if( $cgi->param('clear_password') eq '*HIDDEN*'
- or $cgi->param('clear_password') =~ /^\(.* encrypted\)$/ ) {
+if ( $cgi->param('clear_password') eq '*HIDDEN*'
+ || $cgi->param('clear_password') =~ /^\(.* encrypted\)$/ ) {
die "fatal: no previous account to recall hidden password from!" unless $old;
-}
-else {
+} else {
$error = $new->set_password($cgi->param('clear_password'));
}
if ( $svcnum ) {
- foreach (grep { $old->$_ != $new->$_ } qw( seconds upbytes downbytes totalbytes )) {
+ foreach ( grep { $old->$_ != $new->$_ }
+ qw( seconds upbytes downbytes totalbytes )
+ )
+ {
my %hash = map { $_ => $new->$_ }
grep { $new->$_ }
qw( seconds upbytes downbytes totalbytes );
- $error = $new->set_usage(\%hash); #unoverlimit and trigger radius changes
- last; #once is enough
+ $error ||= $new->set_usage(\%hash); #unoverlimit and trigger radius changes
+ last; #once is enough
}
$error ||= $new->replace($old);
} else {
- $error = $new->insert;
+ $error ||= $new->insert;
$svcnum = $new->svcnum;
}
diff --git a/httemplate/edit/process/svc_domain.cgi b/httemplate/edit/process/svc_domain.cgi
index 59b518097..381339bc8 100755
--- a/httemplate/edit/process/svc_domain.cgi
+++ b/httemplate/edit/process/svc_domain.cgi
@@ -15,6 +15,30 @@ $FS::svc_domain::whois_hack = 1;
$cgi->param('svcnum') =~ /^(\d*)$/ or die "Illegal svcnum!";
my $svcnum = $1;
+#unmunge cgp_accessmodes (falze laziness-ish w/part_svc.pm::process & svc_acct)
+unless ( $cgi->param('cgp_accessmodes') ) {
+ $cgi->param('cgp_accessmodes',
+ join(' ',
+ sort map { /^cgp_accessmodes_([\w\/]+)$/ or die "no way"; $1; }
+ grep $cgi->param($_),
+ grep /^cgp_accessmodes_([\w\/]+)$/,
+ $cgi->param()
+ )
+ );
+}
+
+#unmunge acct_def_cgp_accessmodes (falze laziness-ahoy)
+unless ( $cgi->param('acct_def_cgp_accessmodes') ) {
+ $cgi->param('acct_def_cgp_accessmodes',
+ join(' ',
+ sort map { /^acct_def_cgp_accessmodes_([\w\/]+)$/ or die "no way"; $1; }
+ grep $cgi->param($_),
+ grep /^acct_def_cgp_accessmodes_([\w\/]+)$/,
+ $cgi->param()
+ )
+ );
+}
+
my $new = new FS::svc_domain ( {
map {
$_, scalar($cgi->param($_));
@@ -24,10 +48,10 @@ my $new = new FS::svc_domain ( {
my $error = '';
if ($cgi->param('svcnum')) {
- $error="Can't modify a domain!";
+ $error = $new->replace();
} else {
- $error=$new->insert;
- $svcnum=$new->svcnum;
+ $error = $new->insert;
+ $svcnum = $new->svcnum;
}
</%init>
diff --git a/httemplate/edit/process/svc_external.html b/httemplate/edit/process/svc_external.html
new file mode 100644
index 000000000..3515afc4b
--- /dev/null
+++ b/httemplate/edit/process/svc_external.html
@@ -0,0 +1,10 @@
+<% include( 'elements/svc_Common.html',
+ 'table' => 'svc_external',
+ )
+%>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
+
+</%init>
diff --git a/httemplate/edit/process/svc_mailinglist.html b/httemplate/edit/process/svc_mailinglist.html
new file mode 100644
index 000000000..580f6ccbd
--- /dev/null
+++ b/httemplate/edit/process/svc_mailinglist.html
@@ -0,0 +1,11 @@
+<% include( 'elements/svc_Common.html',
+ 'table' => 'svc_mailinglist',
+ 'fields' => [ fields('svc_mailinglist'), 'listname' ],
+ )
+%>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
+
+</%init>
diff --git a/httemplate/edit/process/svc_phone.html b/httemplate/edit/process/svc_phone.html
index 27a703cdf..e02ec5ccc 100644
--- a/httemplate/edit/process/svc_phone.html
+++ b/httemplate/edit/process/svc_phone.html
@@ -1,5 +1,6 @@
<% include( 'elements/svc_Common.html',
'table' => 'svc_phone',
+ 'args_callback' => $args_callback,
)
%>
<%init>
@@ -7,4 +8,22 @@
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
+my $args_callback = sub {
+ my( $cgi, $object ) = @_;
+
+ my %opt = ();
+ if ( $cgi->param('locationnum') == -1 ) {
+ my $cust_location = new FS::cust_location {
+ map { $_ => scalar($cgi->param($_)) }
+ qw( custnum address1 address2 city county state zip country )
+ };
+ $opt{'cust_location'} = $cust_location;
+ }
+
+ %opt;
+
+};
+
+
+
</%init>
diff --git a/httemplate/edit/quick-charge.html b/httemplate/edit/quick-charge.html
index c96fa6c81..64ad3a289 100644
--- a/httemplate/edit/quick-charge.html
+++ b/httemplate/edit/quick-charge.html
@@ -147,7 +147,7 @@ function bill_now_changed (what) {
<SCRIPT TYPE="text/javascript">
Calendar.setup({
inputField: "start_date_text",
- ifFormat: "%m/%d/%Y",
+ ifFormat: "<% $date_format %>",
button: "start_date_button",
align: "BR"
});
@@ -250,6 +250,7 @@ die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('One-time charge');
my $conf = new FS::Conf;
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
$cgi->param('custnum') =~ /^(\d+)$/ or die 'illegal custnum';
my $custnum = $1;
diff --git a/httemplate/edit/rate_detail.html b/httemplate/edit/rate_detail.html
index dd8c3f6b3..869ace8d4 100644
--- a/httemplate/edit/rate_detail.html
+++ b/httemplate/edit/rate_detail.html
@@ -6,6 +6,8 @@
'dest_regionname' => 'Region',
'dest_prefixes_short' => 'Prefix(es)',
'min_included' => 'Included minutes/calls',
+ 'conn_charge' => 'Connection charge',
+ 'conn_sec' => 'For',
'min_charge' => 'Charge per minute/call',
'sec_granularity' => 'Granularity',
'classnum' => 'Usage class',
@@ -17,6 +19,13 @@
{ field=>'dest_regionname', type=>'fixed', },
{ field=>'dest_prefixes_short', type=>'fixed', },
{ field=>'min_included', type=>'text', size=>5 },
+ { field=>'conn_charge', type=>'money', size=>4 },
+ { field =>'conn_sec',
+ type =>'select',
+ options => [ keys %conn_secs ],
+ labels => \%conn_secs,
+ disable_empty => 1,
+ },
{ field=>'min_charge', type=>'money', size=>4 },
{ field =>'sec_granularity',
type =>'select',
@@ -38,9 +47,9 @@
<%once>
tie my %granularity, 'Tie::IxHash', FS::rate_detail::granularities();
+tie my %conn_secs, 'Tie::IxHash', FS::rate_detail::conn_secs();
</%once>
-
<%init>
my $conf = new FS::Conf;
diff --git a/httemplate/edit/rate_region.cgi b/httemplate/edit/rate_region.cgi
index 9ca3a3569..f77c0dbe7 100644
--- a/httemplate/edit/rate_region.cgi
+++ b/httemplate/edit/rate_region.cgi
@@ -52,6 +52,12 @@
<FONT SIZE=-1>Included<BR>minutes/calls</FONT>
</TH>
<TH CLASS="grid" BGCOLOR="#cccccc">
+ <FONT SIZE=-1>Connection<BR>charge</FONT>
+ </TH>
+ <TH CLASS="grid" BGCOLOR="#cccccc">
+ <FONT SIZE=-1>Connection<BR>charge for</FONT>
+ </TH>
+ <TH CLASS="grid" BGCOLOR="#cccccc">
<FONT SIZE=-1>Charge per<BR>minute/call</FONT>
</TH>
<TH CLASS="grid" BGCOLOR="#cccccc">
@@ -88,7 +94,20 @@
</TD>
<TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
- $<INPUT TYPE="text" SIZE=6 NAME="min_charge<%$n%>" VALUE="<% $cgi->param("min_charge$n") || $rate_detail->min_charge |h %>">
+ <%$money_char%><INPUT TYPE="text" SIZE=9 NAME="conn_charge<%$n%>" VALUE="<% $cgi->param("conn_charge$n") || $rate_detail->conn_charge |h %>">
+ </TD>
+
+ <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
+ <SELECT NAME="conn_sec<%$n%>">
+% foreach my $conn_sec ( keys %conn_secs ) {
+% my $curr_value = $cgi->param("conn_sec$n") || $rate_detail->conn_sec;
+% my $selected = ($conn_sec==$curr_value) ? ' SELECTED' : '';
+ <OPTION VALUE="<% $conn_sec %>" <%$selected%>><% $conn_secs{$conn_sec} %></OPTION>
+% }
+ </TD>
+
+ <TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
+ <%$money_char%><INPUT TYPE="text" SIZE=6 NAME="min_charge<%$n%>" VALUE="<% $cgi->param("min_charge$n") || $rate_detail->min_charge |h %>">
</TD>
<TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
@@ -125,12 +144,19 @@
</FORM>
<% include('/elements/footer.html') %>
+<%once>
+
+tie my %conn_secs, 'Tie::IxHash', FS::rate_detail::conn_secs();
+</%once>
<%init>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
+my $conf = new FS::Conf;
+my $money_char = $conf->config('money_char') || '$';
+
my $rate_region;
if ( $cgi->param('error') ) {
$rate_region = new FS::rate_region ( {
diff --git a/httemplate/edit/svc_Common.html b/httemplate/edit/svc_Common.html
index 6666d9720..3da72d2e8 100644
--- a/httemplate/edit/svc_Common.html
+++ b/httemplate/edit/svc_Common.html
@@ -1,7 +1,7 @@
<% include('elements/svc_Common.html',
'table' => $table,
'post_url' => popurl(1). "process/svc_Common.html",
- %opt,
+ %opt,
)
%>
<%init>
diff --git a/httemplate/edit/svc_acct.cgi b/httemplate/edit/svc_acct.cgi
index afbd002c1..99e4b74a4 100755
--- a/httemplate/edit/svc_acct.cgi
+++ b/httemplate/edit/svc_acct.cgi
@@ -54,7 +54,7 @@ Service # <% $svcnum ? "<B>$svcnum</B>" : " (NEW)" %><BR>
%}else{
<INPUT TYPE="hidden" NAME="clear_password" VALUE="<% $password %>">
%}
-<INPUT TYPE="hidden" NAME="_password_encoding" VALUE="<% $password_encoding %>">
+<INPUT TYPE="hidden" NAME="_password_encoding" VALUE="<% $svc_acct->_password_encoding %>">
%
%my $sec_phrase = $svc_acct->sec_phrase;
%if ( $conf->exists('security_phrase')
@@ -122,7 +122,27 @@ Service # <% $svcnum ? "<B>$svcnum</B>" : " (NEW)" %><BR>
</TD>
</TR>
% }
-%
+
+
+% if ( $communigate ) {
+
+ <TR>
+ <TD ALIGN="right">Aliases</TD>
+ <TD><INPUT TYPE="text" NAME="cgp_aliases" VALUE="<% $svc_acct->cgp_aliases %>"></TD>
+ </TR>
+
+% } else {
+ <INPUT TYPE="text" NAME="cgp_aliases" VALUE="<% $svc_acct->cgp_aliases %>">
+% }
+
+
+<% include('/elements/tr-select-svc_pbx.html',
+ 'curr_value' => $svc_acct->pbxsvc,
+ 'part_svc' => $part_svc,
+ 'cust_pkg' => $cust_pkg,
+ )
+%>
+
%#pop
%my $popnum = $svc_acct->popnum || 0;
%if ( $part_svc->part_svc_column('popnum')->columnflag eq 'F' ) {
@@ -234,31 +254,119 @@ Service # <% $svcnum ? "<B>$svcnum</B>" : " (NEW)" %><BR>
</TD>
</TR>
% }
-% if ( $part_svc->part_svc_column('quota')->columnflag eq 'F' ) {
+% if ( $communigate
+% && $part_svc->part_svc_column('cgp_type')->columnflag ne 'F' )
+% {
+
+ <TR>
+ <TD ALIGN="right">Mailbox type</TD>
+ <TD>
+ <SELECT NAME="cgp_type">
+% foreach my $option (qw( MultiMailbox TextMailbox MailDirMailbox
+% AGrade BGrade CGrade )) {
+ <OPTION VALUE="<% $option %>"
+ <% $option eq $svc_acct->cgp_type() ? 'SELECTED' : '' %>
+ ><% $option %>
+% }
+ </SELECT>
+ </TD>
+ </TR>
+
+% } else {
+ <INPUT TYPE="hidden" NAME="cgp_type" VALUE="<% $svc_acct->cgp_type() %>">
+% }
+
+
+% #false laziness w/svc_domain
+% if ( $communigate
+% && $part_svc->part_svc_column('cgp_accessmodes')->columnflag ne 'F' )
+% {
+
+ <TR>
+ <TD ALIGN="right">Enabled services</TD>
+ <TD>
+ <% include( '/elements/communigate_pro-accessmodes.html',
+ 'curr_value' => $svc_acct->cgp_accessmodes,
+ )
+ %>
+ </TD>
+ </TR>
+
+% } else {
+ <INPUT TYPE="hidden" NAME="cgp_accessmodes" VALUE="<% $svc_acct->cgp_accessmodes() |h %>">
+% }
+
+
+% if ( $part_svc->part_svc_column('quota')->columnflag eq 'F' ) {
<INPUT TYPE="hidden" NAME="quota" VALUE="<% $svc_acct->quota %>">
-% } else {
+% } else {
+% my $quota_label = $communigate ? 'Mail storage limit' : 'Quota';
+ <TR>
+ <TD ALIGN="right"><% $quota_label %></TD>
+ <TD><INPUT TYPE="text" NAME="quota" VALUE="<% $svc_acct->quota %>"></TD>
+ </TR>
+% }
+
+% tie my %cgp_label, 'Tie::IxHash',
+% 'file_quota' => 'File storage limit',
+% 'file_maxnum' => 'Number of files limit',
+% 'file_maxsize' => 'File size limit',
+% ;
+%
+% foreach my $key (keys %cgp_label) {
+%
+% if ( !$communigate || $part_svc->part_svc_column($key)->columnflag eq 'F' ){
+ <INPUT TYPE="hidden" NAME="<%$key%>" VALUE="<% $svc_acct->$key() |h %>">
+% } else {
+
+ <TR>
+ <TD ALIGN="right"><% $cgp_label{$key} %></TD>
+ <TD><INPUT TYPE="text" NAME="<% $key %>" VALUE="<% $svc_acct->$key() |h %>"></TD>
+ </TR>
+
+% }
+% }
+% if ( $communigate ) {
+%# false laziness w/svc_domain acct_def
<TR>
- <TD ALIGN="right">Quota:</TD>
- <TD><INPUT TYPE="text" NAME="quota" VALUE="<% $svc_acct->quota %>"></TD>
+ <TD ALIGN="right">Message delete method</TD>
+ <TD>
+ <SELECT NAME="cgp_deletemode">
+% for ( 'Move To Trash', 'Immediately', 'Mark' ) {
+ <OPTION VALUE="<% $_ %>"
+ <% $_ eq $svc_acct->cgp_deletemode ? 'SELECTED' : '' %>
+ ><% $_ %>
+% }
+ </SELECT>
+ </TD>
+ </TR>
+
+ <TR>
+ <TD ALIGN="right">On logout remove trash</TD>
+ <TD><INPUT TYPE="text" NAME="cgp_emptytrash" VALUE="<% $svc_acct->cgp_emptytrash %>"></TD>
</TR>
-% }
-% if ( $part_svc->part_svc_column('slipip')->columnflag =~ /^[FA]$/ ) {
+% } else {
- <INPUT TYPE="hidden" NAME="slipip" VALUE="<% $svc_acct->slipip %>">
-% } else {
+ <INPUT TYPE="hidden" NAME="cgp_deletemode" VALUE="<% $svc_acct->cgp_deletemode %>">
+ <INPUT TYPE="hidden" NAME="cgp_emptytrash" VALUE="<% $svc_acct->cgp_emptytrash %>">
+
+% }
+% if ( $part_svc->part_svc_column('slipip')->columnflag =~ /^[FA]$/ ) {
+ <INPUT TYPE="hidden" NAME="slipip" VALUE="<% $svc_acct->slipip %>">
+% } else {
<TR>
<TD ALIGN="right">IP</TD>
<TD><INPUT TYPE="text" NAME="slipip" VALUE="<% $svc_acct->slipip %>"></TD>
</TR>
% }
-%
+
% my %label = ( seconds => 'Time',
% upbytes => 'Upload bytes',
% downbytes => 'Download bytes',
@@ -392,6 +500,9 @@ if ( $cgi->param('error') ) {
}
+my $communigate = scalar($part_svc->part_export('communigate_pro'));
+ # || scalar($part_svc->part_export('communigate_pro_singledomain'));
+
my( $cust_pkg, $cust_main ) = ( '', '' );
if ( $pkgnum ) {
$cust_pkg = qsearchs('cust_pkg', { 'pkgnum' => $pkgnum } );
@@ -440,22 +551,17 @@ my $svc = $part_svc->getfield('svc');
my $otaker = getotaker;
my $username = $svc_acct->username;
-my $password;
-my $password_encryption = $svc_acct->_password_encryption;
-my $password_encoding = $svc_acct->_password_encoding;
-
-if($svcnum) {
- if($password = $svc_acct->get_cleartext_password) {
- if (! $conf->exists('showpasswords')) {
- $password = '*HIDDEN*';
- }
- }
- elsif($svc_acct->_password and $password_encryption ne 'plain') {
+
+my $password = '';
+if ( $cgi->param('error') ) {
+ $password = $cgi->param('clear_password');
+} elsif ( $svcnum ) {
+ my $password_encryption = $svc_acct->_password_encryption;
+ if ( $password = $svc_acct->get_cleartext_password ) {
+ $password = '*HIDDEN*' unless $conf->exists('showpasswords');
+ } elsif( $svc_acct->_password and $password_encryption ne 'plain' ) {
$password = "(".uc($password_encryption)." encrypted)";
}
- else {
- $password = '';
- }
}
my $ulen =
diff --git a/httemplate/edit/svc_broadband.cgi b/httemplate/edit/svc_broadband.cgi
index 8a108f891..b11fec7a7 100644
--- a/httemplate/edit/svc_broadband.cgi
+++ b/httemplate/edit/svc_broadband.cgi
@@ -63,12 +63,12 @@ my $callback = sub {
if $fieldref->{field} eq 'blocknum';
$fieldref->{value} = $object->addr_block->label
- if $fieldref->{field} eq 'block_label';
+ if $fieldref->{field} eq 'block_label' && $object->addr_block;
} else {
if ($fieldref->{field} eq 'block_label') {
- if ($fixedblock) {
+ if ($fixedblock && $object->addr_block) {
$object->blocknum($fixedblock);
$fieldref->{value} = $object->addr_block->label;
}else{
@@ -93,7 +93,8 @@ my $callback = sub {
&& $FS::CurrentUser::CurrentUser->agentnum($_->agentnum)
}
map { $_->addr_block } $object->allowed_routers;
- my @options = map { $_->blocknum } @addr_block;
+ my @options = map { $_->blocknum }
+ sort { $a->label cmp $b->label } @addr_block;
my %option_labels = map { ( $_->blocknum => $_->label ) } @addr_block;
$fieldref->{type} = 'select';
$fieldref->{options} = \@options;
diff --git a/httemplate/edit/svc_domain.cgi b/httemplate/edit/svc_domain.cgi
index 10079ce98..78faf12b2 100755
--- a/httemplate/edit/svc_domain.cgi
+++ b/httemplate/edit/svc_domain.cgi
@@ -8,10 +8,18 @@
<INPUT TYPE="hidden" NAME="svcpart" VALUE="<% $svcpart %>">
<% ntable("#cccccc",2) %>
+
<TR>
-<P>Domain <INPUT TYPE="text" NAME="domain" VALUE="<% $domain %>" SIZE=28 MAXLENGTH=63>
-<BR>
+ <TD ALIGN="right">Domain</TD>
+ <TD>
+% if ( !$svcnum || $conf->exists('svc_domain-edit_domain') ) {
+ <INPUT TYPE="text" NAME="domain" VALUE="<% $domain %>" SIZE=28 MAXLENGTH=63>
+% } else {
+ <B><% $domain %></B>
+% }
+
% if ($export) {
+<BR>
Available top-level domains: <% $export->option('tlds') %>
</TR>
@@ -27,11 +35,161 @@ Available top-level domains: <% $export->option('tlds') %>
</TR>
% }
-
-<TR>
-<P><INPUT TYPE="submit" VALUE="Submit">
+ </TD>
</TR>
+
+% if ( $communigate ) {
+ <TR>
+ <TD ALIGN="right">Administrator domain</TD>
+ <TD>
+ <% include('/elements/select-domain.html',
+ 'element_name' => 'parent_svcnum',
+ 'curr_value' => $svc_domain->parent_svcnum,
+ 'empty_label' => '(none)',
+ )
+ %>
+ </TD>
+ </TR>
+% } else {
+ <INPUT TYPE="hidden" NAME="parent_svcnum" VALUE="<% $svc_domain->parent_svcnum %>">
+% }
+
+% if ( $communigate
+% && $part_svc->part_svc_column('max_accounts')->columnflag !~ /^[FA]$/ ) {
+
+ <TR>
+ <TD ALIGN="right">Aliases</TD>
+ <TD><INPUT TYPE="text" NAME="cgp_aliases" VALUE="<% $svc_domain->cgp_aliases %>"></TD>
+ </TR>
+
+% } else {
+ <INPUT TYPE="text" NAME="cgp_aliases" VALUE="<% $svc_domain->cgp_aliases %>">
+% }
+
+% if ( $part_svc->part_svc_column('max_accounts')->columnflag =~ /^[FA]$/ ) {
+ <INPUT TYPE="hidden" NAME="max_accounts" VALUE="<% $svc_domain->max_accounts %>">
+% } else {
+ <TR>
+ <TD ALIGN="right">Maximum number of accounts</TD>
+ <TD>
+ <INPUT TYPE="text" NAME="max_accounts" SIZE=5 MAXLENGTH=6 VALUE="<% $svc_domain->max_accounts %>">
+ </TD>
+ </TR>
+% }
+
+% if ( $communigate
+% && $part_svc->part_svc_column('cgp_accessmodes')->columnflag ne 'F' )
+% {
+
+ <TR>
+ <TD ALIGN="right">Enabled services</TD>
+ <TD>
+ <% include( '/elements/communigate_pro-accessmodes.html',
+ 'curr_value' => $svc_domain->cgp_accessmodes,
+ )
+ %>
+ </TD>
+ </TR>
+
+% } else {
+ <INPUT TYPE="hidden" NAME="cgp_accessmodes" VALUE="<% $svc_domain->cgp_accessmodes() |h %>">
+% }
+
</TABLE>
+<BR>
+
+% if ( $communigate ) {
+
+Account defaults
+<% ntable("#cccccc",2) %>
+
+ <% include('/elements/tr-checkbox.html',
+ 'label' =>'Password modification',
+ 'field' => 'acct_def_password_selfchange',
+ 'curr_value' => $svc_domain->acct_def_password_selfchange,
+ 'value' => 'Y',
+ )
+ %>
+ <% include('/elements/tr-checkbox.html',
+ 'label' =>'Password recovery',
+ 'field' => 'acct_def_password_recover',
+ 'curr_value' => $svc_domain->acct_def_password_recover,
+ 'value' => 'Y',
+ )
+ %>
+
+ <TR>
+ <TD ALIGN="right">Enabled services
+ </TD>
+ <TD><% include('/elements/communigate_pro-accessmodes.html',
+ 'element_name_prefix' => 'acct_def_cgp_accessmodes_',
+ 'curr_value' => $svc_domain->acct_def_cgp_accessmodes,
+ )
+ %>
+ </TD>
+ </TR>
+
+ <% include('/elements/tr-input-text.html',
+ 'label' => 'Mail storage limit',
+ 'field' => 'acct_def_quota',
+ 'curr_value' => $svc_domain->acct_def_quota,
+ )
+ %>
+ <% include('/elements/tr-input-text.html',
+ 'label' => 'File storage limit',
+ 'field' => 'acct_def_file_quota',
+ 'curr_value' => $svc_domain->acct_def_file_quota,
+ )
+ %>
+ <% include('/elements/tr-input-text.html',
+ 'label' => 'Files limit',
+ 'field' => 'acct_def_file_maxnum',
+ 'curr_value' => $svc_domain->acct_def_file_maxnum,
+ )
+ %>
+ <% include('/elements/tr-input-text.html',
+ 'label' => 'File size limit',
+ 'field' => 'acct_def_file_maxsize',
+ 'curr_value' => $svc_domain->acct_def_file_maxsize,
+ )
+ %>
+
+%# false laziness w/svc_acct acct_def
+ <TR>
+ <TD ALIGN="right">Message delete method</TD>
+ <TD>
+ <SELECT NAME="acct_def_cgp_deletemode">
+% for ( 'Move To Trash', 'Immediately', 'Mark' ) {
+ <OPTION VALUE="<% $_ %>"
+ <% $_ eq $svc_domain->acct_def_cgp_deletemode ? 'SELECTED' : '' %>
+ ><% $_ %>
+% }
+ </SELECT>
+ </TD>
+ </TR>
+
+ <% include('/elements/tr-input-text.html',
+ 'label' => 'On logout remove trash',
+ 'curr_value' => $svc_domain->acct_def_cgp_emptytrash,
+ )
+ %>
+
+</TABLE>
+<BR>
+
+% } else {
+
+% foreach my $f (qw( password_selfchange password_recover cgp_accessmodes
+% quota file_quota file_maxnum file_maxsize
+% cgp_deletemode cgp_emptytrash
+% )) {
+ <INPUT TYPE="hidden" NAME="acct_def_<%$f%>" VALUE="<% $svc_domain->get("acct_def_$f") %>">
+% }
+
+% }
+
+<INPUT TYPE="submit" VALUE="Submit">
+
</FORM>
<% include('/elements/footer.html') %>
@@ -41,6 +199,8 @@ Available top-level domains: <% $export->option('tlds') %>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
+my $conf = new FS::Conf;
+
my($svcnum, $pkgnum, $svcpart, $kludge_action, $part_svc,
$svc_domain);
if ( $cgi->param('error') ) {
@@ -94,19 +254,14 @@ my $action = $svcnum ? 'Edit' : 'Add';
my $svc = $part_svc->getfield('svc');
-my @exports = $part_svc->part_export();
-
-my $registrar;
-my $export;
+my $communigate = scalar($part_svc->part_export('communigate_pro'));
+ # || scalar($part_svc->part_export('communigate_pro_singledomain'));
# Find the first export that does domain registration
-foreach (@exports) {
- $export = $_ if $_->can('registrar');
-}
+my @exports = grep $_->can('registrar'), $part_svc->part_export;
+my $export = $exports[0];
# If we have a domain registration export, get the registrar object
-if ($export) {
- $registrar = $export->registrar;
-}
+my $registrar = $export ? $export->registrar : '';
my $otaker = getotaker;
diff --git a/httemplate/edit/svc_external.cgi b/httemplate/edit/svc_external.cgi
index 0df842b21..54aa11f42 100644
--- a/httemplate/edit/svc_external.cgi
+++ b/httemplate/edit/svc_external.cgi
@@ -1,102 +1 @@
-<% include('/elements/header.html', "External service $action") %>
-
-<% include('/elements/error.html') %>
-
-<FORM ACTION="<%$p1%>process/svc_external.cgi" METHOD=POST>
-
-<INPUT TYPE="hidden" NAME="svcnum" VALUE="<% $svcnum %>">
-Service #<B><% $svcnum ? $svcnum : "(NEW)" %></B>
-<BR><BR>
-
-<INPUT TYPE="hidden" NAME="pkgnum" VALUE="<% $pkgnum %>">
-
-<INPUT TYPE="hidden" NAME="svcpart" VALUE="<% $svcpart %>">
-
-% my $id = $svc_external->id;
-% my $title = $svc_external->title;
-%
-<% &ntable("#cccccc",2) %>
- <TR>
- <TD ALIGN="right">External ID</TD>
- <TD><INPUT TYPE="text" NAME="id" VALUE="<% $id %>"></TD>
- </TR>
- <TR>
- <TD ALIGN="right">Title</TD>
- <TD><INPUT TYPE="text" NAME="title" VALUE="<% $title %>"></TD>
- </TR>
-
-% foreach my $field ($svc_external->virtual_fields) {
-% if ( $part_svc->part_svc_column($field)->columnflag ne 'F' ) {
-% # If the flag is X, it won't even show up in $svc_acct->virtual_fields.
- <% $svc_external->pvf($field)->widget( 'HTML',
- 'edit',
- $svc_external->getfield($field)
- )
- %>
-% }
-% }
-
-</TABLE>
-<BR>
-
-<INPUT TYPE="submit" VALUE="Submit">
-</FORM>
-
-<% include('/elements/footer.html') %>
-
-<%init>
-
-die "access denied"
- unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
-
-my( $svcnum, $pkgnum, $svcpart, $part_svc, $svc_external );
-if ( $cgi->param('error') ) {
-
- $svc_external = new FS::svc_external ( {
- map { $_, scalar($cgi->param($_)) } fields('svc_external')
- } );
- $svcnum = $svc_external->svcnum;
- $pkgnum = $cgi->param('pkgnum');
- $svcpart = $cgi->param('svcpart');
- $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
- die "No part_svc entry!" unless $part_svc;
-
-} elsif ( $cgi->param('pkgnum') && $cgi->param('svcpart') ) { #adding
-
- $cgi->param('pkgnum') =~ /^(\d+)$/ or die 'unparsable pkgnum';
- $pkgnum = $1;
- $cgi->param('svcpart') =~ /^(\d+)$/ or die 'unparsable svcpart';
- $svcpart = $1;
-
- $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
- die "No part_svc entry!" unless $part_svc;
-
- $svc_external = new FS::svc_external { svcpart => $svcpart };
-
- $svcnum='';
-
- $svc_external->set_default_and_fixed;
-
-} else { #adding
-
- my($query) = $cgi->keywords;
- $query =~ /^(\d+)$/ or die "unparsable svcnum";
- $svcnum=$1;
- $svc_external=qsearchs('svc_external',{'svcnum'=>$svcnum})
- or die "Unknown (svc_external) svcnum!";
-
- my($cust_svc)=qsearchs('cust_svc',{'svcnum'=>$svcnum})
- or die "Unknown (cust_svc) svcnum!";
-
- $pkgnum=$cust_svc->pkgnum;
- $svcpart=$cust_svc->svcpart;
-
- $part_svc=qsearchs('part_svc',{'svcpart'=>$svcpart});
- die "No part_svc entry!" unless $part_svc;
-
-}
-my $action = $svc_external->svcnum ? 'Edit' : 'Add';
-
-my $p1 = popurl(1);
-
-</%init>
+<% include( 'elements/svc_Common.html', 'table'=>'svc_external' ) %>
diff --git a/httemplate/edit/svc_forward.cgi b/httemplate/edit/svc_forward.cgi
index 96a00a5aa..73f6465b9 100755
--- a/httemplate/edit/svc_forward.cgi
+++ b/httemplate/edit/svc_forward.cgi
@@ -32,24 +32,35 @@ function dstchanged(what) {
</SCRIPT>
<% ntable("#cccccc",2) %>
-<TR><TD ALIGN="right">Email to</TD>
-<TD><SELECT NAME="srcsvc" SIZE=1 onChange="srcchanged(this)">
-% foreach $_ (keys %email) {
-
- <OPTION<% $_ eq $srcsvc ? " SELECTED" : "" %> VALUE="<% $_ %>"><% $email{$_} %></OPTION>
-% }
-% if ( $svc_forward->dbdef_table->column('src') ) {
-
- <OPTION <% $src ? 'SELECTED' : '' %> VALUE="0">(other email address)</OPTION>
-% }
-</SELECT>
-% if ( $svc_forward->dbdef_table->column('src') ) {
-
-<INPUT TYPE="text" NAME="src" VALUE="<% $src %>" <% ( $src || !scalar(%email) ) ? '' : 'DISABLED STYLE="background-color: lightgrey"' %>>
-% }
-
-</TD></TR>
+<TR>
+ <TD ALIGN="right">Email to</TD>
+ <TD>
+% if ( $conf->exists('svc_forward-no_srcsvc') ) {
+ <INPUT NAME="srcsrc" TYPE="hidden" VALUE="0">
+% } else {
+ <SELECT NAME="srcsvc" SIZE=1 onChange="srcchanged(this)">
+% foreach $_ (keys %email) {
+ <OPTION VALUE="<% $_ %>"
+ <% $_ eq $srcsvc ? 'SELECTED' : '' %>
+ ><% $email{$_} %></OPTION>
+% }
+ <OPTION VALUE="0" <% $src ? 'SELECTED' : '' %>
+ >(other email address)</OPTION>
+ </SELECT>
+% }
+
+% my $src_disabled = $src
+% || $conf->exists('svc_forward-no_srcsvc')
+% || !scalar(%email);
+ <INPUT NAME = "src"
+ TYPE = "text"
+ VALUE = "<% $src %>"
+ <% $src_disabled ? '' : 'DISABLED STYLE="background-color: lightgrey"' %>
+ >
+
+ </TD>
+</TR>
<TR><TD ALIGN="right">Forwards to</TD>
<TD><SELECT NAME="dstsvc" SIZE=1 onChange="dstchanged(this)">
diff --git a/httemplate/edit/svc_mailinglist.cgi b/httemplate/edit/svc_mailinglist.cgi
new file mode 100644
index 000000000..c7c739daa
--- /dev/null
+++ b/httemplate/edit/svc_mailinglist.cgi
@@ -0,0 +1,25 @@
+<% include( 'elements/svc_Common.html',
+ 'table' => 'svc_mailinglist',
+ 'fields' => \@fields,
+ )
+%>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
+
+my @fields = (
+ 'username',
+ { field=>'domsvc', type=>'select-svc-domain',
+ #label => 'List address domain',
+ },
+ { field=>'listnum', type=>'hidden', },
+ { field=>'listname', type=>'text', },
+ { field=>'reply_to', type=>'checkbox', value=>'Y' },
+ { field=>'remove_from', type=>'checkbox', value=>'Y' },
+ { field=>'reject_auto', type=>'checkbox', value=>'Y' },
+ { field=>'remove_to_and_cc', type=>'checkbox', value=>'Y' },
+
+);
+
+</%init>
diff --git a/httemplate/edit/svc_phone.cgi b/httemplate/edit/svc_phone.cgi
index d7629ab6f..b77d96233 100644
--- a/httemplate/edit/svc_phone.cgi
+++ b/httemplate/edit/svc_phone.cgi
@@ -1,22 +1,21 @@
<% include( 'elements/svc_Common.html',
- 'name' => 'Phone number',
'table' => 'svc_phone',
- 'fields' => [ 'countrycode',
- { field => 'phonenum',
- type => 'select-did',
- label => 'Phone number',
- },
- 'sip_password',
- 'pin',
- 'phone_name',
- ],
+ 'fields' => \@fields,
'labels' => {
+ 'svcnum' => 'Service',
'countrycode' => 'Country code',
'phonenum' => 'Phone number',
+ 'domsvc' => 'Domain',
'sip_password' => 'SIP password',
'pin' => 'Voicemail PIN',
'phone_name' => 'Name',
+ 'pbxsvc' => 'PBX',
+ 'locationnum' => 'E911 location',
},
+ 'svc_new_callback' => sub {
+ my( $cgi, $svc_x, $part_svc, $cust_pkg, $fields, $opt ) = @_;
+ $svc_x->locationnum($cust_pkg->locationnum) if $cust_pkg;
+ },
)
%>
<%init>
@@ -24,4 +23,55 @@
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Provision customer service'); #something else more specific?
+my $conf = new FS::Conf;
+
+my @fields = ( 'countrycode',
+ { field => 'phonenum',
+ type => 'select-did',
+ label => 'Phone number',
+ },
+ );
+
+push @fields, { field => 'domsvc',
+ type => 'select-svc-domain',
+ label => 'Domain',
+ }
+ if $conf->exists('svc_phone-domain');
+
+push @fields, { field => 'pbxsvc',
+ type => 'select-svc_pbx',
+ label => 'PBX',
+ },
+ 'sip_password',
+ 'pin',
+ { field => 'phone_name',
+ type => 'text',
+ maxlength => $conf->config('svc_phone-phone_name-max_length'),
+ },
+
+ { value => 'E911 Information',
+ type => 'tablebreak-tr-title',
+ colspan => 7,
+ },
+ { field => 'locationnum',
+ type => 'select-cust_location',
+ label => 'E911 location',
+ include_opt_callback => sub {
+ my $svc_phone = shift;
+ my $pkgnum = $svc_phone->get('pkgnum')
+ || $cgi->param('pkgnum')
+ || $svc_phone->cust_svc->pkgnum; #hua?
+ #cross agent location exposure? sheesh
+ my $cust_pkg = qsearchs('cust_pkg', {'pkgnum' => $pkgnum});
+ my $cust_main = $cust_pkg ? $cust_pkg->cust_main : '';
+ ( 'no_bold' => 1,
+ 'cust_pkg' => $cust_pkg,
+ 'cust_main' => $cust_main,
+ );
+ },
+ },
+ { field => 'custnum', type=> 'hidden' }, #for new cust_locations
+;
+
+
</%init>
diff --git a/httemplate/elements/communigate_pro-accessmodes.html b/httemplate/elements/communigate_pro-accessmodes.html
new file mode 100644
index 000000000..6ce9ca587
--- /dev/null
+++ b/httemplate/elements/communigate_pro-accessmodes.html
@@ -0,0 +1,30 @@
+<% include( 'checkboxes.html',
+ 'element_name_prefix' => 'cgp_accessmodes_',
+ 'names_list' => \@names,
+ 'checked_callback' => $callback,
+ %opt,
+ )
+%>
+<%once>
+
+my @names = (qw(
+ Mail Relay Signal Mobile TLS POP IMAP MAPI
+ AirSync SIP XMPP WebMail XIMSS FTP ACAP PWD
+ LDAP RADIUS S/MIME WebCAL WebSite PBX HTTP
+));
+
+</%once>
+<%init>
+
+my %opt = @_;
+my $curr_value = $opt{'curr_value'};
+
+$curr_value = { map { $_=>1 } split(/\s+/, $curr_value) }
+ unless ref($curr_value);
+
+my $callback = sub {
+ my( $cgi, $name ) = @_;
+ $curr_value->{$name};
+};
+
+</%init>
diff --git a/httemplate/elements/header.html b/httemplate/elements/header.html
index 22e872eca..8da91ef49 100644
--- a/httemplate/elements/header.html
+++ b/httemplate/elements/header.html
@@ -24,7 +24,7 @@ Example:
<HTML>
<HEAD>
<TITLE>
- <% $title %>
+ <% $title |h %>
</TITLE>
<META HTTP-Equiv="Cache-Control" Content="no-cache">
<META HTTP-Equiv="Pragma" Content="no-cache">
@@ -293,7 +293,7 @@ input.fstext {
<TD BGCOLOR="#e8e8e8" HEIGHT="100%" VALIGN="top"> <!-- WIDTH="100%"> -->
<FONT SIZE=6>
- <% $title %>
+ <% $title |h %>
</FONT>
% unless ( $nobr ) {
diff --git a/httemplate/elements/location.html b/httemplate/elements/location.html
index 07aaa69f0..0ec6c04e0 100644
--- a/httemplate/elements/location.html
+++ b/httemplate/elements/location.html
@@ -18,7 +18,7 @@ Example:
</%doc>
<TR>
- <TH ALIGN="right"><%$r%><% $opt{'address1_label'} || 'Address' %></TH>
+ <<%$th%> ALIGN="right"><%$r%><% $opt{'address1_label'} || 'Address' %></<%$th%>>
<TD COLSPAN=7>
<INPUT TYPE = "text"
NAME = "<%$pre%>address1"
@@ -48,7 +48,7 @@ Example:
</TR>
<TR>
- <TH ALIGN="right"><%$r%>City</TH>
+ <<%$th%> ALIGN="right"><%$r%>City</<%$th%>>
<TD WIDTH="1">
<INPUT TYPE = "text"
NAME = "<%$pre%>city"
@@ -59,13 +59,13 @@ Example:
<% $style %>
>
</TD>
- <TH ALIGN="right" ID="<%$pre%>countylabel" <%$county_style%>><%$r%>County</TH>
+ <<%$th%> ALIGN="right" ID="<%$pre%>countylabel" <%$county_style%>><%$r%>County</<%$th%>>
<TD><% include('/elements/select-county.html', %select_hash ) %></TD>
- <TH ALIGN="right" WIDTH="1"><%$r%>State</TH>
+ <<%$th%> ALIGN="right" WIDTH="1"><%$r%>State</<%$th%>>
<TD WIDTH="1">
<% include('/elements/select-state.html', %select_hash ) %>
</TD>
- <TH><%$r%>Zip</TH>
+ <<%$th%>><%$r%>Zip</<%$th%>>
<TD>
<INPUT TYPE = "text"
NAME = "<%$pre%>zip"
@@ -80,7 +80,7 @@ Example:
</TR>
<TR>
- <TH ALIGN="right"><%$r%>Country</TH>
+ <<%$th%> ALIGN="right"><%$r%>Country</<%$th%>>
<TD COLSPAN=6><% include('/elements/select-country.html', %select_hash ) %></TD>
</TR>
@@ -88,7 +88,7 @@ Example:
<INPUT TYPE="hidden" NAME="geocode" VALUE="<% $opt{geocode} %>">
% } else {
% if ( $pre eq 'ship_' && $conf->exists('cust_main-require_censustract') ) {
- <TR><TH ALIGN="right">Census tract<BR>(automatic)</TH>
+ <TR><<%$th%> ALIGN="right">Census tract<BR>(automatic)</<%$th%>>
<TD>
<INPUT TYPE="text" NAME="censustract" VALUE="<% $opt{censustract} %>">
</TD>
@@ -123,7 +123,7 @@ $object->set($pre.'state', $statedefault )
|| $object->get($pre.'country') ne $countrydefault;
my @style = ();
-push @style, 'background-color: #dddddd"' if $disabled;
+push @style, 'background-color: #dddddd' if $disabled;
my @address2_label_style = ();
push @address2_label_style, 'visibility:hidden'
@@ -161,4 +161,6 @@ my %select_hash = (
'style' => \@style,
);
+my $th = $opt{'no_bold'} ? 'TD' : 'TH';
+
</%init>
diff --git a/httemplate/elements/menu.html b/httemplate/elements/menu.html
index d4a915e15..a68a5754d 100644
--- a/httemplate/elements/menu.html
+++ b/httemplate/elements/menu.html
@@ -235,6 +235,7 @@ if($curuser->access_right('Financial reports')) {
'Sales, Credits and Receipts' => [ $fsurl.'graph/report_money_time.html', 'Sales, credits and receipts summary graph' ],
'Sales Report' => [ $fsurl.'graph/report_cust_bill_pkg.html', 'Sales report and graph (by agent, package class and/or date range)' ],
'Rated Call Sales Report' => [ $fsurl.'graph/report_cust_bill_pkg_detail.html', 'Sales report and graph (by agent, package class, usage class and/or date range)' ],
+ 'Employee Commission Report' => [ $fsurl.'search/report_employee_commission.html', '' ],
'Credit Report' => [ $fsurl.'search/report_cust_credit.html', 'Credit report (by employee and/or date range)' ],
'Refund Report' => [ $fsurl.'search/report_cust_refund.html', 'Refund report (by type and/or date range)' ],
);
@@ -320,7 +321,7 @@ $tools_menu{'Job Queue'} = [ $fsurl.'search/queue.html', 'View pending job queu
if $curuser->access_right('Job queue');
$tools_menu{'Ticketing'} = [ \%tools_ticketing, 'Ticketing tools' ]
if $conf->config('ticket_system');
-$tools_menu{'Time Queue'} = [ $fsurl.'search/timeworked.html', 'View pending support time' ]
+$tools_menu{'Time Queue'} = [ $fsurl.'search/report_timeworked.html', 'View pending support time' ]
if $curuser->access_right('Time queue');
$tools_menu{'Attachments'} = [ $fsurl.'browse/cust_attachment.html', 'View customer attachments' ]
if !$conf->config('disable_cust_attachment') and $curuser->access_right('View attachments') and $curuser->access_right('Browse attachments');
diff --git a/httemplate/elements/overlibmws.js b/httemplate/elements/overlibmws.js
index df2bd1db7..6a446ab00 100644
--- a/httemplate/elements/overlibmws.js
+++ b/httemplate/elements/overlibmws.js
@@ -1,7 +1,7 @@
/*
Do not remove or change this notice.
- overlibmws.js core module - Copyright Foteos Macrides 2002-2008. All rights reserved.
- Initial: August 18, 2002 - Last Revised: March 22, 2008
+ overlibmws.js core module - Copyright Foteos Macrides 2002-2010. All rights reserved.
+ Initial: August 18, 2002 - Last Revised: January 5, 2010
This module is subject to the same terms of usage as for Erik Bosrup's overLIB,
though only a minority of the code and API now correspond with Erik's version.
See the overlibmws Change History and Command Reference via:
@@ -132,11 +132,12 @@ OLkon=(OLua.indexOf('konqueror')>=0)?1:0,
OLkht=(OLsaf||OLkon)?1:0,
OLopr=(OLua.indexOf('opera')>=0)?1:0,
OLop7=(OLopr&&document.createTextNode)?1:0;
+OLop95=(OLop7&&document.getElementsByClassName)?1:0;
if(OLopr){OLns4=OLns6=OLgek=0;OLie4=(OLop7)?1:0;}
var OLieM=((OLie4&&OLmac)&&!(OLkht||OLopr))?1:0,
-OLie5=0,OLie55=0;OLie7=0;if(OLie4&&!OLop7){
+OLie5=0,OLie55=0,OLie7=0;OLie8=0;if(OLie4&&!OLop7){
if((OLv=OLua.match(/msie (\d\.\d+)\.*/i))&&(OLv=parseFloat(OLv[1]))>=5.0){
-OLie5=1;OLns6=0;if(OLv>=5.5)OLie55=1;if(OLv>=7.0)OLie7=1;}if(OLns6)OLie4=0;}
+OLie5=1;OLns6=0;if(OLv>=5.5)OLie55=1;if(OLv>=7.0)OLie7=1;if(OLv>=8.0)OLie8=1;}if(OLns6)OLie4=0;}
if(OLns4)window.onresize=function(){location.reload();};var OLchkMh=1,OLdw;
if(OLns4||OLie4||OLns6){OLmh();if(window.addEventListener)window.addEventListener("unload",
OLulCl,false);}else{overlib=nd=cClick=OLpageDefaults=no_overlib;}
@@ -147,25 +148,25 @@ function OLulCl(){if(over)cClick();window.removeEventListener("unload",OLulCl,fa
*/
// Loads defaults then args into runtime variables.
function overlib(){
-if(!(OLloaded&&OLgateOK))return;if((OLexclusivePI)&&OLisExclusive(arguments))return true;if(OLchkMh)OLmh();
-if(OLndt&&!OLtimerid)OLndt=0;if(over)cClick();if(parent!=self){if(parent.OLo2Ref){parent.OLeval(parent.OLo2Ref);
-parent.OLo2Ref="";}if(parent.OLifRef){parent.OLeval(parent.OLifRef);parent.OLifRef="";}}if(OLo2Ref){eval(OLo2Ref);
-OLo2Ref="";}if(OLifRef){eval(OLifRef);OLifRef="";}OLload(OLp1or2);OLload(OLp1);OLfnRef="";OLifX=0;OLifY=0;OLhover=0;
-OLsetRunTimeVar();OLparseTokens('o3_',arguments);if(!(over=OLmkLyr()))return false;if(o3_decode)OLdecode();if(OLprintPI)
-OLchkPrint();if(OLbubblePI)OLchkForBubbleEffect();if(OLdebugPI)OLsetDebugCanShow();if(OLshadowPI)OLinitShadow();
-if(OLiframePI)OLinitIfs();if(OLfilterPI)OLinitFilterLyr();if(OLexclusivePI&&o3_exclusive&&o3_exclusivestatus!="")
-o3_status=o3_exclusivestatus;else if(o3_autostatus==2&&o3_cap!="")o3_status=o3_cap;else if(o3_autostatus==1&&o3_text!="")
-o3_status=o3_text;if(!o3_delay){return OLmain();}else{OLdelayid=setTimeout("OLmain()",o3_delay);if(o3_status!=""){
-self.status=o3_status;return true;}else if(!(OLop7&&event&&event.type=='mouseover'))return false;}
+if(!(OLloaded&&OLgateOK))return;if((OLexclusivePI)&&OLisExclusive(arguments))return true;if(OLchkMh)OLmh();if(OLndt&&
+!OLtimerid)OLndt=0;if(over){if(OLfilterPI)o3_filter=0;cClick();}if(parent!=self){if(parent.OLo2Ref){parent.OLeval(
+parent.OLo2Ref);parent.OLo2Ref="";}if(parent.OLifRef){parent.OLeval(parent.OLifRef);parent.OLifRef="";}}if(OLo2Ref){
+eval(OLo2Ref);OLo2Ref="";}if(OLifRef){eval(OLifRef);OLifRef="";}OLload(OLp1or2);OLload(OLp1);OLfnRef="";OLifX=0;OLifY=0;
+OLhover=0;if(OLcrossframePI&&parent!=self)OLchkFRAME(arguments);OLsetRunTimeVar();OLparseTokens('o3_',arguments);if(!(
+over=OLmkLyr()))return false;over.onmouseover=over.onmouseout=null;if(o3_decode)OLdecode();if(OLprintPI)OLchkPrint();
+if(OLbubblePI)OLchkForBubbleEffect();if(OLdebugPI)OLsetDebugCanShow();if(OLshadowPI)OLinitShadow();if(OLiframePI)OLinitIfs();
+if(OLfilterPI)OLinitFilterLyr();if(OLexclusivePI&&o3_exclusive&&o3_exclusivestatus!="")o3_status=o3_exclusivestatus;else
+if(o3_autostatus==2&&o3_cap!="")o3_status=o3_cap;else if(o3_autostatus==1&&o3_text!="")o3_status=o3_text;if(!o3_delay){
+return OLmain();}else{OLdelayid=setTimeout("OLmain()",o3_delay);if(o3_status!=""){self.status=o3_status;return true;}else
+if(!(OLop7&&event&&event.type=='mouseover'))return false;}
}
function OLeval(s){eval(s);}
// Clears popups if appropriate
function nd(time){
-if(OLloaded&&OLgateOK){if(!((OLexclusivePI)&&OLisExclusive())){if(time&&over&&!o3_delay){
-if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=(OLhover&&o3_frame==self&&!OLcursorOff())?0:
-setTimeout("cClick()",(o3_timeout=OLndt=time));}else{if(!OLshowingsticky){OLallowmove=0;
-if(over)OLhideObject(over);}}}}return false;
+if(OLloaded&&OLgateOK){if(!((OLexclusivePI)&&OLisExclusive())){if(time&&over&&!o3_delay){if(OLtimerid>0)
+clearTimeout(OLtimerid);OLtimerid=(OLhover&&!OLcursorOff())?0:setTimeout("cClick()",(o3_timeout=OLndt=time));
+}else{if(!OLshowingsticky){OLallowmove=0;if(over)OLhideObject(over);}}}}return false;
}
// Close function for stickies
@@ -189,11 +190,12 @@ function no_overlib(){return false;}
OVERLIB MAIN FUNCTION SET
*/
function OLmain(){
-o3_delay=0;if(parent!=self&&o3_frame==parent&&parent.OLscrollPI&&parent.over)parent.OLclearScroll();if(o3_frame==self){
-if(o3_noclose)OLoptMOUSEOFF(0);else if(o3_mouseoff)OLoptMOUSEOFF(1);}if(o3_sticky){OLshowingsticky=1;if(OLfnRef&&
-parent!=self&&o3_frame==parent&&parent.overlib){parent.OLifRef=OLfnRef+'cClick()';}}OLdoLyr();OLallowmove=0;if(o3_timeout>0){
-if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=setTimeout("cClick()",o3_timeout);}OLchkRef();OLdisp(o3_status);
-if(OLdraggablePI)OLcheckDrag();if(o3_status!="")return true;else if(!(OLop7&&event&&event.type=='mouseover'))return false;
+o3_delay=0;if(parent!=self&&o3_frame==parent&&parent.OLscrollPI&&parent.over)parent.OLclearScroll();if(o3_noclose)
+OLoptMOUSEOFF(0);else if(o3_mouseoff)OLoptMOUSEOFF(1);if(o3_sticky){OLshowingsticky=1;if(OLfnRef&&parent!=self&&
+o3_frame==parent&&parent.overlib)parent.OLifRef=(OLfilterPI?OLfnRef+'o3_filter=0;':'')+OLfnRef+'cClick();';}OLdoLyr();
+OLallowmove=0;if(o3_timeout>0){if(OLtimerid>0)clearTimeout(OLtimerid);OLtimerid=setTimeout("cClick()",o3_timeout);}
+OLchkRef();OLdisp(o3_status);if(OLdraggablePI)OLcheckDrag();if(o3_status!="")return true;else if(!(OLop7&&event&&
+event.type=='mouseover'))return false;
}
function OLchkRef(){
if(o3_ref){OLrefXY=OLgetRefXY(o3_ref);if(OLrefXY[0]==null&&OLcrossframePI)OLchkIfRef();
@@ -211,11 +213,10 @@ OLcontentSimple(o3_text):(o3_sticky)?OLcontentCaption(o3_text,o3_cap,o3_close):O
// Makes Layer
function OLmkLyr(id,f,z){
-id=(id||'overDiv');f=(f||o3_frame);z=(z||1000);var fd=f.document,d=OLgetRefById(id,fd);
-if(!d){if(OLns4)d=fd.layers[id]=new Layer(1024,f);else if(OLie4&&!OLop7){
-fd.body.insertAdjacentHTML('AfterBegin','<div id="'+id+'"></div>');d=fd.all[id];}else{d=fd.createElement('div');
-if(d){d.id=id;fd.body.appendChild(d);}}if(!d)return null;if(OLns4)d.zIndex=z;else{var o=d.style;o.position='absolute';
-o.visibility='hidden';o.zIndex=z;}}return d;
+id=(id||'overDiv');f=(f||o3_frame);z=(z||1000);var fd=f.document,d=OLgetRefById(id,fd);if(!d){if(OLns4)d=fd.layers[id]=
+new Layer(1024,f);else if(OLie4&&!OLop7){fd.body.insertAdjacentHTML('AfterBegin','<div id="'+id+'"></div>');d=fd.all[id];}
+else{d=fd.createElement('div');if(d){d.id=id;fd.body.appendChild(d);}}if(!d)return null;if(OLns4)d.zIndex=z;else{var o=
+d.style;o.position='absolute';o.visibility='hidden';o.zIndex=z;}}return d;
}
// Creates and writes layer content
@@ -225,9 +226,9 @@ if(o3_fgbackground!='')o3_fgbackground=' background="'+o3_fgbackground+'"';
if(o3_bgbackground!='')o3_bgbackground=' background="'+o3_bgbackground+'"';
if(o3_cgbackground!='')o3_cgbackground=' background="'+o3_cgbackground+'"';
if(o3_fgcolor!='')o3_fgcolor=' bgcolor="'+o3_fgcolor+'"';if(o3_bgcolor!='')o3_bgcolor=' bgcolor="'+o3_bgcolor+'"';
-if(o3_cgcolor!='')o3_cgcolor=' bgcolor="'+o3_cgcolor+'"';if(o3_height>0)o3_height=' height="'+o3_height+'"';
-else o3_height='';}if(!OLns4)OLrepositionTo(over,(OLns6?20:0),0);var lyrHtml=OLdoLGF();
-if(o3_wrap&&!o3_fullhtml){OLlayerWrite(lyrHtml);o3_width=(OLns4?over.clip.width:over.offsetWidth);if(OLie4){
+if(o3_cgcolor!='')o3_cgcolor=' bgcolor="'+o3_cgcolor+'"';if(o3_height>0)o3_height=(OLns4)?' height="'+o3_height+'"':
+' style="height:'+o3_height+'px;"';else o3_height='';}if(!OLns4)OLrepositionTo(over,(OLns6?20:0),0);var lyrHtml=OLdoLGF();
+if(o3_wrap&&!o3_fullhtml){OLlayerWrite(lyrHtml);o3_width=(OLns4?over.clip.width:over.offsetWidth);if(OLie4&&!OLop95){
var w=OLfd().clientWidth;if(o3_width>=w){if(OLop7){if(OLovertwoPI&&over==over2){var z=over2.style.zIndex;
o3_frame.document.body.removeChild(over);over2=OLmkLyr('overDiv2',o3_frame,z);over=over2;}else{
o3_frame.document.body.removeChild(over);over=OLmkLyr();}}o3_width=w-20;}}
@@ -294,7 +295,7 @@ return ((o3_base>0&&!o3_wrap)?('<table width="100%" border="0" cellpadding="0" c
+o3_bgclass+'"':'')+'><tr><td height="'+o3_base+'"></td></tr></table>'):'')+'</td></tr></table>';
}
function OLwd(a){return(o3_wrap?'':' width="'+(!a?'100%':(a==1?o3_width:(o3_width-o3_padxl-o3_padxr)))+'"');}
-function OLhL(s){return(s?' style="width:100%;"':'width:100%;');}
+function OLhL(s){if(!OLie5)return '';return(s?' style="overflow:auto;"':'overflow:auto;');}
// Loads image into the div.
function OLsetBackground(i){
@@ -308,18 +309,18 @@ else{if(OLns4)over.background.src=i;else{if(OLns6)over.style.width=o3_width+'px'
// Displays layer
function OLdisp(s){
if(OLmodalPI&&!o3_modalscroll)OLchkModal();if(!OLallowmove){if(OLshadowPI)OLdispShadow();if(OLiframePI)OLdispIfs();
-OLplaceLayer();if(OLmodalPI&&o3_modalscroll)OLchkModal();if(OLndt)OLshowObject(over);
-else OLshowid=setTimeout("OLshowObject(over)",1);OLallowmove=(o3_sticky||o3_nofollow)?0:1;}OLndt=0;if(s!="")self.status=s;
+OLplaceLayer();if(OLmodalPI&&o3_modalscroll)OLchkModal();if(OLndt)OLshowObject(over);else OLshowid=
+setTimeout("OLshowObject(over)",1);OLallowmove=(o3_sticky||o3_nofollow)?0:1;}OLndt=0;if(s!="")self.status=s;
}
// Decides placement of layer.
function OLplaceLayer(){
var snp,X,Y,pgLeft,pgTop,pWd=o3_width,pHt,iWd=100,iHt=100,SB=0,LM=0,CX=0,TM=0,BM=0,CY=0,o=OLfd(),
nsb=(OLgek>=20010505&&!o3_frame.scrollbars.visible)?1:0;
-if(!OLkht&&o&&o.clientWidth)iWd=o.clientWidth;
+if(!OLkht&&!OLop95&&o&&o.clientWidth)iWd=o.clientWidth;
else if(o3_frame.innerWidth){SB=Math.ceil(1.4*(o3_frame.outerWidth-o3_frame.innerWidth));
if(SB>20)SB=20;iWd=o3_frame.innerWidth;}
-pgLeft=(OLie4)?o.scrollLeft:o3_frame.pageXOffset;
+pgLeft=(OLie4&&!OLop95)?o.scrollLeft:o3_frame.pageXOffset;
if(OLie55&&OLfilterPI&&o3_filter&&o3_filtershadow)SB=CX=5;else
if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowx){SB+=((o3_shadowx>0)?o3_shadowx:0);
LM=((o3_shadowx<0)?Math.abs(o3_shadowx):0);CX=Math.abs(o3_shadowx);}
@@ -345,8 +346,8 @@ snp=X % o3_snapx;
if(o3_hpos==LEFT){X=X-(o3_snapx+snp);}else{X=X+(o3_snapx-snp);}}X+=OLifX;}
if(!o3_nojustx&&X+pWd>pgLeft+iWd-SB)
X=iWd+pgLeft-pWd-SB;if(!o3_nojustx&&X-LM<pgLeft)X=pgLeft+LM;
-pgTop=OLie4?o.scrollTop:o3_frame.pageYOffset;
-if(!OLkht&&!nsb&&o&&o.clientHeight)iHt=o.clientHeight;
+pgTop=OLie4&&!OLop95?o.scrollTop:o3_frame.pageYOffset;
+if(!OLkht&&!OLop95&&!nsb&&o&&o.clientHeight)iHt=o.clientHeight;
else if(o3_frame.innerHeight)iHt=o3_frame.innerHeight;
if(OLbubblePI&&o3_bubble)pHt=OLbubbleHt;else pHt=OLns4?over.clip.height:over.offsetHeight;
if((OLshadowPI)&&bkdrop&&o3_shadow&&o3_shadowy){TM=(o3_shadowy<0)?Math.abs(o3_shadowy):0;
@@ -424,16 +425,15 @@ of=(p=='UR')?[W-pW,0]:(p=='LL')?[W,-pH]:(p=='LR')?[W-pW,-pH]:[W,0];}else if(c=='
// Gets x or y location of object
function OLpageLoc(o,t){
var l=0,s=o;while(o.offsetParent&&o.offsetParent.tagName.toLowerCase()!='html'){l+=o['offset'+t];o=o.offsetParent;}
-l+=o['offset'+t];while(s=s.parentNode){if((s['scroll'+t]>0)&&s.tagName.toLowerCase()=='div')l-=s['scroll'+t];}return l;
+l+=o['offset'+t];if(!OLop7)while(s=s.parentNode){if((s['scroll'+t]>0)&&s.tagName.toLowerCase()=='div')l-=s['scroll'+t];}
+return l;
}
// Moves layer
function OLmouseMove(e){
-var e=(e||event);OLcC=(OLovertwoPI&&over2&&over==over2?cClick2:cClick);OLx=(e.pageX||e.clientX+OLfd().scrollLeft);
-OLy=(e.pageY||e.clientY+OLfd().scrollTop);if((OLallowmove&&over)&&(o3_frame==self||over==OLgetRefById()||(OLovertwoPI&&
-over2==over&&over==OLgetRefById('overDiv2')))){OLplaceLayer();if(OLhidePI)OLhideUtil(0,1,1,0,0,0);}if(OLhover&&over&&
-o3_frame==self&&OLcursorOff())if(o3_offdelay<1)OLcC();else{if(OLtimerid>0)clearTimeout(OLtimerid);
-OLtimerid=setTimeout("OLcC()",o3_offdelay);}
+var e=(e||event);OLx=(e.pageX||e.clientX+OLfd().scrollLeft);OLy=(e.pageY||e.clientY+OLfd().scrollTop);if((OLallowmove&&
+over)&&(o3_frame==self||over==OLgetRefById()||(OLovertwoPI&&over2==over&&over==OLgetRefById('overDiv2')))){OLplaceLayer();
+if(OLhidePI)OLhideUtil(0,1,1,0,0,0);}
}
// Capture mouse and chain other scripts.
@@ -451,8 +451,8 @@ function OLparseTokens(pf,ar){
var i,v,md= -1,par=(pf!='ol_'),p=OLpar,q=OLparQuo,t=OLtoggle;OLudf=(par&&!ar.length?1:0);
for(i=0;i<ar.length;i++){if(md<0){if(typeof ar[i]=='number'){OLudf=(par?1:0);i--;}
else{switch(pf){case 'ol_':ol_text=ar[i];break;default:o3_text=ar[i];}}md=0;}else{
-if(ar[i]==INARRAY){OLudf=0;eval(pf+'text=ol_texts['+ar[++i]+']');continue;}
-if(ar[i]==CAPARRAY){eval(pf+'cap=ol_caps['+ar[++i]+']');continue;}
+if(ar[i]==INARRAY){OLudf=0;eval(pf+'text=ol_texts['+ar[(++i)]+']');continue;}
+if(ar[i]==CAPARRAY){eval(pf+'cap=ol_caps['+ar[(++i)]+']');continue;}
if(ar[i]==CAPTION){q(ar[++i],pf+'cap');continue;}
if(Math.abs(ar[i])==STICKY){t(ar[i],pf+'sticky');continue;}
if(Math.abs(ar[i])==NOFOLLOW){t(ar[i],pf+'nofollow');continue;}
@@ -577,8 +577,8 @@ if(OLshowid>0){clearTimeout(OLshowid);OLshowid=0;}if(OLtimerid>0)clearTimeout(OL
if(OLdelayid>0)clearTimeout(OLdelayid);OLtimerid=0;OLdelayid=0;self.status="";o3_label=ol_label;
if(o3_frame!=self)o=OLgetRefById();if(o){if(o.onmouseover)o.onmouseover=null;if(OLscrollPI&&o==over)OLclearScroll();
if(OLdraggablePI)OLclearDrag();if(OLfilterPI)OLcleanupFilter(o);if(OLshadowPI)OLhideShadow();var os=(OLns4)?o:o.style;
-if(((OLfilterPI)&&!OLchkFadeOut(os))||!OLfilterPI){os.visibility="hidden";if(!OLie55||!OLfilterPI||!o3_filter||
-o3_fadeout<0)o.innerHTML='';}if(OLhidePI&&o==over)OLhideUtil(0,0,1);if(OLiframePI)OLhideIfs(o);}
+if(((OLfilterPI)&&!OLchkFadeOut(os))||!OLfilterPI){os.visibility="hidden";if(!OLie55||(typeof ggOnChange=='undefined'&&
+(!OLfilterPI||!o3_filter||o3_fadeout<0)))o.innerHTML='';}if(OLhidePI&&o==over)OLhideUtil(0,0,1);if(OLiframePI)OLhideIfs(o);}
}
// Moves layer
@@ -588,8 +588,9 @@ o=(OLns4)?o:o.style;o.left=(OLns4?xL:xL+'px');o.top=(OLns4?yL:yL+'px');
// Handle NOCLOSE-MOUSEOFF
function OLoptMOUSEOFF(c){
-if(!c)o3_close="";
-over.onmouseover=function(){OLhover=1;if(OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}}
+if(!c)o3_close="";over.onmouseover=function(){OLhover=1;if(OLtimerid>0){clearTimeout(OLtimerid);OLtimerid=0;}}
+over.onmouseout=function(){if(OLhover){OLcC=(OLovertwoPI&&over2&&over==over2?cClick2:cClick);if(OLtimerid>0)
+clearTimeout(OLtimerid);OLtimerid=setTimeout("OLcC()",(o3_offdelay<1)?1:o3_offdelay);}}
}
function OLcursorOff(){
var o=(OLns4?over:over.style),pHt=OLns4?over.clip.height:over.offsetHeight,left=parseInt(o.left),top=parseInt(o.top),
@@ -608,7 +609,7 @@ if(OLcmdLine.length){for(var k=0;k<OLcmdLine.length;k++){var j=OLcmdLine[k](pf,i
}
function OLregCmds(c){
if(typeof c!='string')return;var pM=c.split(',');pMtr=pMtr.concat(pM);
-for(var i=0;i<pM.length;i++)eval(pM[i].toUpperCase()+'='+pmCnt++);
+for(var i=0;i<pM.length;i++)eval(pM[i].toUpperCase()+'='+(pmCnt++));
}
function OLregRunTimeFunc(f){
if(typeof f=='object')OLrunTime=OLrunTime.concat(f);else OLrunTime[OLrunTime.length++]=f;
diff --git a/httemplate/elements/overlibmws_crossframe.js b/httemplate/elements/overlibmws_crossframe.js
index dd6422313..e1bbf413d 100644
--- a/httemplate/elements/overlibmws_crossframe.js
+++ b/httemplate/elements/overlibmws_crossframe.js
@@ -1,7 +1,7 @@
/*
- overlibmws_crossframe.js plug-in module - Copyright Foteos Macrides 2003-2008. All rights reserved.
+ overlibmws_crossframe.js plug-in module - Copyright Foteos Macrides 2003-2010. All rights reserved.
For support of FRAME.
- Initial: August 3, 2003 - Last Revised: January 16, 2008
+ Initial: August 3, 2003 - Last Revised: October 25, 2008
See the Change History and Command Reference for overlibmws via:
http://www.macridesweb.com/oltest/
@@ -32,8 +32,8 @@ 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+'.';var n=window.name,o;
+var i,k,cnt=0,p='',str=tFrm;while((k=str.lastIndexOf('['))!= -1){cnt++;str=str.substring(0,k);}if(!sFrm&&o3_frame==parent)
+sFrm=OLgetFrameRef(parent,self);else for(i=0;i<cnt;i++)p=p+'parent.';OLfnRef=p+'frames'+sFrm+'.';var n=window.name,o;
if((n&&parent!=self&&o3_frame==parent)&&(o=OLgetRef(n,parent.document))){if(OLie4&&!OLop7){
OLx=event.clientX+OLfd().scrollLeft;OLy=event.clientY+OLfd().scrollTop;}
OLifX=OLpageLoc(o,'Left')-(OLie4&&!OLop7?OLfd().scrollLeft:self.pageXOffset);
@@ -47,6 +47,11 @@ OLrefXY[0]+=(OLpageLoc(o,'Left')-(OLie4&&!OLop7?OLfd(self).scrollLeft:self.pageX
OLrefXY[1]+=(OLpageLoc(o,'Top')-(OLie4&&!OLop7?OLfd(self).scrollTop:self.pageYOffset));}}
}
+function OLchkFRAME(args){
+var OLfrmVal=self;for(var i=0;i<args.length;i++){if(typeof args[i]=='number'&&args[i]==FRAME){OLfrmVal=args[i+1];break;}}
+if(OLfrmVal!=self&&OLfrmVal.over&&OLfrmVal.cClick)OLfrmVal.cClick();
+}
+
OLregCmdLineFunc(OLparseCrossframe);
OLcrossframePI=1;
diff --git a/httemplate/elements/overlibmws_draggable.js b/httemplate/elements/overlibmws_draggable.js
index 1bf0ecfd1..d2b5eb1ad 100644
--- a/httemplate/elements/overlibmws_draggable.js
+++ b/httemplate/elements/overlibmws_draggable.js
@@ -1,5 +1,5 @@
/*
- overlibmws_draggable.js plug-in module - Copyright Foteos Macrides 2002-2008. All rights reserved.
+ overlibmws_draggable.js plug-in module - Copyright Foteos Macrides 2002-2010. All rights reserved.
For support of the DRAGGABLE feature.
Initial: August 24, 2002 - Last Revised: January 26, 2008
See the Change History and Command Reference for overlibmws via:
diff --git a/httemplate/elements/overlibmws_iframe.js b/httemplate/elements/overlibmws_iframe.js
index 4c937d3d7..a06bdc515 100644
--- a/httemplate/elements/overlibmws_iframe.js
+++ b/httemplate/elements/overlibmws_iframe.js
@@ -1,5 +1,5 @@
/*
- overlibmws_iframe.js plug-in module - Copyright Foteos Macrides 2003-2008. All rights reserved.
+ overlibmws_iframe.js plug-in module - Copyright Foteos Macrides 2003-2010. All rights reserved.
Masks system controls to prevent obscuring of popops for IE v5.5 or higher.
Initial: October 19, 2003 - Last Revised: January 26, 2008
See the Change History and Command Reference for overlibmws via:
diff --git a/httemplate/elements/phonenumber.html b/httemplate/elements/phonenumber.html
index 60414a644..854f5846d 100644
--- a/httemplate/elements/phonenumber.html
+++ b/httemplate/elements/phonenumber.html
@@ -4,22 +4,64 @@
<% $number %>
-% if ( $opt{'callable'} && $curuser->option('vonage-username') ) {
-
- <% include('/elements/popup_link.html',
- 'action' =>
- 'https://secure.click2callu.com/tpcc/makecall'.
- '?username='. uri_escape($curuser->option('vonage-username')).
- '&password='. uri_escape($curuser->option('vonage-password')).
- "&fromnumber=$vonage_number".
- "&tonumber=$snumber",
- 'width' => 240,
- 'height' => 64,
- 'actionlabel' => 'Initiating call',
- 'label' => qq!<IMG SRC="${fsurl}images/red_telephone_mimooh_01.png" BORDER=0 ALT="Call this number">!,
- )
- %>
+% if ( $opt{'callable'} ) {
+%
+% if ( $curuser->option('vonage-username') ) {
+%
+% (my $vonage_number = $curuser->option('vonage-fromnumber')) =~ s/\D//g;
+% $vonage_number =~ /^1/ or $vonage_number = "1$vonage_number";
+
+ <% include('/elements/popup_link.html',
+ 'action' =>
+ 'https://secure.click2callu.com/tpcc/makecall'.
+ '?username='. uri_escape($curuser->option('vonage-username')).
+ '&password='. uri_escape($curuser->option('vonage-password')).
+ "&fromnumber=$vonage_number".
+ "&tonumber=$snumber",
+ 'width' => 240,
+ 'height' => 64,
+ 'actionlabel' => 'Initiating call',
+ 'label' => "<$img>",
+ )
+ %>
+
+% } elsif ( $curuser->option('snom-ip') ) {
+%
+% my $host = $curuser->option('snom-ip');
+% if ( $curuser->option('snom-username') ) {
+% my $userpass = uri_escape($curuser->option('snom-username'));
+% $userpass .= ':'. uri_escape($curuser->option('snom-password'))
+% if $curuser->option('snom-password');
+% $host = $userpass.'@'.$host;
+% }
+%
+% $snumber = "1$snumber" unless $snumber =~ /~1/; #NANPA-centric
+
+%# <% include('/elements/popup_link.html',
+%# 'action' => "http://$host/command.htm?number=$snumber",
+%# %link_common,
+%# )
+%# %>
+
+ <A HREF="javascript:snom_call(<%$snumber%>)"><<% $img %>></A>
+ <SCRIPT TYPE="text/javascript">
+ function snom_call(number) {
+
+ var url = '<% "http://$host/command.htm?number=" %>';
+ url = url + number;
+
+ var xmlhttp = new XMLHttpRequest();
+ xmlhttp.open('GET', url, true);
+ xmlhttp.send(null);
+
+ }
+
+ </SCRIPT>
+
+
+% }
+%
% }
%
% } else {
@@ -34,7 +76,6 @@ my( $number, %opt ) = @_;
my $curuser = $FS::CurrentUser::CurrentUser;
-( my $vonage_number = $curuser->option('vonage-fromnumber') ) =~ s/\D//g;
-$vonage_number =~ /^1/ or $vonage_number = "1$vonage_number";
+my $img = qq(IMG SRC="${fsurl}images/red_telephone_mimooh_01.png" BORDER=0 ALT="Call this number");
</%init>
diff --git a/httemplate/elements/search-cust_main.html b/httemplate/elements/search-cust_main.html
index dbcc2ed0b..23c4369e8 100644
--- a/httemplate/elements/search-cust_main.html
+++ b/httemplate/elements/search-cust_main.html
@@ -1,26 +1,39 @@
-<INPUT TYPE="hidden" NAME="<% $opt{'field_name'} %>" VALUE="<% $value %>">
+<%doc>
+
+Example:
+
+ include( '/elements/search-cust_main.html,
+ 'field' => 'custnum',
+ #slightly deprecated old synonym for field#'field_name'=>'custnum',
+ 'find_button' => 1, #add a "find" button to the field
+ 'curr_value' => 54, #current value
+ 'value => 32, #deprecated synonym for curr_value
+ );
+
+</%doc>
+<INPUT TYPE="hidden" NAME="<% $field %>" VALUE="<% $value %>">
<!-- some false laziness w/ misc/batch-cust_pay.html, though not as bad as i'd thought at first... -->
<INPUT TYPE = "text"
- NAME = "<% $opt{'field_name'} %>_search"
- ID = "<% $opt{'field_name'} %>_search"
+ NAME = "<% $field %>_search"
+ ID = "<% $field %>_search"
SIZE = "32"
VALUE="<% $cust_main ? $cust_main->name : '(cust #, name or company)' %>"
- onFocus="clearhint_<% $opt{'field_name'} %>_search(this);"
- onClick="clearhint_<% $opt{'field_name'} %>_search(this);"
- onChange="smart_<% $opt{'field_name'} %>_search(this);"
+ onFocus="clearhint_<% $field %>_search(this);"
+ onClick="clearhint_<% $field %>_search(this);"
+ onChange="smart_<% $field %>_search(this);"
>
% if ( $opt{'find_button'} ) {
<INPUT TYPE = "button"
VALUE = 'Find',
- NAME = "<% $opt{'field_name'} %>_findbutton"
- onClick = "smart_<% $opt{'field_name'} %>_search(this.form.<% $opt{'field_name'} %>_search);"
+ NAME = "<% $field %>_findbutton"
+ onClick = "smart_<% $field %>_search(this.form.<% $field %>_search);"
>
% }
-<SELECT NAME="<% $opt{'field_name'} %>_select" ID="<% $opt{'field_name'} %>_select" STYLE="color:#ff0000; display:none" onChange="select_<% $opt{'field_name'} %>(this);">
+<SELECT NAME="<% $field %>_select" ID="<% $field %>_select" STYLE="color:#ff0000; display:none" onChange="select_<% $field %>(this);">
</SELECT>
<% include('/elements/xmlhttp.html',
@@ -31,7 +44,7 @@
<SCRIPT TYPE="text/javascript">
- function clearhint_<% $opt{'field_name'} %>_search (what) {
+ function clearhint_<% $field %>_search (what) {
what.style.color = '#000000';
@@ -43,7 +56,7 @@
}
- function smart_<% $opt{'field_name'} %>_search(what) {
+ function smart_<% $field %>_search(what) {
var customer = what.value;
@@ -61,11 +74,11 @@
what.style.color= '#000000';
what.style.backgroundColor = '#dddddd';
- var customer_select = document.getElementById('<% $opt{'field_name'} %>_select');
+ var customer_select = document.getElementById('<% $field %>_select');
//alert("search for customer " + customer);
- function <% $opt{'field_name'} %>_search_update(customers) {
+ function <% $field %>_search_update(customers) {
//alert('customers returned: ' + customers);
@@ -76,7 +89,7 @@
if ( customerArray.length == 0 ) {
- what.form.<% $opt{'field_name'} %>.value = '';
+ what.form.<% $field %>.value = '';
what.value = 'Customer not found: ' + what.value;
what.style.color = '#ff0000';
@@ -88,7 +101,7 @@
//alert('one customer found: ' + customerArray[0]);
- what.form.<% $opt{'field_name'} %>.value = customerArray[0][0];
+ what.form.<% $field %>.value = customerArray[0][0];
what.value = customerArray[0][1];
what.style.display = '';
@@ -117,17 +130,17 @@
}
- smart_search( customer, <% $opt{'field_name'} %>_search_update );
+ smart_search( customer, <% $field %>_search_update );
}
- function select_<% $opt{'field_name'} %> (what) {
+ function select_<% $field %> (what) {
var custnum = what.options[what.selectedIndex].value;
var customer = what.options[what.selectedIndex].text;
- var customer_obj = document.getElementById('<% $opt{'field_name'} %>_search');
+ var customer_obj = document.getElementById('<% $field %>_search');
if ( custnum == '' ) {
//what.style.color = '#ff0000';
@@ -142,7 +155,7 @@
} else {
- what.form.<% $opt{'field_name'} %>.value = custnum;
+ what.form.<% $field %>.value = custnum;
customer_obj.value = customer;
customer_obj.style.color = '#000000';
@@ -165,7 +178,8 @@
<%init>
my( %opt ) = @_;
-$opt{'field_name'} ||= 'custnum';
+
+my $field = $opt{'field'} || $opt{'field_name'} || 'custnum';
my $value = $opt{'curr_value'} || $opt{'value'};
diff --git a/httemplate/elements/select-areacode.html b/httemplate/elements/select-areacode.html
index aa2d73b65..453205c02 100644
--- a/httemplate/elements/select-areacode.html
+++ b/httemplate/elements/select-areacode.html
@@ -12,7 +12,7 @@
what.options[length] = optionName;
}
- function <% $opt{'prefix'} %>state_changed(what, callback) {
+ function <% $opt{'state_prefix'} %>state_changed(what, callback) {
what.form.<% $opt{'prefix'} %>areacode.disabled = 'disabled';
what.form.<% $opt{'prefix'} %>areacode.style.display = 'none';
@@ -24,7 +24,7 @@
what.form.<% $opt{'prefix'} %>exchange.disabled = 'disabled';
what.form.<% $opt{'prefix'} %>phonenum.disabled = 'disabled';
- state = what.options[what.selectedIndex].value;
+ var state = what.options[what.selectedIndex].value;
function <% $opt{'prefix'} %>update_areacodes(areacodes) {
@@ -86,6 +86,7 @@
my %opt = @_;
-$opt{disabled} = 'disabled' unless exists $opt{disabled};
+$opt{disabled} = 'disabled' unless exists $opt{disabled};
+$opt{state_prefix} = $opt{prefix} unless exists $opt{state_prefix};
</%init>
diff --git a/httemplate/elements/select-did.html b/httemplate/elements/select-did.html
index af8d59513..b62d6a089 100644
--- a/httemplate/elements/select-did.html
+++ b/httemplate/elements/select-did.html
@@ -3,7 +3,7 @@
Example:
include('/elements/select-did.html',
- 'field' => 'phonenum',
+ #can't actuall change from phonenum yet# 'field' => 'phonenum',
'svcpart' => 5,
#OR
@@ -18,6 +18,7 @@ Example:
<TR>
<TD>
<% include('/elements/select-state.html',
+ 'prefix' => 'phonenum_', #$field.'_',
'country' => $country,
'disable_empty' => 0,
'empty_label' => 'Select state',
@@ -26,8 +27,9 @@ Example:
</TD>
<TD>
<% include('/elements/select-areacode.html',
- 'svcpart' => $svcpart,
- 'empty' => 'Select area code',
+ 'state_prefix' => 'phonenum_', #$field.'_',
+ 'svcpart' => $svcpart,
+ 'empty' => 'Select area code',
)
%>
</TD>
@@ -84,4 +86,6 @@ if ( scalar(@exports) > 1 ) {
my $use_selector = scalar(@exports) ? 1 : 0;
+#my $field = $opt{'field'} || 'phonenum';
+
</%init>
diff --git a/httemplate/elements/select-svc-domain.html b/httemplate/elements/select-svc-domain.html
new file mode 100644
index 000000000..4c04466db
--- /dev/null
+++ b/httemplate/elements/select-svc-domain.html
@@ -0,0 +1,50 @@
+<SELECT NAME="domsvc" SIZE=1>
+% foreach my $svcnum (
+% sort { $svc_domain{$a} cmp $svc_domain{$b} }
+% keys %svc_domain
+% ) {
+
+ <OPTION VALUE="<% $svcnum %>"
+ <% ($svcnum == $domsvc) ? ' SELECTED' : '' %>
+ ><% $svc_domain{$svcnum} %>
+
+% }
+
+</SELECT>
+<%init>
+
+my %opt = @_;
+
+my %svc_domain = ();
+my $domsvc;
+
+my $domsvc = $opt{'curr_value'};
+my $part_svc = $opt{'part_svc'}
+ || qsearchs('part_svc', { 'svcpart' => $opt{'svcpart'} });
+
+#optional
+my $cust_pkg = $opt{'cust_pkg'};
+$cust_pkg ||= qsearchs('cust_pkg', { 'pkgnum' => $opt{'pkgnum'} })
+ if $opt{'pkgnum'};
+
+my $pkgnum = $cust_pkg ? $cust_pkg->pkgnum : '';
+
+my %svc_domain = ();
+
+if ( $domsvc ) {
+ my $svc_domain = qsearchs('svc_domain', { 'svcnum' => $domsvc } );
+ if ( $svc_domain ) {
+ $svc_domain{$svc_domain->svcnum} = $svc_domain;
+ } else {
+ warn "unknown svc_domain.svcnum for svc_acct.domsvc: $domsvc";
+ }
+}
+
+%svc_domain = (
+ %svc_domain,
+ FS::svc_Domain_Mixin->domain_select_hash( 'svcpart' => $part_svc->svcpart,
+ 'pkgnum' => $pkgnum,
+ )
+);
+
+</%init>
diff --git a/httemplate/elements/select-svc_pbx.html b/httemplate/elements/select-svc_pbx.html
new file mode 100644
index 000000000..19bce96ca
--- /dev/null
+++ b/httemplate/elements/select-svc_pbx.html
@@ -0,0 +1,57 @@
+<SELECT <% $opt{'multiple'} ? 'MULTIPLE' : 'SIZE=1' %>
+ NAME = "<% $opt{'element_name'} || $opt{'field'} || 'pbxsvc' %>"
+ <% $opt{'element_etc'} %>
+>
+
+% unless ( $opt{'multiple'} || $opt{'disable_empty'} ) {
+ <OPTION VALUE=""><% $opt{'empty_label'} || '' %>
+% }
+
+% foreach my $svcnum (
+% sort { $svc_pbx{$a} cmp $svc_pbx{$b} }
+% keys %svc_pbx
+% ) {
+% my $svc_pbx = $svc_pbx{$svcnum};
+% my $selected = ($svcnum == $pbxsvc) ? ' SELECTED' : '';
+
+ <OPTION VALUE="<% $svcnum %>" <% $selected %>><% $svc_pbx{$svcnum} %>
+
+% }
+
+</SELECT>
+<%init>
+
+# false laziness w/select-svc_acct-domain.html
+
+my %opt = @_;
+
+my $pbxsvc = $opt{'curr_value'};
+my $part_svc = $opt{'part_svc'}
+ || qsearchs('part_svc', { 'svcpart' => $opt{'svcpart'} });
+my $svcpart = $part_svc ? $part_svc->svcpart : '';
+
+#optional
+my $cust_pkg = $opt{'cust_pkg'};
+$cust_pkg ||= qsearchs('cust_pkg', { 'pkgnum' => $opt{'pkgnum'} })
+ if $opt{'pkgnum'};
+
+my $pkgnum = $cust_pkg ? $cust_pkg->pkgnum : '';
+
+my %svc_pbx = ();
+
+if ( $pbxsvc ) {
+ my $svc_pbx = qsearchs('svc_pbx', { 'svcnum' => $pbxsvc } );
+ if ( $svc_pbx ) {
+ $svc_pbx{$svc_pbx->svcnum} = $svc_pbx;
+ } else {
+ warn "unknown svc_pbx.svcnum for svc_acct.pbxsvc: $pbxsvc";
+ }
+}
+
+%svc_pbx = (
+ %svc_pbx,
+ FS::svc_Common->pbx_select_hash( 'svcpart' => $svcpart,
+ 'pkgnum' => $pkgnum,
+ )
+);
+</%init>
diff --git a/httemplate/elements/select-table.html b/httemplate/elements/select-table.html
index 10a8b2741..c280c3631 100644
--- a/httemplate/elements/select-table.html
+++ b/httemplate/elements/select-table.html
@@ -29,6 +29,9 @@ Example:
#or
'records' => \@records, #instead of search params
+ #instead of the primary key... only for special cases
+ 'value_col' => 'columnname',
+
#basic params controlling the resulting <SELECT>
'pre_options' => [ 'value' => 'option' ], #before normal options
'empty_label' => '', #better specify it though, the default might change
@@ -86,7 +89,7 @@ Example:
% {
% my $recvalue = $record->$key();
<OPTION VALUE="<% $recvalue %>"
- <% ref($value) && $value->{$recvalue} || $value == $recvalue
+ <% ref($value) && $value->{$recvalue} || $value && $value eq $recvalue # not == because of value_col
? ' SELECTED' : ''
%>
><% $opt{'label_showkey'} ? "$recvalue: " : '' %>
@@ -118,7 +121,7 @@ if ( $opt{'onchange'} ) {
my $dbdef_table = dbdef->table($opt{'table'})
or die "can't find dbdef for ". $opt{'table'}. " table\n";
-my $key = $dbdef_table->primary_key; #? $opt{'primary_key'} ||
+my $key = $opt{'value_col'} || $dbdef_table->primary_key;
my $name_col = $opt{'name_col'};
diff --git a/httemplate/elements/tr-input-beginning_ending.html b/httemplate/elements/tr-input-beginning_ending.html
index 8a1dd62a9..2aa597479 100644
--- a/httemplate/elements/tr-input-beginning_ending.html
+++ b/httemplate/elements/tr-input-beginning_ending.html
@@ -11,7 +11,7 @@
<SCRIPT TYPE="text/javascript">
Calendar.setup({
inputField: "<% $opt{prefix} %>beginning_text",
- ifFormat: "%m/%d/%Y<% $time_format %>",
+ ifFormat: "<% $date_format. $time_format %>",
button: "<% $opt{prefix} %>beginning_button",
align: "BR"
<% $input_time %>
@@ -30,7 +30,7 @@
<SCRIPT TYPE="text/javascript">
Calendar.setup({
inputField: "<% $opt{prefix} %>ending_text",
- ifFormat: "%m/%d/%Y<% $time_format %>",
+ ifFormat: "<% $date_format. $time_format %>",
button: "<% $opt{prefix} %>ending_button",
align: "BR"
<% $input_time %>
@@ -54,6 +54,10 @@ my $previous_request_count = '';
my %opt = @_;
+my $conf = new FS::Conf;
+
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
+
$opt{prefix} = '' unless defined $opt{prefix};
$opt{prefix} .= '_' if $opt{prefix};
diff --git a/httemplate/elements/tr-input-date-field.html b/httemplate/elements/tr-input-date-field.html
index 2a731e1e8..ff4996faf 100644
--- a/httemplate/elements/tr-input-date-field.html
+++ b/httemplate/elements/tr-input-date-field.html
@@ -21,8 +21,8 @@
});
</SCRIPT>
-
<%init>
+
my($name, $value, $label, $format, $usedatetime);
if ( ref($_[0]) ) {
my $opt = shift;
@@ -35,7 +35,10 @@ if ( ref($_[0]) ) {
($name, $value, $label, $format, $usedatetime) = @_;
}
-$format = "%m/%d/%Y" unless $format;
+my $conf = new FS::Conf;
+
+$format ||= $conf->config('date_format') || '%m/%d/%Y';
+
$label = $name unless $label;
if ( $value =~ /\S/ ) {
diff --git a/httemplate/elements/tr-search-cust_main.html b/httemplate/elements/tr-search-cust_main.html
new file mode 100644
index 000000000..9df91a18f
--- /dev/null
+++ b/httemplate/elements/tr-search-cust_main.html
@@ -0,0 +1,15 @@
+<% include('tr-td-label.html', @_ ) %>
+
+ <TD <% $colspan %> <% $cell_style %> ID="<% $opt{input_id} || $opt{id}.'_input0' %>"><% include('search-cust_main.html', @_ ) %></TD>
+
+</TR>
+
+<%init>
+
+my %opt = @_;
+
+my $cell_style = $opt{'cell_style'} ? 'STYLE="'. $opt{'cell_style'}. '"' : '';
+
+my $colspan = $opt{'colspan'} ? 'COLSPAN="'.$opt{'colspan'}.'"' : '';
+
+</%init>
diff --git a/httemplate/elements/tr-select-cust_location.html b/httemplate/elements/tr-select-cust_location.html
index da16dfe1c..bc3915441 100644
--- a/httemplate/elements/tr-select-cust_location.html
+++ b/httemplate/elements/tr-select-cust_location.html
@@ -118,7 +118,7 @@ Example:
</SCRIPT>
<TR>
- <TH ALIGN="right">Service&nbsp;location</TH>
+ <<%$th%> ALIGN="right"><% $opt{'label'} || 'Service&nbsp;location' %></<%$th%>>
<TD COLSPAN=7>
<SELECT NAME="locationnum" onChange="locationnum_changed(this);">
<OPTION VALUE="">(default service address)
@@ -139,6 +139,7 @@ Example:
#'onchange' ? probably not
'disabled' => ( $locationnum == -1 ? '' : 'DISABLED' ),
'no_asterisks' => 1,
+ 'no_bold' => $opt{'no_bold'},
)
%>
@@ -156,6 +157,7 @@ my $statedefault = $conf->config('statedefault')
my %opt = @_;
my $cgi = $opt{'cgi'};
+my $cust_pkg = $opt{'cust_pkg'};
my $cust_main = $opt{'cust_main'};
my $prefix = length($cust_main->ship_last) ? 'ship_' : '';
@@ -170,9 +172,15 @@ if ( $locationnum && $locationnum != -1 ) {
$cust_location = new FS::cust_location;
if ( $locationnum == -1 ) {
$cust_location->$_( $cgi->param($_) ) foreach @location_fields;
+ } elsif ( $cust_pkg && $cust_pkg->locationnum ) {
+ my $pkg_location = $cust_pkg->cust_location;
+ $cust_location->$_( $pkg_location->$_ ) foreach @location_fields;
+ $opt{'empty_label'} ||= 'package address: '.$pkg_location->line;
} else {
$cust_location->$_( $cust_main->get($prefix.$_) ) foreach @location_fields;
}
}
+my $th = $opt{'no_bold'} ? 'TD' : 'TH';
+
</%init>
diff --git a/httemplate/elements/tr-select-svc-domain.html b/httemplate/elements/tr-select-svc-domain.html
new file mode 100644
index 000000000..437bc5896
--- /dev/null
+++ b/httemplate/elements/tr-select-svc-domain.html
@@ -0,0 +1,34 @@
+%if ( $columnflag eq 'F' ) {
+ <INPUT TYPE="hidden" NAME="domsvc" VALUE="<% $domsvc %>">
+% } else {
+
+ <TR>
+ <TD ALIGN="right"><% $opt{'label'} || 'Domain' %></TD>
+ <TD>
+ <% include('/elements/select-svc-domain.html',
+ 'curr_value' => $domsvc,
+ 'part_svc' => $part_svc,
+ 'cust_pkg' => $cust_pkg,
+ )
+ %>
+ </TD>
+ </TR>
+% }
+<%init>
+
+my %opt = @_;
+
+my $domsvc = $opt{'curr_value'};
+
+#required
+my $part_svc = $opt{'part_svc'}
+ || qsearchs('part_svc', { 'svcpart' => $opt{'svcpart'} });
+
+my $columnflag = $part_svc->part_svc_column('domsvc')->columnflag;
+
+#optional
+my $cust_pkg = $opt{'cust_pkg'};
+$cust_pkg ||= qsearchs('cust_pkg', { 'pkgnum' => $opt{'pkgnum'} })
+ if $opt{'pkgnum'};
+
+</%init>
diff --git a/httemplate/elements/tr-select-svc_pbx.html b/httemplate/elements/tr-select-svc_pbx.html
new file mode 100644
index 000000000..b02bd65c3
--- /dev/null
+++ b/httemplate/elements/tr-select-svc_pbx.html
@@ -0,0 +1,60 @@
+%if ( $columnflag eq 'F' || !keys(%svc_pbx) ) {
+ <INPUT TYPE="hidden" NAME="<% $opt{'element_name'} || $opt{'field'} || 'pbxsvc' %>" VALUE="<% $pbxsvc %>">
+% } else {
+
+ <TR>
+ <TD ALIGN="right"><% $opt{'label'} || 'PBX' %></TD>
+ <TD>
+ <% include('/elements/select-svc_pbx.html',
+ 'curr_value' => $pbxsvc,
+ 'part_svc' => $part_svc,
+ 'cust_pkg' => $cust_pkg,
+ )
+ %>
+ </TD>
+ </TR>
+% }
+<%init>
+
+# false laziness w/tr-select-svc_acct-domain.html
+
+my %opt = @_;
+
+my $pbxsvc = $opt{'curr_value'};
+
+#required
+my $part_svc = $opt{'part_svc'}
+ || qsearchs('part_svc', { 'svcpart' => $opt{'svcpart'} });
+my $svcpart =
+ $part_svc ? $part_svc->svcpart : '';
+my $columnflag =
+ $part_svc ? $part_svc->part_svc_column('pbxsvc')->columnflag : '';
+
+#optional
+my $cust_pkg = $opt{'cust_pkg'};
+$cust_pkg ||= qsearchs('cust_pkg', { 'pkgnum' => $opt{'pkgnum'} })
+ if $opt{'pkgnum'};
+
+# false laziness w/select-svc_pbx.html
+
+my $pkgnum = $cust_pkg ? $cust_pkg->pkgnum : '';
+
+my %svc_pbx = ();
+
+if ( $pbxsvc ) {
+ my $svc_pbx = qsearchs('svc_pbx', { 'svcnum' => $pbxsvc } );
+ if ( $svc_pbx ) {
+ $svc_pbx{$svc_pbx->svcnum} = $svc_pbx;
+ } else {
+ warn "unknown svc_pbx.svcnum for svc_acct.pbxsvc: $pbxsvc";
+ }
+}
+
+%svc_pbx = (
+ %svc_pbx,
+ FS::svc_Common->pbx_select_hash( 'svcpart' => $svcpart,
+ 'pkgnum' => $pkgnum,
+ )
+);
+
+</%init>
diff --git a/httemplate/misc/bulk_pkg_increment_bill.cgi b/httemplate/misc/bulk_pkg_increment_bill.cgi
new file mode 100755
index 000000000..d594b558a
--- /dev/null
+++ b/httemplate/misc/bulk_pkg_increment_bill.cgi
@@ -0,0 +1,50 @@
+<% include('/elements/header-popup.html', "Increment Next Bill Date") %>
+
+% if ( $cgi->param('error') ) {
+ <FONT SIZE="+1" COLOR="#ff0000">Error: <% $cgi->param('error') %></FONT>
+ <BR><BR>
+% }
+
+<FORM ACTION="<% $p %>misc/process/bulk_pkg_increment_bill.cgi" METHOD=POST>
+
+%# some false laziness w/search/cust_pkg.cgi
+
+<INPUT TYPE="hidden" NAME="query" VALUE="<% $cgi->keywords |h %>">
+% for my $param (qw(agentnum custnum magic status classnum custom censustract)) {
+<INPUT TYPE="hidden" NAME="<% $param %>" VALUE="<% $cgi->param($param) |h %>">
+% }
+%
+% foreach my $pkgpart ($cgi->param('pkgpart')) {
+<INPUT TYPE="hidden" NAME="pkgpart" VALUE="<% $pkgpart |h %>">
+% }
+%
+% foreach my $field (qw( setup last_bill bill adjourn susp expire cancel )) {
+%
+ <INPUT TYPE="hidden" NAME="<% $field %>begin" VALUE="<% $cgi->param("${field}.begin") |h %>">
+ <INPUT TYPE="hidden" NAME="<% $field %>beginning" VALUE="<% $cgi->param("${field}beginning") |h %>">
+ <INPUT TYPE="hidden" NAME="<% $field %>end" VALUE="<% $cgi->param("${field}.end") |h %>">
+ <INPUT TYPE="hidden" NAME="<% $field %>ending" VALUE="<% $cgi->param("${field}.ending") |h %>">
+% }
+
+<% ntable('#cccccc') %>
+
+ <TR>
+ <TD>Days to increment: </TD>
+ <TD><INPUT type="text" name="days"></TD>
+ </TR>
+
+</TABLE>
+
+<BR>
+<INPUT TYPE="submit" VALUE="Increment next bill date">
+
+</FORM>
+</BODY>
+</HTML>
+
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Bulk change customer packages');
+
+</%init>
diff --git a/httemplate/misc/cancel_pkg.html b/httemplate/misc/cancel_pkg.html
index 607ce13c4..67d2847cc 100755
--- a/httemplate/misc/cancel_pkg.html
+++ b/httemplate/misc/cancel_pkg.html
@@ -31,7 +31,7 @@
<SCRIPT TYPE="text/javascript">
Calendar.setup({
inputField: "expire_date",
- ifFormat: "%m/%d/%Y",
+ ifFormat: "<% $date_format %>",
button: "expire_button",
align: "BR"
});
@@ -58,7 +58,10 @@
<%init>
-my $date = time2str("%m/%d/%Y", time);
+my %conf = new FS::Conf;
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
+
+my $date = time2str($date_format, time);
my($pkgnum, $reasonnum);
if ( $cgi->param('error') ) {
diff --git a/httemplate/misc/delay_susp_pkg.html b/httemplate/misc/delay_susp_pkg.html
index d4a6da18f..8adc40d55 100755
--- a/httemplate/misc/delay_susp_pkg.html
+++ b/httemplate/misc/delay_susp_pkg.html
@@ -25,7 +25,7 @@
<SCRIPT TYPE="text/javascript">
Calendar.setup({
inputField: "dun_date",
- ifFormat: "%m/%d/%Y",
+ ifFormat: "<% $date_format %>",
button: "dun_button",
align: "BR"
});
@@ -42,7 +42,10 @@
<%init>
-my $date = time2str("%m/%d/%Y", time);
+my $conf = new FS::Conf;
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
+
+my $date = time2str($date_format, time);
my($pkgnum);
if ( $cgi->param('error') ) {
diff --git a/httemplate/misc/delete-mailinglistmember.html b/httemplate/misc/delete-mailinglistmember.html
new file mode 100644
index 000000000..6b91de807
--- /dev/null
+++ b/httemplate/misc/delete-mailinglistmember.html
@@ -0,0 +1,20 @@
+% if ( $error ) {
+% errorpage($error);
+% } else {
+<% $cgi->redirect($p."search/mailinglistmember.html?listnum=$listnum") %>
+% }
+<%init>
+
+my($query) = $cgi->keywords;
+$query =~ /^(\d+)$/ || die "Illegal devicenum";
+my $membernum = $1;
+
+my $mailinglistmember =
+ qsearchs('mailinglistmember', { 'membernum' => $membernum } )
+ or die "unknown membernum $membernum";
+
+my $listnum = $mailinglistmember->listnum;
+
+my $error = $mailinglistmember->delete;
+
+</%init>
diff --git a/httemplate/misc/order_pkg.html b/httemplate/misc/order_pkg.html
index a7571ca58..85573e6b4 100644
--- a/httemplate/misc/order_pkg.html
+++ b/httemplate/misc/order_pkg.html
@@ -54,7 +54,7 @@
<SCRIPT TYPE="text/javascript">
Calendar.setup({
inputField: "start_date_text",
- ifFormat: "%m/%d/%Y",
+ ifFormat: "<% $date_format %>",
button: "start_date_button",
align: "BR"
});
@@ -90,6 +90,7 @@ die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Order customer package');
my $conf = new FS::Conf;
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
$cgi->param('custnum') =~ /^(\d+)$/ or die "no custnum";
my $custnum = $1;
diff --git a/httemplate/misc/process/copy-rate_detail.html b/httemplate/misc/process/copy-rate_detail.html
index 87a674566..60b2aebee 100644
--- a/httemplate/misc/process/copy-rate_detail.html
+++ b/httemplate/misc/process/copy-rate_detail.html
@@ -47,7 +47,7 @@ foreach my $countrycode ( @countrycodes ) {
|| new FS::rate_detail \%hash;
$dst_rate_detail->$_( $src_rate_detail->get($_) )
- foreach qw( min_included min_charge sec_granularity classnum );
+ foreach qw( min_included conn_charge conn_sec min_charge sec_granularity classnum );
my $method = $dst_rate_detail->ratedetailnum ? 'replace' : 'insert';
diff --git a/httemplate/misc/rate_edit_excel.html b/httemplate/misc/rate_edit_excel.html
index e73133c05..442d83aca 100644
--- a/httemplate/misc/rate_edit_excel.html
+++ b/httemplate/misc/rate_edit_excel.html
@@ -1,5 +1,9 @@
<% include('/elements/header.html', 'Edit rates with Excel' ) %>
+% if ( $have_conn ) {
+ <FONT COLOR="#FF0000">WARNING: This functionality does not yet preserve connection charges.</FONT><BR><BR>
+% }
+
<% include( '/elements/form-file_upload.html',
'name' => 'RateImportForm',
'action' => 'process/rate_edit_excel.html',
@@ -58,4 +62,9 @@
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
+my $sth = dbh->prepare('SELECT COUNT(*) FROM rate_detail WHERE conn_charge > 0 OR conn_sec > 0 LIMIT 1')
+ or die dbh->errstr;
+$sth->execute or die $sth->errstr;
+my $have_conn = $sth->fetchrow_arrayref->[0];
+
</%init>
diff --git a/httemplate/pref/pref-process.html b/httemplate/pref/pref-process.html
index 378164e7b..708583df5 100644
--- a/httemplate/pref/pref-process.html
+++ b/httemplate/pref/pref-process.html
@@ -45,8 +45,10 @@ unless ( $error ) { # if ($access_user) {
#XXX autogen
my @paramlist = qw( menu_position default_customer_view
email_address
+ snom-ip snom-username snom-password
vonage-fromnumber vonage-username vonage-password
- show_pkgnum show_db_profile save_db_profile
+ show_pkgnum show_confitem_counts export_getsettings
+ show_db_profile save_db_profile
height width availHeight availWidth colorDepth
);
diff --git a/httemplate/pref/pref.html b/httemplate/pref/pref.html
index 562ef2980..7ded18377 100644
--- a/httemplate/pref/pref.html
+++ b/httemplate/pref/pref.html
@@ -80,6 +80,14 @@ Development
<TD><INPUT TYPE="checkbox" NAME="show_pkgnum" VALUE="1" <% $curuser->option('show_pkgnum') ? 'CHECKED' : '' %>></TD>
</TR>
<TR>
+ <TH>Show config item counts: </TH>
+ <TD><INPUT TYPE="checkbox" NAME="show_confitem_counts" VALUE="1" <% $curuser->option('show_confitem_counts') ? 'CHECKED' : '' %>></TD>
+ </TR>
+ <TR>
+ <TH>Show export data on service view (when available): </TH>
+ <TD><INPUT TYPE="checkbox" NAME="export_getsettings" VALUE="1" <% $curuser->option('export_getsettings') ? 'CHECKED' : '' %>></TD>
+ </TR>
+ <TR>
<TH>Show database profiling (when available): </TH>
<TD><INPUT TYPE="checkbox" NAME="show_db_profile" VALUE="1" <% $curuser->option('show_db_profile') ? 'CHECKED' : '' %>></TD>
</TR>
@@ -91,6 +99,28 @@ Development
</TABLE>
<BR>
+SNOM integration
+<% ntable("#cccccc",2) %>
+
+ <TR>
+ <TH ALIGN="right">SNOM IP address</TH>
+ <TD><INPUT TYPE="text" NAME="snom-ip" VALUE="<% $curuser->option('snom-ip') %>"></TD>
+ </TR>
+
+ <TR>
+ <TH ALIGN="right">SNOM HTTP username (if necessary)</TH>
+ <TD><INPUT TYPE="text" NAME="snom-username" VALUE="<% $curuser->option('snom-username') %>"></TD>
+ </TR>
+
+ <TR>
+ <TH ALIGN="right">SNOM HTTP password (if necessary)</TH>
+ <TD><INPUT TYPE="password" NAME="snom-password" VALUE="<% $curuser->option('snom-password') %>"></TD>
+ </TR>
+
+</TABLE>
+<BR>
+
+OR<BR><BR>
Vonage integration (see <a href="https://secure.click2callu.com/">Click2Call</a>)
<% ntable("#cccccc",2) %>
diff --git a/httemplate/search/cust_bill.html b/httemplate/search/cust_bill.html
index c1f5517af..8d72357dc 100755
--- a/httemplate/search/cust_bill.html
+++ b/httemplate/search/cust_bill.html
@@ -22,7 +22,7 @@
sub { time2str('%b %d %Y', shift->_date ) },
\&FS::UI::Web::cust_fields,
],
- 'align' => 'rrrr'.FS::UI::Web::cust_aligns(),
+ 'align' => 'rrrrl'.FS::UI::Web::cust_aligns(),
'links' => [
$link,
$link,
diff --git a/httemplate/search/cust_bill_pay.html b/httemplate/search/cust_bill_pay.html
index 3c390e706..4272d8669 100644
--- a/httemplate/search/cust_bill_pay.html
+++ b/httemplate/search/cust_bill_pay.html
@@ -5,34 +5,34 @@
'count_query' => $count_query,
'count_addl' => [ '$%.2f total paid (net)', ],
'header' => [ 'Net applied',
- 'to Invoice',
+ 'Invoice',
+ 'Invoice amount',
+ 'Invoice date',
'Payment',
+ 'Payment amount',
+ 'Payment date',
'By',
FS::UI::Web::cust_header(),
],
'fields' => [
- sub { $money_char. sprintf('%.2f', shift->amount ) },
- sub { my $cbp = shift;
- '#'.$cbp->invnum. ' '.
- time2str('%b %d %Y', $cbp->cust_bill_date ).
- " ($money_char".
- sprintf('%.2f', $cbp->cust_bill_amount).
- ")"
- },
- sub { my $cbp = shift;
- $cbp->cust_pay->payby_payinfo_pretty. ' '.
- time2str('%b %d %Y', $cbp->_date ).
- " ($money_char".
- sprintf('%.2f', $cbp->cust_pay_paid ).
- ")"
- },
- sub { shift->cust_pay->otaker },
+ sub { $money_char.sprintf('%.2f', shift->amount ) },
+ 'invnum',
+ sub { $money_char.sprintf('%.2f', shift->cust_bill_charged)},
+ sub { time2str('%b %d %Y', shift->cust_bill_date ) },
+ sub { shift->cust_pay->payby_payinfo_pretty },
+ sub { $money_char.sprintf('%.2f', shift->cust_pay_paid)},
+ sub { time2str('%b %d %Y', shift->cust_pay_date ) },
+ sub { shift->cust_pay_otaker },
\&FS::UI::Web::cust_fields,
],
- 'align' => 'rrrl'.FS::UI::Web::cust_aligns(),
+ 'align' => 'rrrrlrrl'.FS::UI::Web::cust_aligns(),
'links' => [
'',
$cust_bill_link,
+ $cust_bill_link,
+ $cust_bill_link,
+ $cust_pay_link,
+ $cust_pay_link,
$cust_pay_link,
'',
( map { $_ ne 'Cust. Status' ? $cust_link : '' }
@@ -44,6 +44,10 @@
'',
'',
'',
+ '',
+ '',
+ '',
+ '',
FS::UI::Web::cust_colors(),
],
'style' => [
@@ -51,6 +55,10 @@
'',
'',
'',
+ '',
+ '',
+ '',
+ '',
FS::UI::Web::cust_styles(),
],
)
@@ -93,9 +101,11 @@ my $sql_query = {
'table' => 'cust_bill_pay',
'select' => join(', ',
'cust_bill_pay.*',
- 'cust_pay.paid AS cust_pay_paid',
'cust_bill._date AS cust_bill_date',
- #'cust_bill.charged AS cust_bill_charged',
+ 'cust_bill.charged AS cust_bill_charged',
+ 'cust_pay.paid AS cust_pay_paid',
+ 'cust_pay._date AS cust_pay_date',
+ 'cust_pay.otaker AS cust_pay_otaker',
'cust_pay.custnum AS custnum',
'cust_main.custnum AS cust_main_custnum',
FS::UI::Web::cust_sql_fields(),
diff --git a/httemplate/search/cust_bill_pkg.cgi b/httemplate/search/cust_bill_pkg.cgi
index 9b0201c29..2e79cd75d 100644
--- a/httemplate/search/cust_bill_pkg.cgi
+++ b/httemplate/search/cust_bill_pkg.cgi
@@ -3,15 +3,24 @@
'name' => 'line items',
'query' => $query,
'count_query' => $count_query,
- 'count_addl' => [ $money_char. '%.2f total', ],
+ 'count_addl' => [ $money_char. '%.2f total',
+ $unearned ? ( $money_char. '%.2f unearned revenue' ) : (),
+ ],
'header' => [
'#',
'Description',
- 'Setup charge',
+ ( $unearned
+ ? 'Unearned'
+ : 'Setup charge'
+ ),
( $use_usage eq 'usage'
? 'Usage charge'
: 'Recurring charge'
),
+ ( $unearned
+ ? ( 'Charge start', 'Charge end' )
+ : ()
+ ),
'Invoice',
'Date',
FS::UI::Web::cust_header(),
@@ -24,7 +33,22 @@
},
#strikethrough or "N/A ($amount)" or something these when
# they're not applicable to pkg_tax search
- sub { sprintf($money_char.'%.2f', shift->setup ) },
+ sub { my $cust_bill_pkg = shift;
+ if ( $unearned ) {
+ my $period =
+ $cust_bill_pkg->edate - $cust_bill_pkg->sdate;
+ my $elapsed = $unearned - $cust_bill_pkg->sdate;
+ $elapsed = 0 if $elapsed < 0;
+
+ my $remaining = 1 - $elapsed/$period;
+
+ sprintf($money_char. '%.2f',
+ $remaining * $cust_bill_pkg->recur );
+
+ } else {
+ sprintf($money_char.'%.2f', $cust_bill_pkg->setup );
+ }
+ },
sub { my $row = shift;
my $value = 0;
if ( $use_usage eq 'recurring' ) {
@@ -36,6 +60,12 @@
}
sprintf($money_char.'%.2f', $value );
},
+ ( $unearned
+ ? ( sub { time2str('%b %d %Y', shift->sdate ) },
+ sub { time2str('%b %d %Y', shift->edate ) },
+ )
+ : ()
+ ),
'invnum',
sub { time2str('%b %d %Y', shift->_date ) },
\&FS::UI::Web::cust_fields,
@@ -45,6 +75,7 @@
'',
'',
'',
+ ( $unearned ? ( '', '' ) : () ),
$ilink,
$ilink,
( map { $_ ne 'Cust. Status' ? $clink : '' }
@@ -52,12 +83,16 @@
),
],
#'align' => 'rlrrrc'.FS::UI::Web::cust_aligns(),
- 'align' => 'lrrrc'.FS::UI::Web::cust_aligns(),
+ 'align' => 'lrr'.
+ ( $unearned ? 'cc' : '' ).
+ 'rc'.
+ FS::UI::Web::cust_aligns(),
'color' => [
#'',
'',
'',
'',
+ ( $unearned ? ( '', '' ) : () ),
'',
'',
FS::UI::Web::cust_colors(),
@@ -67,6 +102,7 @@
'',
'',
'',
+ ( $unearned ? ( '', '' ) : () ),
'',
'',
FS::UI::Web::cust_styles(),
@@ -80,6 +116,8 @@ die "access denied"
my $conf = new FS::Conf;
+my $unearned = '';
+
#here is the agent virtualization
my $agentnums_sql =
$FS::CurrentUser::CurrentUser->agentnums_sql( 'table' => 'cust_main' );
@@ -282,6 +320,19 @@ if ( $cgi->param('out') ) {
keys %ph
);
+} elsif ( $cgi->param('unearned_now') =~ /^(\d+)$/ ) {
+
+ $unearned = $1;
+
+ push @where, "cust_bill_pkg.sdate < $unearned",
+ "cust_bill_pkg.edate > $unearned",
+ "cust_bill_pkg.recur != 0",
+ "part_pkg.freq != '0'",
+ "part_pkg.freq != '1'",
+ "part_pkg.freq NOT LIKE '%h'",
+ "part_pkg.freq NOT LIKE '%d'",
+ "part_pkg.freq NOT LIKE '%w'";
+
}
if ( $cgi->param('itemdesc') ) {
@@ -399,10 +450,31 @@ if ( $cgi->param('pkg_tax') ) {
$count_query .= "SUM(setup + recur - usage)";
} elsif ( $use_usage eq 'usage' ) {
$count_query .= "SUM(usage)";
+ } elsif ( $unearned ) {
+ $count_query .= "SUM(cust_bill_pkg.recur)";
} else {
$count_query .= "SUM(cust_bill_pkg.setup + cust_bill_pkg.recur)";
}
+ if ( $unearned ) {
+
+ #false laziness w/report_prepaid_income.cgi
+
+ my $float = 'REAL'; #'DOUBLE PRECISION';
+
+ my $period = "CAST(cust_bill_pkg.edate - cust_bill_pkg.sdate AS $float)";
+ my $elapsed = "(CASE WHEN cust_bill_pkg.sdate > $unearned
+ THEN 0
+ ELSE ($unearned - cust_bill_pkg.sdate)
+ END)";
+ #my $elapsed = "CAST($unearned - cust_bill_pkg.sdate AS $float)";
+
+ my $remaining = "(1 - $elapsed/$period)";
+
+ $count_query .= ", SUM($remaining * cust_bill_pkg.recur)";
+
+ }
+
}
my $where = ' WHERE '. join(' AND ', @where);
@@ -458,11 +530,13 @@ if ($use_usage) {
}
warn "count_query is $count_query\n";
-my @select = (
- 'cust_bill_pkg.*',
- 'cust_bill._date',
- );
-push @select, 'part_pkg.pkg' unless $cgi->param('istax');
+my @select = ( 'cust_bill_pkg.*',
+ 'cust_bill._date', );
+
+push @select, 'part_pkg.pkg',
+ 'part_pkg.freq',
+ unless $cgi->param('istax');
+
push @select, 'cust_main.custnum',
FS::UI::Web::cust_sql_fields();
diff --git a/httemplate/search/cust_main-zip.html b/httemplate/search/cust_main-zip.html
index 56df924bc..e87b21474 100644
--- a/httemplate/search/cust_main-zip.html
+++ b/httemplate/search/cust_main-zip.html
@@ -32,6 +32,17 @@ if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
$agentnum = $1;
push @where, "cust_main.agentnum = $agentnum";
}
+
+# select svcdb
+
+if ( $cgi->param('svcdb') =~ /^(\w+)$/ ) {
+ my $svcdb = $1;
+ push @where, "EXISTS( SELECT 1 FROM $svcdb LEFT JOIN cust_svc USING ( svcnum )
+ LEFT JOIN cust_pkg USING ( pkgnum )
+ WHERE cust_pkg.custnum = cust_main.custnum
+ )";
+}
+
my $where = scalar(@where) ? 'WHERE '. join(' AND ', @where) : '';
# bill zip vs ship zip
diff --git a/httemplate/search/cust_pkg.cgi b/httemplate/search/cust_pkg.cgi
index ee4c82d8e..83cd206cb 100755
--- a/httemplate/search/cust_pkg.cgi
+++ b/httemplate/search/cust_pkg.cgi
@@ -143,7 +143,6 @@
),
'',
],
- 'extra_choices_callback'=> $extra_choices,
)
%>
<%init>
@@ -253,22 +252,32 @@ sub time_or_blank {
};
}
-my $html_init = include('/elements/init_overlib.html');
-
-my $extra_choices = sub {
+my $html_init = sub {
my $query = shift;
-
- return '' unless
- $FS::CurrentUser::CurrentUser->access_right('Bulk change customer packages');
-
- '<BR><BR>'.
- include( '/elements/popup_link.html',
- 'label' => 'Change these packages',
- 'action' => "${p}misc/bulk_change_pkg.cgi?$query",
- 'actionlabel' => 'Change Packages',
- 'width' => 763,
- 'height' => 336,
- );
+ my $text = '';
+ my $curuser = $FS::CurrentUser::CurrentUser;
+
+ if ( $curuser->access_right('Bulk change customer packages') ) {
+ $text .= include('/elements/init_overlib.html').
+ include( '/elements/popup_link.html',
+ 'label' => 'Change these packages',
+ 'action' => "${p}misc/bulk_change_pkg.cgi?$query",
+ 'actionlabel' => 'Change Packages',
+ 'width' => 569,
+ 'height' => 210,
+ ). '<BR>';
+
+ if ( $curuser->access_right('Edit customer package dates') ) {
+ $text .= include( '/elements/popup_link.html',
+ 'label' => 'Increment next bill date',
+ 'action' => "${p}misc/bulk_pkg_increment_bill.cgi?$query",
+ 'actionlabel' => 'Increment Bill Date',
+ 'width' => 569,
+ 'height' => 210,
+ ). '<BR>';
+ }
+ }
+ return $text;
};
</%init>
diff --git a/httemplate/search/elements/cust_pay_or_refund.html b/httemplate/search/elements/cust_pay_or_refund.html
index b1296d1b0..4f83d0ab6 100755
--- a/httemplate/search/elements/cust_pay_or_refund.html
+++ b/httemplate/search/elements/cust_pay_or_refund.html
@@ -29,6 +29,15 @@ Examples:
'redirect_empty' => $redirect_empty,
)
+ include( 'elements/cust_pay_or_refund.html',
+ 'table' => 'h_cust_pay',
+ 'amount_field' => 'paid',
+ 'name_singular' => 'payment',
+ 'name_verb' => 'paid',
+ 'pre_header' => [ 'Transaction', 'By' ],
+ 'pre_fields' => [ 'history_action', 'history_user' ],
+ )
+
</%doc>
<% include( 'search.html',
'title' => $title,
@@ -37,46 +46,12 @@ Examples:
'count_query' => $count_query,
'count_addl' => [ '$%.2f total '.$opt{name_verb}, ],
'redirect_empty' => $opt{'redirect_empty'},
- 'header' => [ "\u$name_singular",
- 'Amount',
- 'Date',
- @header,
- FS::UI::Web::cust_header(),
- ],
- 'fields' => [
- 'payby_payinfo_pretty',
- sub { sprintf('$%.2f', shift->$amount_field() ) },
- sub { time2str('%b %d %Y', shift->_date ) },
- @fields,
- \&FS::UI::Web::cust_fields,
- ],
- #'align' => 'lrrrll',
- 'align' => 'rrr'.
- join('', map 'c', @fields ).
- FS::UI::Web::cust_aligns(),
- 'links' => [
- $link,
- $link,
- $link,
- ( map '', @fields ),
- ( map { $_ ne 'Cust. Status' ? $cust_link : '' }
- FS::UI::Web::cust_header()
- ),
- ],
- 'color' => [
- '',
- '',
- '',
- ( map '', @fields ),
- FS::UI::Web::cust_colors(),
- ],
- 'style' => [
- '',
- '',
- '',
- ( map '', @fields ),
- FS::UI::Web::cust_styles(),
- ],
+ 'header' => \@header,
+ 'fields' => \@fields,
+ 'align' => $align,
+ 'links' => \@links,
+ 'color' => \@color,
+ 'style' => \@style,
)
%>
<%init>
@@ -88,16 +63,69 @@ my $curuser = $FS::CurrentUser::CurrentUser;
die "access denied"
unless $curuser->access_right('Financial reports');
-my $thing = $opt{'thing'};
+my $table = $opt{'table'} || 'cust_'.$opt{'thing'};
+
my $amount_field = $opt{'amount_field'};
my $name_singular = $opt{'name_singular'};
my $title = "\u$name_singular Search Results";
+my $link = '';
+if ( ( $curuser->access_right('View invoices') #XXX for now
+ || $curuser->access_right('View customer payments')
+ )
+ && ! $opt{'disable_link'}
+ )
+{
+
+ my $key;
+ my $q = '';
+ if ( $table eq 'cust_pay_void' ) {
+ $key = 'paynum';
+ $q .= 'void=1;';
+ } elsif ( $table eq /^cust_(\w+)$/ ) {
+ $key = $1.'num';
+ }
+
+ if ( $key ) {
+ $q .= "$key=";
+ $link = [ "${p}view/$table.html?$q", $key ]
+ }
+}
+
+my $cust_link = sub {
+ my $cust_thing = shift;
+ $cust_thing->cust_main_custnum
+ ? [ "${p}view/cust_main.cgi?", 'custnum' ]
+ : '';
+};
+
my @header = ();
my @fields = ();
+my $align = '';
+my @links = ();
+if ( $opt{'pre_header'} ) {
+ push @header, @{ $opt{'pre_header'} };
+ $align .= 'c' x scalar(@{ $opt{'pre_header'} });
+ push @links, map '', @{ $opt{'pre_header'} };
+ push @fields, @{ $opt{'pre_fields'} };
+}
+
+push @header, "\u$name_singular",
+ 'Amount',
+ 'Date',
+;
+$align .= 'rrr';
+push @links, '', '', '';
+push @fields, 'payby_payinfo_pretty',
+ sub { sprintf('$%.2f', shift->$amount_field() ) },
+ sub { time2str('%b %d %Y', shift->_date ) },
+;
+
unless ( $opt{'disable_by'} ) {
push @header, 'By';
+ $align .= 'c';
+ push @links, '';
push @fields, sub { my $o = shift->otaker;
$o = 'auto billing' if $o eq 'fs_daily';
$o = 'customer self-service' if $o eq 'fs_selfservice';
@@ -105,6 +133,14 @@ unless ( $opt{'disable_by'} ) {
};
}
+push @header, FS::UI::Web::cust_header();
+$align .= FS::UI::Web::cust_aligns();
+push @links, map { $_ ne 'Cust. Status' ? $cust_link : '' }
+ FS::UI::Web::cust_header();
+my @color = ( ( map '', @fields ), FS::UI::Web::cust_colors() );
+my @style = ( ( map '', @fields ), FS::UI::Web::cust_styles() );
+push @fields, \&FS::UI::Web::cust_fields;
+
push @header, @{ $opt{'addl_header'} }
if $opt{'addl_header'};
push @fields, @{ $opt{'addl_fields'} }
@@ -132,7 +168,7 @@ if ( $cgi->param('magic') ) {
$cgi->param('payby') =~
/^(CARD|CHEK|BILL|PREP|CASH|WEST|MCRD)(-(VisaMC|Amex|Discover|Maestro))?$/
or die "illegal payby ". $cgi->param('payby');
- push @search, "cust_$thing.payby = '$1'";
+ push @search, "$table.payby = '$1'";
if ( $3 ) {
my $cardtype = $3;
@@ -141,53 +177,53 @@ if ( $cgi->param('magic') ) {
if ( $cardtype eq 'VisaMC' ) {
#avoid posix regexes for portability
$search =
- " ( ( substring(cust_$thing.payinfo from 1 for 1) = '4' ".
- " AND substring(cust_$thing.payinfo from 1 for 4) != '4936' ".
- " AND substring(cust_$thing.payinfo from 1 for 6) ".
+ " ( ( substring($table.payinfo from 1 for 1) = '4' ".
+ " AND substring($table.payinfo from 1 for 4) != '4936' ".
+ " AND substring($table.payinfo from 1 for 6) ".
" NOT SIMILAR TO '49030[2-9]' ".
- " AND substring(cust_$thing.payinfo from 1 for 6) ".
+ " AND substring($table.payinfo from 1 for 6) ".
" NOT SIMILAR TO '49033[5-9]' ".
- " AND substring(cust_$thing.payinfo from 1 for 6) ".
+ " AND substring($table.payinfo from 1 for 6) ".
" NOT SIMILAR TO '49110[1-2]' ".
- " AND substring(cust_$thing.payinfo from 1 for 6) ".
+ " AND substring($table.payinfo from 1 for 6) ".
" NOT SIMILAR TO '49117[4-9]' ".
- " AND substring(cust_$thing.payinfo from 1 for 6) ".
+ " AND substring($table.payinfo from 1 for 6) ".
" NOT SIMILAR TO '49118[1-2]' ".
" )".
- " OR substring(cust_$thing.payinfo from 1 for 2) = '51' ".
- " OR substring(cust_$thing.payinfo from 1 for 2) = '52' ".
- " OR substring(cust_$thing.payinfo from 1 for 2) = '53' ".
- " OR substring(cust_$thing.payinfo from 1 for 2) = '54' ".
- " OR substring(cust_$thing.payinfo from 1 for 2) = '54' ".
- " OR substring(cust_$thing.payinfo from 1 for 2) = '55' ".
- " OR substring(cust_$thing.payinfo from 1 for 2) = '36' ". #Diner's int'l processed as Visa/MC inside US
+ " OR substring($table.payinfo from 1 for 2) = '51' ".
+ " OR substring($table.payinfo from 1 for 2) = '52' ".
+ " OR substring($table.payinfo from 1 for 2) = '53' ".
+ " OR substring($table.payinfo from 1 for 2) = '54' ".
+ " OR substring($table.payinfo from 1 for 2) = '54' ".
+ " OR substring($table.payinfo from 1 for 2) = '55' ".
+ " OR substring($table.payinfo from 1 for 2) = '36' ". #Diner's int'l processed as Visa/MC inside US
" ) ";
} elsif ( $cardtype eq 'Amex' ) {
$search =
- " ( substring(cust_$thing.payinfo from 1 for 2 ) = '34' ".
- " OR substring(cust_$thing.payinfo from 1 for 2 ) = '37' ".
+ " ( substring($table.payinfo from 1 for 2 ) = '34' ".
+ " OR substring($table.payinfo from 1 for 2 ) = '37' ".
" ) ";
} elsif ( $cardtype eq 'Discover' ) {
$search =
- " ( substring(cust_$thing.payinfo from 1 for 4 ) = '6011' ".
- " OR substring(cust_$thing.payinfo from 1 for 2 ) = '65' ".
- " OR substring(cust_$thing.payinfo from 1 for 3 ) = '622' ". #China Union Pay processed as Discover outside CN
+ " ( substring($table.payinfo from 1 for 4 ) = '6011' ".
+ " OR substring($table.payinfo from 1 for 2 ) = '65' ".
+ " OR substring($table.payinfo from 1 for 3 ) = '622' ". #China Union Pay processed as Discover outside CN
" ) ";
} elsif ( $cardtype eq 'Maestro' ) {
$search =
- " ( substring(cust_$thing.payinfo from 1 for 2 ) = '63' ".
- " OR substring(cust_$thing.payinfo from 1 for 2 ) = '67' ".
- " OR substring(cust_$thing.payinfo from 1 for 6 ) = '564182' ".
- " OR substring(cust_$thing.payinfo from 1 for 4 ) = '4936' ".
- " OR substring(cust_$thing.payinfo from 1 for 6 ) ".
+ " ( substring($table.payinfo from 1 for 2 ) = '63' ".
+ " OR substring($table.payinfo from 1 for 2 ) = '67' ".
+ " OR substring($table.payinfo from 1 for 6 ) = '564182' ".
+ " OR substring($table.payinfo from 1 for 4 ) = '4936' ".
+ " OR substring($table.payinfo from 1 for 6 ) ".
" SIMILAR TO '49030[2-9]' ".
- " OR substring(cust_$thing.payinfo from 1 for 6 ) ".
+ " OR substring($table.payinfo from 1 for 6 ) ".
" SIMILAR TO '49033[5-9]' ".
- " OR substring(cust_$thing.payinfo from 1 for 6 ) ".
+ " OR substring($table.payinfo from 1 for 6 ) ".
" SIMILAR TO '49110[1-2]' ".
- " OR substring(cust_$thing.payinfo from 1 for 6 ) ".
+ " OR substring($table.payinfo from 1 for 6 ) ".
" SIMILAR TO '49117[4-9]' ".
- " OR substring(cust_$thing.payinfo from 1 for 6 ) ".
+ " OR substring($table.payinfo from 1 for 6 ) ".
" SIMILAR TO '49118[1-2]' ".
" ) ";
} else {
@@ -195,10 +231,10 @@ if ( $cgi->param('magic') ) {
}
my $masksearch = $search;
- $masksearch =~ s/cust_$thing\.payinfo/cust_$thing.paymask/gi;
+ $masksearch =~ s/$table\.payinfo/$table.paymask/gi;
push @search,
- "( $search OR ( cust_$thing.paymask IS NOT NULL AND $masksearch ) )";
+ "( $search OR ( $table.paymask IS NOT NULL AND $masksearch ) )";
}
}
@@ -206,11 +242,11 @@ if ( $cgi->param('magic') ) {
if ( $cgi->param('payinfo') ) {
$cgi->param('payinfo') =~ /^\s*(\d+)\s*$/
or die "illegal payinfo ". $cgi->param('payinfo');
- push @search, "cust_$thing.payinfo = '$1'";
+ push @search, "$table.payinfo = '$1'";
}
if ( $cgi->param('otaker') =~ /^(\w+)$/ ) {
- push @search, "cust_$thing.otaker = '$1'";
+ push @search, "$table.otaker = '$1'";
}
#for cust_pay_pending... statusNOT=done
@@ -222,7 +258,7 @@ if ( $cgi->param('magic') ) {
push @search, "_date >= $beginning ",
"_date <= $ending";
- if ( $thing eq 'pay_void' ) {
+ if ( $table eq 'cust_pay_void' ) {
my($v_beginning, $v_ending) =
FS::UI::Web::parse_beginning_ending($cgi, 'void');
push @search, "void_date >= $v_beginning ",
@@ -246,19 +282,34 @@ if ( $cgi->param('magic') ) {
die "unknown search magic: ". $cgi->param('magic');
}
+ #for the history search
+ if ( $cgi->param('history_action') =~ /^([\w,]+)$/ ) {
+ my @history_action = split(/,/, $1);
+ push @search, 'history_action IN ('.
+ join(',', map "'$_'", @history_action ). ')';
+ }
+
+ if ( $cgi->param('history_date_beginning')
+ || $cgi->param('history_date_ending') ) {
+ my($h_beginning, $h_ending) =
+ FS::UI::Web::parse_beginning_ending($cgi, 'history_date');
+ push @search, "history_date >= $h_beginning ",
+ "history_date <= $h_ending";
+ }
+
#here is the agent virtualization
push @search, $curuser->agentnums_sql;
my $search = ' WHERE '. join(' AND ', @search);
$count_query = "SELECT COUNT(*), SUM($amount_field) ".
- "FROM cust_$thing LEFT JOIN cust_main USING ( custnum )".
+ "FROM $table LEFT JOIN cust_main USING ( custnum )".
$search;
$sql_query = {
- 'table' => "cust_$thing",
+ 'table' => $table,
'select' => join(', ',
- "cust_$thing.*",
+ "$table.*",
'cust_main.custnum as cust_main_custnum',
FS::UI::Web::cust_sql_fields(),
),
@@ -277,12 +328,12 @@ if ( $cgi->param('magic') ) {
$cgi->param('payby') =~ /^(\w+)$/ or die "illegal payby";
my $payby = $1;
- $count_query = "SELECT COUNT(*), SUM($amount_field) FROM cust_$thing".
+ $count_query = "SELECT COUNT(*), SUM($amount_field) FROM $table".
" WHERE payinfo = '$payinfo' AND payby = '$payby'".
" AND ". $curuser->agentnums_sql;
$sql_query = {
- 'table' => "cust_$thing",
+ 'table' => $table,
'hashref' => { 'payinfo' => $payinfo,
'payby' => $payby },
'extra_sql' => $curuser->agentnums_sql.
@@ -291,23 +342,4 @@ if ( $cgi->param('magic') ) {
}
-my $link = '';
-if ( ( $curuser->access_right('View invoices') #XXX for now
- || $curuser->access_right('View customer payments')
- )
- && ! $opt{'disable_link'}
- )
-{
- my $key = $thing eq 'pay_void' ? 'paynum' : $thing.'num';
- my $q = ( $thing eq 'pay_void' ? 'void=1;' : '' ). "$key=";
- $link = [ "${p}view/cust_$thing.html?$q", $key ]
-}
-
-my $cust_link = sub {
- my $cust_thing = shift;
- $cust_thing->cust_main_custnum
- ? [ "${p}view/cust_main.cgi?", 'custnum' ]
- : '';
-};
-
</%init>
diff --git a/httemplate/search/elements/search-html.html b/httemplate/search/elements/search-html.html
index c0bb721f7..6b915a617 100644
--- a/httemplate/search/elements/search-html.html
+++ b/httemplate/search/elements/search-html.html
@@ -144,11 +144,6 @@
% $cgi->param('_type', 'html-print');
as <A HREF="<% $cgi->self_url %>">printable copy</A>
- <% $opt{'extra_choices_callback'}
- ? &{$opt{'extra_choices_callback'}}($cgi->query_string)
- : ''
- %>
-
</TD>
% $cgi->param('_type', "html" );
% }
diff --git a/httemplate/search/h_cust_pay.html b/httemplate/search/h_cust_pay.html
new file mode 100755
index 000000000..99330fadd
--- /dev/null
+++ b/httemplate/search/h_cust_pay.html
@@ -0,0 +1,9 @@
+<% include( 'elements/cust_pay_or_refund.html',
+ 'table' => 'h_cust_pay',
+ 'amount_field' => 'paid',
+ 'name_singular' => 'payment',
+ 'name_verb' => 'paid',
+ 'pre_header' => [ 'Transaction', 'By' ],
+ 'pre_fields' => [ 'history_action', 'history_user' ],
+ )
+%>
diff --git a/httemplate/search/inventory_item.html b/httemplate/search/inventory_item.html
index cd37e267b..ba449ecd7 100644
--- a/httemplate/search/inventory_item.html
+++ b/httemplate/search/inventory_item.html
@@ -9,6 +9,7 @@
'hashref' => { 'classnum' => $classnum },
'select' => join(', ',
'inventory_item.*',
+ 'part_svc.svcdb',
'cust_main.custnum',
FS::UI::Web::cust_sql_fields(),
),
@@ -103,7 +104,16 @@ my $count_query =
my $link = sub {
my $inventory_item = shift;
if ( $inventory_item->svcnum ) {
- [ "${p}view/svc_acct.cgi?", 'svcnum' ];
+
+ #[ "${p}view/svc_acct.cgi?", 'svcnum' ];
+ my $url = svc_url(
+ 'm' => $m,
+ 'action' => 'view',
+ #'svcdb' => $inventory_item->cust_svc->part_svc->svcdb,
+ 'svcdb' => $inventory_item->svcdb, #we have it from the joined search
+ 'query' => '',
+ );
+ [ $url, 'svcnum' ];
} else {
'';
}
diff --git a/httemplate/search/mailinglistmember.html b/httemplate/search/mailinglistmember.html
new file mode 100644
index 000000000..ee395f416
--- /dev/null
+++ b/httemplate/search/mailinglistmember.html
@@ -0,0 +1,57 @@
+<% include('elements/search.html',
+ 'title' => $title,
+ 'name_singular' => 'member',
+ 'query' => $query,
+ 'count_query' => $count_query,
+ 'header' => [ 'Email address' ],
+ 'fields' => [ $email_sub, ], #just this one for now
+ 'html_init' => $html_init,
+ )
+%>
+<%init>
+
+#XXX ACL:
+#make sure the mailing list is attached to a customer service i can see/view
+
+$cgi->param('listnum') =~ /^(\d+)$/ or die 'illegal listnum';
+my $listnum = $1;
+
+my $mailinglist = qsearchs('mailinglist', { 'listnum' => $listnum })
+ or die "unknown listnum $listnum";
+my $title = $mailinglist->listname. ' mailing list';
+
+my $svc_mailinglist = $mailinglist->svc_mailinglist;
+
+my $query = {
+ 'table' => 'mailinglistmember',
+ 'hashref' => { 'listnum' => $listnum },
+};
+
+my $count_query = "SELECT COUNT(*) FROM mailinglistmember WHERE listnum = $listnum";
+
+my $email_sub = sub {
+ my $member = shift;
+ my $r = $member->email; #just this one for now
+ my $a = qq[<A HREF="javascript:areyousure('$r', ]. $member->membernum. ')">';
+ $r .= " (${a}remove</A>)";
+ $r;
+};
+
+my $html_init = '';
+if ( $svc_mailinglist ) {
+ my $svcnum = $svc_mailinglist->svcnum;
+ my $label = encode_entities($svc_mailinglist->label);
+ $html_init .= qq[<A HREF="${p}/view/svc_mailinglist.cgi?$svcnum">View customer mailing list: $label</A><BR><BR>];
+}
+
+$html_init .= <<"END";
+<SCRIPT TYPE="text/javascript">
+ function areyousure(email,membernum) {
+ if ( confirm('Are you sure you want to remove ' + email + ' from this mailing list?') )
+ window.location.href="${p}misc/delete-mailinglistmember.html?" + membernum;
+
+ }
+</SCRIPT>
+END
+
+</%init>
diff --git a/httemplate/search/part_pkg.html b/httemplate/search/part_pkg.html
new file mode 100644
index 000000000..87237c7cf
--- /dev/null
+++ b/httemplate/search/part_pkg.html
@@ -0,0 +1,213 @@
+<% include( 'elements/search.html',
+ 'title' => $title,
+ 'name' => $name,
+ 'header' => \@header,
+ 'query' => { 'select' => $select,
+ 'table' => 'part_pkg',
+ 'addl_from' => $addl_from,
+ 'hashref' => {},
+ 'extra_sql' => $extra_sql,
+ 'order_by' => "ORDER BY $order_by",
+ },
+ 'count_query' => $count_query,
+ 'fields' => \@fields,
+ 'links' => \@links,
+ 'align' => $align,
+ )
+%>
+<%init>
+
+#this is about reports about packages definitions (starting w/commission ones)
+# while browse/part_pkg.cgi is config->package definitions
+
+my $curuser = $FS::CurrentUser::CurrentUser;
+die "access denied"
+ unless $curuser->access_right('Financial reports');
+
+my $conf = new FS::Conf;
+my $money_char = $conf->config('money_char') || '$';
+
+my $title = 'Package definition report';
+my $name = 'package definition';
+
+my $select = '';
+my $addl_from = '';
+my @where = ();
+my @order_by = ();
+my @header = ();
+my @fields = ();
+my @links = ();
+my $align = '';
+
+if (1) { #commission reports
+
+ if (1) { #employee commission reports
+
+ $select = 'DISTINCT usernum, username, part_pkg.*';
+
+ $addl_from .= ' CROSS JOIN access_user ';
+
+ if ( $cgi->param('otaker') =~ /^(\w+)$/ ) {
+
+ #XXX in this context, agent virt for employees, not package defs
+ my $access_user = qsearchs('access_user', { 'username' => $1 })
+ or die "unknown usernum";
+
+ $title = $access_user->name;
+
+ } else {
+
+ push @header, 'Employee';
+ push @fields, sub { shift->get('username'); }; #access_user->name
+ push @links, ''; #link to employee edit w/ACL?
+ $align .= 'c';
+
+ push @order_by, 'otaker';
+
+ $title = 'Employee';
+
+ }
+
+ } elsif (0) { #agent commission reports
+
+ if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
+
+ #agent virt
+ my $agent = qsearchs('agent', { 'agentnum' => $1 })
+ or die "unknown agentnum";
+
+ $title = $agent->agent;
+
+ push @header, 'Agent';
+ push @fields, sub { 'XXXagent' };
+ push @links, ''; #link to agent edit w/ACL?
+ $align .= 'c';
+
+ push @order_by, 'agentnum'; #join to agent? we're mostly interested in grouping rather than order
+
+ } else {
+ $title = 'Agent';
+ }
+
+ }
+
+ $title .= ' commission report';
+ $name = "commissionable $name";
+
+
+}
+
+push @header, 'Package definition';
+push @fields, 'pkg_comment';
+push @links, ''; #link to pkg definition edit w/ACL?
+$align .= 'l';
+
+if (1) { #commission reports
+
+ my($beginning, $ending) = FS::UI::Web::parse_beginning_ending($cgi);
+
+ my $match = '';
+ if (1) { #employee commission reports
+ $match = 'cust_pkg.otaker = access_user.username';
+ } elsif (0) { #agent commission reports
+ $match = 'cust_main.agentnum = agent.agentnum';
+ }
+
+ my $from_cust_bill_pkg_where = "FROM cust_bill_pkg
+ LEFT JOIN ( cust_bill ) USING ( invnum )
+ LEFT JOIN ( cust_pkg ) USING ( pkgnum )
+ WHERE cust_bill_pkg.pkgnum > 0
+ AND cust_bill._date >= $beginning
+ AND cust_bill._date <= $ending ";
+ my $and = " AND $match
+ AND cust_pkg.pkgpart = part_pkg.pkgpart";
+
+ push @where, "EXISTS( SELECT 1 $from_cust_bill_pkg_where $and )";
+
+ push @header, '#'; # of sales';
+ push @links, ''; #link to detail report
+ $align .= 'r';
+ push @fields, 'num_cust_pkg';
+ $select .= ", ( SELECT COUNT(DISTINCT pkgnum)
+ $from_cust_bill_pkg_where $and )
+ AS num_cust_pkg";
+# push @fields, sub {
+# my $part_pkg = shift;
+# my $sql =
+# #"SELECT COUNT( SELECT DISTINCT pkgnum $from_cust_bill_pkg_where )";
+# "SELECT COUNT(DISTINCT pkgnum) $from_cust_bill_pkg_where";
+# my $sth = dbh->prepare($sql) or die dbh->errstr;
+# $sth->execute or die $sth->errstr;
+# $sth->fetchrow_arrayref->[0];
+# };
+
+ push @header, 'Sales';
+ push @links, ''; #link to detail report
+ $align .= 'r';
+# push @fields, sub { $money_char. sprintf('%.2f', shift->get('pkg_sales')); };
+# $select .=
+# ", SUM( SELECT setup+recur $from_cust_bill_pkg_where ) AS pkg_sales";
+ push @fields, sub {
+ my $part_pkg = shift;
+ my $sql = "SELECT SUM(cust_bill_pkg.setup+cust_bill_pkg.recur) $from_cust_bill_pkg_where AND pkgpart = ? AND ";
+ my @arg = ($part_pkg->pkgpart);
+ if (1) { #employee commission reports
+ $sql .= 'otaker = ?';
+ push @arg, $part_pkg->get('username');
+ } elsif (0) { #agent commission reports
+ $match = 'cust_main.agentnum = agent.agentnum';
+ }
+ my $sth = dbh->prepare($sql) or die dbh->errstr;
+ $sth->execute(@arg) or die $sth->errstr;
+ $money_char. sprintf('%.2f', $sth->fetchrow_arrayref->[0] );
+ };
+
+ push @header, 'Commission';
+ push @links, ''; #link to detail report
+ $align .= 'r';
+ #push @fields, sub { $money_char. sprintf('%.2f', shift->get('pkg_commission')); };
+ push @fields, sub {
+ my $part_pkg = shift;
+ my $sql = "SELECT SUM(amount) FROM cust_credit
+ LEFT JOIN cust_event USING ( eventnum )
+ LEFT JOIN part_event USING ( eventpart )
+ LEFT JOIN cust_pkg ON ( cust_event.tablenum = cust_pkg.pkgnum )
+ WHERE eventnum IS NOT NULL
+ AND action IN ( 'pkg_employee_credit',
+ 'pkg_employee_credit_pkg'
+ )
+ AND cust_credit._date >= $beginning
+ AND cust_credit._date <= $ending
+ AND pkgpart = ?
+ AND cust_credit.custnum = ?
+ ";
+ my @arg = ($part_pkg->pkgpart);
+ if (1) { #employee commission reports
+
+ #XXX in this context, agent virt for employees, not package defs
+ my $access_user = qsearchs('access_user', { 'username' => $part_pkg->get('username') })
+ or die "unknown usernum";
+
+ return 0 unless $access_user->user_custnum;
+ push @arg, $access_user->user_custnum;
+
+ } elsif (0) { #agent commission reports
+ push @arg, 'XXXagent_custnum'; #$agent->agent_custnum
+ }
+ my $sth = dbh->prepare($sql) or die dbh->errstr;
+ $sth->execute(@arg) or die $sth->errstr;
+ $money_char. sprintf('%.2f', $sth->fetchrow_arrayref->[0] );
+
+ };
+
+}
+
+push @order_by, 'pkgpart'; #pkg?
+
+$select ||= 'part_pkg.*';
+my $extra_sql = scalar(@where) ? 'WHERE ' . join(' AND ', @where) : '';
+my $order_by = join(', ', @order_by);
+
+my $count_query = "SELECT COUNT(*) FROM part_pkg $addl_from $extra_sql";
+
+</%init>
diff --git a/httemplate/search/report_cust_main-zip.html b/httemplate/search/report_cust_main-zip.html
index aa802f302..00cb9ed2c 100644
--- a/httemplate/search/report_cust_main-zip.html
+++ b/httemplate/search/report_cust_main-zip.html
@@ -20,7 +20,7 @@
</TR>
<TR>
- <TD ALIGN="right">Show customers with status:</TD>
+ <TD ALIGN="right">Show customers with status</TD>
<TD>
<SELECT NAME="status">
<OPTION VALUE="">all
@@ -33,6 +33,23 @@
</TD>
</TR>
+ <TR>
+ <TD ALIGN="right">Limit to customers with provisioned service</TD>
+ <TD>
+ <SELECT NAME="svcdb">
+ <OPTION VALUE="">(no)
+ <OPTION VALUE="svc_acct">Account (svc_acct)
+ <OPTION VALUE="svc_broadband">Broadband service (svc_broadband)
+ <OPTION VALUE="svc_domain">Domain (svc_domain)
+ <OPTION VALUE="svc_external">External service (svc_external)
+ <OPTION VALUE="svc_forward">Mail forward (svc_foward)
+ <OPTION VALUE="svc_pbx">PBX (svc_pbx)
+ <OPTION VALUE="svc_phone">Phone number (svc_phone)
+ <OPTION VALUE="svc_www">Hosting (svc_www)
+ </SELECT>
+ </TD>
+ </TR>
+
<% include( '/elements/tr-select-agent.html',
'curr_value' => scalar( $cgi->param('agentnum') ),
'label' => 'For agent: ',
diff --git a/httemplate/search/report_employee_commission.html b/httemplate/search/report_employee_commission.html
new file mode 100644
index 000000000..a79630a76
--- /dev/null
+++ b/httemplate/search/report_employee_commission.html
@@ -0,0 +1,34 @@
+<% include('/elements/header.html', 'Employee commission report' ) %>
+
+<FORM ACTION="part_pkg.html">
+
+<TABLE BGCOLOR="#cccccc" CELLSPACING=0>
+
+%#
+%# <% include( '/elements/tr-select-agent.html',
+%# 'curr_value' => scalar( $cgi->param('agentnum') ),
+%# 'disable_empty' => 0,
+%# )
+%# %>
+%#
+
+%#2.1
+<% include( '/elements/tr-select-user.html' ) %>
+
+%#1.9
+%# <%include( '/elements/tr-select-otaker.html' ) %>
+
+<% include( '/elements/tr-input-beginning_ending.html', ) %>
+
+</TABLE>
+
+<BR>
+<INPUT TYPE="submit" VALUE="Get Report">
+
+<% include('/elements/footer.html') %>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');
+
+</%init>
diff --git a/httemplate/search/report_h_cust_pay.html b/httemplate/search/report_h_cust_pay.html
new file mode 100644
index 000000000..4e47b3831
--- /dev/null
+++ b/httemplate/search/report_h_cust_pay.html
@@ -0,0 +1,124 @@
+<% include('/elements/header.html', 'Payment transaction history' ) %>
+
+<FORM ACTION="h_cust_pay.html" METHOD="GET">
+<INPUT TYPE="hidden" NAME="magic" VALUE="_date">
+
+<TABLE BGCOLOR="#cccccc" CELLSPACING=0>
+
+ <TR>
+ <TH BGCOLOR="#e8e8e8" COLSPAN=2 ALIGN="left">
+ <FONT SIZE="+1">Search options</FONT>
+ </TH>
+ </TR>
+
+%#history stuff
+ <TR>
+ <TD ALIGN="right">Search transactions for: </TD>
+ <TD>
+ <SELECT NAME="history_action">
+ <OPTION VALUE="insert,replace_old,replace_new,delete">(all changes)
+ <OPTION VALUE="delete">Insertions
+ <OPTION VALUE="replace_old,replace_new">Replacements
+ <OPTION VALUE="delete">Deletions
+ </SELECT>
+ </TD>
+ </TR>
+
+ <TR>
+ <TD ALIGN="right" VALIGN="center">Transaction date: </TD>
+ <TD>
+ <TABLE>
+ <% include( '/elements/tr-input-beginning_ending.html',
+ prefix => 'history_date',
+ layout => 'horiz',
+ )
+ %>
+ </TABLE>
+ </TD>
+ </TR>
+%#eo history stuff
+
+ <TR>
+ <TD ALIGN="right">Payments of type: </TD>
+ <TD>
+ <SELECT NAME="payby" onChange="payby_changed(this)">
+ <OPTION VALUE="">all</OPTION>
+ <OPTION VALUE="CARD">credit card (all)</OPTION>
+ <OPTION VALUE="CARD-VisaMC">credit card (Visa/MasterCard)</OPTION>
+ <OPTION VALUE="CARD-Amex">credit card (American Express)</OPTION>
+ <OPTION VALUE="CARD-Discover">credit card (Discover)</OPTION>
+ <OPTION VALUE="CARD-Maestro">credit card (Maestro/Switch/Solo)</OPTION>
+ <OPTION VALUE="CHEK">electronic check / ACH</OPTION>
+ <OPTION VALUE="BILL">check</OPTION>
+ <OPTION VALUE="PREP">prepaid card</OPTION>
+ <OPTION VALUE="CASH">cash</OPTION>
+ <OPTION VALUE="WEST">Western Union</OPTION>
+ <OPTION VALUE="MCRD">manual credit card</OPTION>
+ </SELECT>
+ </TD>
+ </TR>
+
+ <SCRIPT TYPE="text/javascript">
+
+ function payby_changed(what) {
+ if ( what.options[what.selectedIndex].value == 'BILL' ) {
+ document.getElementById('checkno_caption').style.color = '#000000';
+ what.form.payinfo.disabled = false;
+ what.form.payinfo.style.backgroundColor = '#ffffff';
+ } else {
+ document.getElementById('checkno_caption').style.color = '#bbbbbb';
+ what.form.payinfo.disabled = true;
+ what.form.payinfo.style.backgroundColor = '#dddddd';
+ }
+ }
+
+ </SCRIPT>
+
+ <TR>
+ <TD ALIGN="right"><FONT ID="checkno_caption" COLOR="#bbbbbb">Check #: </FONT></TD>
+ <TD>
+ <INPUT TYPE="text" NAME="payinfo" DISABLED STYLE="background-color: #dddddd">
+ </TD>
+ </TR>
+
+ <% include( '/elements/tr-select-agent.html',
+ 'curr_value' => scalar($cgi->param('agentnum')),
+ 'label' => 'for agent: ',
+ 'disable_empty' => 0,
+ )
+ %>
+
+ <% include( '/elements/tr-select-otaker.html' ) %>
+
+ <TR>
+ <TD ALIGN="right" VALIGN="center">Payment</TD>
+ <TD>
+ <TABLE>
+ <% include( '/elements/tr-input-beginning_ending.html',
+ layout => 'horiz',
+ )
+ %>
+ </TABLE>
+ </TD>
+ </TR>
+
+ <% include( '/elements/tr-input-lessthan_greaterthan.html',
+ 'label' => 'Amount',
+ 'field' => 'paid',
+ )
+ %>
+
+</TABLE>
+
+<BR>
+<INPUT TYPE="submit" VALUE="Get Report">
+
+</FORM>
+
+<% include('/elements/footer.html') %>
+<%init>
+
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');
+
+</%init>
diff --git a/httemplate/search/report_prepaid_income.cgi b/httemplate/search/report_prepaid_income.cgi
index ce928b81c..c0e2b807e 100644
--- a/httemplate/search/report_prepaid_income.cgi
+++ b/httemplate/search/report_prepaid_income.cgi
@@ -1,36 +1,86 @@
<% include("/elements/header.html", 'Prepaid Income (Unearned Revenue) Report') %>
-<% table() %>
- <TR>
- <TH>Actual Unearned Revenue</TH>
- <TH>Legacy Unearned Revenue</TH>
- </TR>
+<% include( '/elements/table-grid.html' ) %>
+
<TR>
- <TD ALIGN="right">$<% $total %>
- <TD ALIGN="right">
- <% $now == $time ? "\$$total_legacy" : '<i>N/A</i>'%>
- </TD>
+% if ( scalar(@agentnums) > 1 ) {
+ <TH CLASS="grid" BGCOLOR="#cccccc">Agent</TH>
+% }
+ <TH CLASS="grid" BGCOLOR="#cccccc"><% $actual_label %>Unearned Revenue</TH>
+% if ( $legacy ) {
+ <TH CLASS="grid" BGCOLOR="#cccccc">Legacy Unearned Revenue</TH>
+% }
</TR>
+% my $bgcolor1 = '#eeeeee';
+% my $bgcolor2 = '#ffffff';
+% my $bgcolor;
+%
+% push @agentnums, 0 unless scalar(@agentnums) < 2;
+% foreach my $agentnum (@agentnums) {
+%
+% if ( $bgcolor eq $bgcolor1 ) {
+% $bgcolor = $bgcolor2;
+% } else {
+% $bgcolor = $bgcolor1;
+% }
+%
+% my $alink = $agentnum ? "$link;agentnum=$agentnum" : $link;
+%
+% my $agent_name = 'Total';
+% if ( $agentnum ) {
+% my $agent = qsearchs('agent', { 'agentnum' => $agentnum })
+% or die "unknown agentnum $agentnum";
+% $agent_name = $agent->agent;
+% }
+
+ <TR>
+
+% if ( scalar(@agentnums) > 1 ) {
+ <TD CLASS="grid" BGCOLOR="<% $bgcolor %>"><% $agent_name |h %></TD>
+% }
+
+ <TD ALIGN="right" CLASS="grid" BGCOLOR="<% $bgcolor %>"><A HREF="<% $alink %>"><% $money_char %><% $total{$agentnum} %></A></TD>
+
+% if ( $legacy ) {
+ <TD ALIGN="right" CLASS="grid" BGCOLOR="<% $bgcolor %>">
+ <% $now == $time ? $money_char.$total_legacy{$agentnum} : '<i>N/A</i>'%>
+ </TD>
+% }
+
+ </TR>
+
+% }
+
</TABLE>
+
<BR>
-Actual unearned revenue is the amount of unearned revenue Freeside has
-actually invoiced for packages with longer-than monthly terms.
-<BR><BR>
-Legacy unearned revenue is the amount of unearned revenue represented by
-customer packages. This number may be larger than actual unearned
-revenue if you have imported longer-than monthly customer packages from
-a previous billing system.
-</BODY>
-</HTML>
+<% $actual_label %><% $actual_label ? 'u' : 'U' %>nearned revenue
+is the amount of unearned revenue
+<% $actual_label ? 'Freeside has actually' : '' %>
+invoiced for packages with longer-than monthly terms.
+
+% if ( $legacy ) {
+ <BR><BR>
+ Legacy unearned revenue is the amount of unearned revenue represented by
+ customer packages. This number may be larger than actual unearned
+ revenue if you have imported longer-than monthly customer packages from
+ a previous billing system.
+% }
+
+<% include('/elements/footer.html') %>
<%init>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');
-#doesn't yet deal with daily/weekly packages
+my $conf = new FS::Conf;
+my $money_char = $conf->config('money_char') || '$';
+
+my $legacy = $conf->exists('enable_legacy_prepaid_income');
+my $actual_label = $legacy ? 'Actual ' : '';
-#needs to be re-written in sql for efficiency
+#doesn't yet deal with daily/weekly packages
my $time = time;
@@ -38,74 +88,148 @@ my $now = $cgi->param('date') && str2time($cgi->param('date')) || $time;
$now =~ /^(\d+)$/ or die "unparsable date?";
$now = $1;
-my @where = ();
+my $link = "cust_bill_pkg.cgi?nottax=1;unearned_now=$now";
-if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
- my $agentnum = $1;
- push @where, "agentnum = $agentnum";
-}
-
-#here is the agent virtualization
-push @where, $FS::CurrentUser::CurrentUser->agentnums_sql;
-
-my $where = join(' AND ', @where);
-$where = "AND $where" if $where;
-
-my( $total, $total_legacy ) = ( 0, 0 );
-
-my @cust_bill_pkg =
- grep { $_->cust_pkg && $_->cust_pkg->part_pkg->freq !~ /^([01]|\d+[dw])$/ }
- qsearch({
- 'select' => 'cust_bill_pkg.*',
- 'table' => 'cust_bill_pkg',
- 'addl_from' => ' LEFT JOIN cust_bill USING ( invnum ) '.
- ' LEFT JOIN cust_main USING ( custnum ) ',
- 'hashref' => {
- 'recur' => { op=>'!=', value=>0 },
- 'edate' => { op=>'>', value=>$now },
- },
- 'extra_sql' => $where,
- });
-
-my @cust_pkg =
- grep { $_->part_pkg->recur != 0
- && $_->part_pkg->freq !~ /^([01]|\d+[dw])$/
- }
- qsearch({
- 'select' => 'cust_pkg.*',
- 'table' => 'cust_pkg',
- 'addl_from' => ' LEFT JOIN cust_main USING ( custnum ) ',
- 'hashref' => { 'bill' => { op=>'>', value=>$now } },
- 'extra_sql' => $where,
- });
-
-foreach my $cust_bill_pkg ( @cust_bill_pkg) {
- my $period = $cust_bill_pkg->edate - $cust_bill_pkg->sdate;
-
- my $elapsed = $now - $cust_bill_pkg->sdate;
- $elapsed = 0 if $elapsed < 0;
-
- my $remaining = 1 - $elapsed/$period;
-
- my $unearned = $remaining * $cust_bill_pkg->recur;
- $total += $unearned;
+my $curuser = $FS::CurrentUser::CurrentUser;
+my $agentnum = '';
+my @agentnums = ();
+$agentnum ? ($agentnum) : $curuser->agentnums;
+if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
+ @agentnums = ($1);
+ #XXX#push @where, "agentnum = $agentnum";
+ #XXX#$link .= ";agentnum=$agentnum";
+} else {
+ @agentnums = $curuser->agentnums;
}
-foreach my $cust_pkg ( @cust_pkg ) {
- my $period = $cust_pkg->bill - $cust_pkg->last_bill;
-
- my $elapsed = $now - $cust_pkg->last_bill;
- $elapsed = 0 if $elapsed < 0;
-
- my $remaining = 1 - $elapsed/$period;
+my @where = ();
- my $unearned = $remaining * $cust_pkg->part_pkg->recur; #!! only works for flat/legacy
- $total_legacy += $unearned;
+#here is the agent virtualization
+push @where, $curuser->agentnums_sql( 'table'=>'cust_main' );
+
+#well, because cust_bill_pkg.cgi has it and without it the numbers don't match..
+push @where , " payby != 'COMP' "
+ unless $cgi->param('include_comp_cust');
+
+my %total = ();
+my %total_legacy = ();
+foreach my $agentnum (@agentnums) {
+
+ my $where = join(' AND ', @where, "cust_main.agentnum = $agentnum");
+ $where = "AND $where" if $where;
+
+ my( $total, $total_legacy ) = ( 0, 0 );
+
+ # my @cust_bill_pkg =
+ # grep { $_->cust_pkg && $_->cust_pkg->part_pkg->freq !~ /^([01]|\d+[hdw])$/ }
+ # qsearch({
+ # 'select' => 'cust_bill_pkg.*',
+ # 'table' => 'cust_bill_pkg',
+ # 'addl_from' => ' LEFT JOIN cust_bill USING ( invnum ) '.
+ # ' LEFT JOIN cust_main USING ( custnum ) ',
+ # 'hashref' => {
+ # 'recur' => { op=>'!=', value=>0 },
+ # 'sdate' => { op=>'<', value=>$now },
+ # 'edate' => { op=>'>', value=>$now },
+ # },
+ # 'extra_sql' => $where,
+ # });
+ #
+ # foreach my $cust_bill_pkg ( @cust_bill_pkg) {
+ # my $period = $cust_bill_pkg->edate - $cust_bill_pkg->sdate;
+ #
+ # my $elapsed = $now - $cust_bill_pkg->sdate;
+ # $elapsed = 0 if $elapsed < 0;
+ #
+ # my $remaining = 1 - $elapsed/$period;
+ #
+ # my $unearned = $remaining * $cust_bill_pkg->recur;
+ # $total += $unearned;
+ #
+ # }
+
+ #re-written in sql:
+
+ #false laziness w/cust_bill_pkg.cgi
+
+ my $float = 'REAL'; #'DOUBLE PRECISION';
+
+ my $period = "CAST(cust_bill_pkg.edate - cust_bill_pkg.sdate AS $float)";
+ my $elapsed = "(CASE WHEN cust_bill_pkg.sdate > $now
+ THEN 0
+ ELSE ($now - cust_bill_pkg.sdate)
+ END)";
+ #my $elapsed = "CAST($unearned - cust_bill_pkg.sdate AS $float)";
+
+ my $remaining = "(1 - $elapsed/$period)";
+
+ my $select = "SUM($remaining * cust_bill_pkg.recur)";
+
+ #[...]
+
+ my $sql = "SELECT $select FROM cust_bill_pkg
+ LEFT JOIN cust_pkg USING ( pkgnum )
+ LEFT JOIN part_pkg USING ( pkgpart )
+ LEFT JOIN cust_main USING ( custnum )
+ WHERE pkgpart > 0
+ AND sdate < $now
+ AND edate > $now
+ AND cust_bill_pkg.recur != 0
+ AND part_pkg.freq != '0'
+ AND part_pkg.freq != '1'
+ AND part_pkg.freq NOT LIKE '%h'
+ AND part_pkg.freq NOT LIKE '%d'
+ AND part_pkg.freq NOT LIKE '%w'
+ $where
+ ";
+
+ my $sth = dbh->prepare($sql) or die dbh->errstr;
+ $sth->execute or die $sth->errstr;
+ my $total = $sth->fetchrow_arrayref->[0];
+
+ $total = sprintf('%.2f', $total);
+ $total{$agentnum} = $total;
+ $total{0} += $total;
+
+ if ( $legacy ) {
+
+ #not yet rewritten in sql, but now not enabled by default
+
+ my @cust_pkg =
+ grep { $_->part_pkg->recur != 0
+ && $_->part_pkg->freq !~ /^([01]|\d+[dw])$/
+ }
+ qsearch({
+ 'select' => 'cust_pkg.*',
+ 'table' => 'cust_pkg',
+ 'addl_from' => ' LEFT JOIN cust_main USING ( custnum ) ',
+ 'hashref' => { 'bill' => { op=>'>', value=>$now } },
+ 'extra_sql' => $where,
+ });
+
+ foreach my $cust_pkg ( @cust_pkg ) {
+ my $period = $cust_pkg->bill - $cust_pkg->last_bill;
+
+ my $elapsed = $now - $cust_pkg->last_bill;
+ $elapsed = 0 if $elapsed < 0;
+
+ my $remaining = 1 - $elapsed/$period;
+
+ my $unearned = $remaining * $cust_pkg->part_pkg->recur; #!! only works for flat/legacy
+ $total_legacy += $unearned;
+
+ }
+
+ $total_legacy = sprintf('%.2f', $total_legacy);
+ $total_legacy{$agentnum} = $total_legacy;
+ $total_legacy{0} += $total_legacy;
+
+ }
}
-$total = sprintf('%.2f', $total);
-$total_legacy = sprintf('%.2f', $total_legacy);
-
+$total{0} = sprintf('%.2f', $total{0});
+$total_legacy{0} = sprintf('%.2f', $total_legacy{0});
+
</%init>
diff --git a/httemplate/search/report_prepaid_income.html b/httemplate/search/report_prepaid_income.html
index d707bd81b..04801beee 100644
--- a/httemplate/search/report_prepaid_income.html
+++ b/httemplate/search/report_prepaid_income.html
@@ -44,7 +44,7 @@
<SCRIPT TYPE="text/javascript">
Calendar.setup({
inputField: "date_text",
- ifFormat: "%m/%d/%Y",
+ ifFormat: "<% $date_format %>",
button: "date_button",
align: "BR"
});
@@ -58,4 +58,7 @@
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Financial reports');
+my $conf = new FS::Conf;
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
+
</%init>
diff --git a/httemplate/view/cust_main.cgi b/httemplate/view/cust_main.cgi
index 6e024132b..6eea2b09e 100755
--- a/httemplate/view/cust_main.cgi
+++ b/httemplate/view/cust_main.cgi
@@ -1,5 +1,5 @@
<% include('/elements/header.html', {
- 'title' => "Customer View: ". $cust_main->name,
+ 'title' => "Customer: ". $cust_main->name,
'nobr' => 1,
})
%>
@@ -128,7 +128,7 @@ Comments
'actionlabel' => 'Enter customer note',
'cust_main' => $cust_main,
'width' => 616,
- 'height' => 408,
+ 'height' => 538, #575
)
%>
diff --git a/httemplate/view/cust_main/notes.html b/httemplate/view/cust_main/notes.html
index 833c92e67..71511dc93 100755
--- a/httemplate/view/cust_main/notes.html
+++ b/httemplate/view/cust_main/notes.html
@@ -11,6 +11,9 @@
% }
<TH CLASS="grid" BGCOLOR="#cccccc">Person</TH>
<TH CLASS="grid" BGCOLOR="#cccccc">Note</TH>
+% if ($curuser->access_right('Edit customer note') ) {
+ <TH CLASS="grid" BGCOLOR="#cccccc">&nbsp;</TH>
+% }
</TR>
% my $bgcolor1 = '#eeeeee';
@@ -34,7 +37,7 @@
% ";notenum=$notenum",
% 'actionlabel' => 'Edit customer note',
% 'width' => 616,
-% 'height' => 408,
+% 'height' => 538, #575
% 'frame' => 'top',
% );
% my $clickjs = qq!onclick="$onclick"!;
@@ -50,8 +53,11 @@
&nbsp;<% $note->otaker%>
</TD>
<TD CLASS="grid" BGCOLOR="<% $bgcolor %>">
- &nbsp;<%$note->comments%><% $edit %>
+ &nbsp;<%$note->comments%>
</TD>
+% if($edit) {
+ <TD CLASS="grid" BGCOLOR="<% $bgcolor %>"><% $edit %></TD>
+% }
</TR>
% } #end display notes
diff --git a/httemplate/view/cust_main/payment_history.html b/httemplate/view/cust_main/payment_history.html
index 56a2c4dde..0dc4c41d5 100644
--- a/httemplate/view/cust_main/payment_history.html
+++ b/httemplate/view/cust_main/payment_history.html
@@ -205,11 +205,11 @@
<TR ID="balance_forward_row">
<TD CLASS="grid" BGCOLOR="#dddddd">
- <% time2str("%D",$date) %>
+ <% time2str($date_format, $date) %>
</TD>
<TD CLASS="grid" BGCOLOR="#dddddd">
- <I>Starting balance on <% time2str("%D",$date) %></I>
+ <I>Starting balance on <% time2str($date_format, $date) %></I>
(<A HREF="javascript:void(0);" onClick="show_history();">show prior history</A>)
</TD>
@@ -297,7 +297,7 @@
<A NAME="<% $target %>">
% }
- <% time2str("%D",$item->{'date'}) %>
+ <% time2str($date_format, $item->{'date'}) %>
% if ( $target && $target{$target} == 1 ) {
</A>
@@ -355,6 +355,7 @@ my( $cust_main ) = @_;
my $custnum = $cust_main->custnum;
my $conf = new FS::Conf;
+my $date_format = $conf->config('date_format') || '%m/%d/%Y';
my $curuser = $FS::CurrentUser::CurrentUser;
@@ -376,7 +377,7 @@ my @history = ();
my %opt = (
( map { $_ => scalar($conf->config($_)) }
- qw( card_refund-days )
+ qw( card_refund-days date_format )
),
( map { $_ => $conf->exists($_) }
qw( deleteinvoices deletepayments deleterefunds pkg-balances )
diff --git a/httemplate/view/cust_main/payment_history/credit.html b/httemplate/view/cust_main/payment_history/credit.html
index 058c6f536..fa5838e4e 100644
--- a/httemplate/view/cust_main/payment_history/credit.html
+++ b/httemplate/view/cust_main/payment_history/credit.html
@@ -4,6 +4,8 @@ by <% $cust_credit->otaker %><% "$reason$desc$apply$delete$unapply" %>
my( $cust_credit, %opt ) = @_;
+my $date_format = $opt{'date_format'} || '%m/%d/%Y';
+
my $curuser = $FS::CurrentUser::CurrentUser;
my @cust_credit_bill = $cust_credit->cust_credit_bill;
@@ -56,7 +58,7 @@ if ( scalar(@cust_credit_bill) == 0
&& scalar(@cust_credit_refund) == 1
&& $cust_credit->credited == 0 ) {
#applied to one refund
- $desc .= ' refunded on '. time2str("%D", $cust_credit_refund[0]->_date);
+ $desc .= ' refunded on '. time2str($date_format, $cust_credit_refund[0]->_date);
} else {
#complicated
$desc .= '<BR>';
@@ -67,11 +69,11 @@ if ( scalar(@cust_credit_bill) == 0
'$'. $app->amount.
' '. $app->applied_to_invoice.
'<BR>';
- #' on '. time2str("%D", $app->_date).
+ #' on '. time2str($date_format, $app->_date).
} elsif ( $app->isa('FS::cust_credit_refund') ) {
$desc .= '&nbsp;&nbsp;'.
'$'. $app->amount.
- ' refunded on '. time2str("%D", $app->_date).
+ ' refunded on '. time2str($date_format, $app->_date).
'<BR>';
} else {
die "$app is not a FS::cust_credit_bill or a FS::cust_credit_refund";
diff --git a/httemplate/view/cust_main/payment_history/payment.html b/httemplate/view/cust_main/payment_history/payment.html
index a4a349bb8..53fc0dad3 100644
--- a/httemplate/view/cust_main/payment_history/payment.html
+++ b/httemplate/view/cust_main/payment_history/payment.html
@@ -4,6 +4,8 @@
my( $cust_pay, %opt ) = @_;
+my $date_format = $opt{'date_format'} || '%m/%d/%Y';
+
my $curuser = $FS::CurrentUser::CurrentUser;
my $payby = $cust_pay->payby;
@@ -79,7 +81,7 @@ if ( scalar(@cust_bill_pay) == 0
&& scalar(@cust_pay_refund) == 1
&& $cust_pay->unapplied == 0 ) {
#applied to one refund
- $desc .= ' refunded on '. time2str("%D", $cust_pay_refund[0]->_date);
+ $desc .= ' refunded on '. time2str($date_format, $cust_pay_refund[0]->_date);
} else {
#complicated
$desc .= '<BR>';
@@ -90,11 +92,11 @@ if ( scalar(@cust_bill_pay) == 0
'$'. $app->amount.
' '. $app->applied_to_invoice.
'<BR>';
- #' on '. time2str("%D", $cust_bill_pay->_date).
+ #' on '. time2str($date_format, $cust_bill_pay->_date).
} elsif ( $app->isa('FS::cust_pay_refund') ) {
$desc .= '&nbsp;&nbsp;'.
'$'. $app->amount.
- ' refunded on '. time2str("%D", $app->_date).
+ ' refunded on '. time2str($date_format, $app->_date).
'<BR>';
} else {
die "$app is not a FS::cust_bill_pay or FS::cust_pay_refund";
diff --git a/httemplate/view/cust_main/payment_history/voided_payment.html b/httemplate/view/cust_main/payment_history/voided_payment.html
index 610372721..be68ff091 100644
--- a/httemplate/view/cust_main/payment_history/voided_payment.html
+++ b/httemplate/view/cust_main/payment_history/voided_payment.html
@@ -1,10 +1,12 @@
<DEL>Payment <% $info %></DEL>
-<I>voided <% time2str("%D", $cust_pay_void->void_date) %>
+<I>voided <% time2str($date_format, $cust_pay_void->void_date) %>
by <% $cust_pay_void->otaker %></I><% $unvoid %>
<%init>
my( $cust_pay_void, %opt ) = @_;
+my $date_format = $opt{'date_format'} || '%m/%d/%Y';
+
my $curuser = $FS::CurrentUser::CurrentUser;
my $payby = $cust_pay_void->payby;
diff --git a/httemplate/view/cust_main/tickets.html b/httemplate/view/cust_main/tickets.html
index 167849c76..e1f9a131e 100644
--- a/httemplate/view/cust_main/tickets.html
+++ b/httemplate/view/cust_main/tickets.html
@@ -1,7 +1,24 @@
+<FORM METHOD="GET" ACTION="<% $new_base %>" NAME="CreateTicketForm">
+<INPUT TYPE="submit" VALUE="Create new ticket">
+in queue
+<SELECT NAME="Queue">
+% my %queues = FS::TicketSystem->queues();
+% foreach my $queueid ( keys %queues ) {
+% #should consider whether the user has ACL to create ticket in each queue
+ <OPTION VALUE="<% $queueid %>"
+ <% $queueid == $new_param{'Queue'} ? 'SELECTED' : '' %>
+ ><% $queues{$queueid} |h %>
+% }
+</SELECT>
+% foreach my $param ( grep { $_ ne 'Queue' } keys %new_param ) {
+ <INPUT TYPE="hidden" NAME="<% $param %>" VALUE="<% $new_param{$param} |h %>">
+% }
+</FORM>
+<BR>
+
(<A HREF="<% $open_link %>">View <% $openlabel %> tickets for this customer</A>)
(<A HREF="<% $res_link %>">View resolved tickets for this customer</A>)
-<BR>
-(<A HREF="<% $new_link %>">Create new ticket for this customer</A>)
+<BR><BR>
<% include("/elements/table-grid.html") %>
% my $bgcolor1 = '#eeeeee';
@@ -73,6 +90,10 @@ my $res_link = FS::TicketSystem->href_customer_tickets(
{ 'statuses' => [ 'resolved' ] }
);
+my( $new_base, %new_param ) = FS::TicketSystem->href_params_new_ticket(
+ $cust_main,
+ join(', ', $cust_main->invoicing_list_emailonly ) );
+
my $new_link = FS::TicketSystem->href_new_ticket(
$cust_main,
join(', ', $cust_main->invoicing_list_emailonly )
diff --git a/httemplate/view/cust_svc.cgi b/httemplate/view/cust_svc.cgi
new file mode 100644
index 000000000..8ccfce3ff
--- /dev/null
+++ b/httemplate/view/cust_svc.cgi
@@ -0,0 +1,23 @@
+<% $cgi->redirect(popurl(1)."$svcdb.cgi?". $svcnum ) %>
+<%init>
+
+#needed here? we're just redirecting. i guess it could reveal the svcdb of a
+#svcnum... oooooo scary. not.
+die "access denied"
+ unless $FS::CurrentUser::CurrentUser->access_right('View customer services');
+
+#some false laziness w/svc_*.cgi
+
+my($query) = $cgi->keywords;
+$query =~ /^(\d+)$/;
+my $svcnum = $1;
+my $cust_svc = qsearchs( 'cust_svc', { 'svcnum' => $svcnum } );
+die "Unknown svcnum" unless $cust_svc;
+
+my $part_svc = qsearchs('part_svc',{'svcpart'=> $cust_svc->svcpart } );
+die "Unknown svcpart" unless $part_svc;
+
+my $svcdb = $part_svc->svcdb;
+
+</%init>
+
diff --git a/httemplate/view/elements/svc_export_settings.html b/httemplate/view/elements/svc_export_settings.html
new file mode 100644
index 000000000..c5f2555bd
--- /dev/null
+++ b/httemplate/view/elements/svc_export_settings.html
@@ -0,0 +1,34 @@
+% if ( $FS::CurrentUser::CurrentUser->option('export_getsettings') ) {
+
+% my ( $settings, $defaults ) = $svc_x->export_getsettings;
+% if ( keys %$settings ) {
+
+%# a way to label this "Communigate pro settings".. just a config maybe... eh,
+%# its just for devel
+ External settings
+ <% ntable('#cccccc',2) %>
+
+% foreach my $key ( sort {$defaults->{$a} <=> $defaults->{$b} or $a cmp $b}
+% keys %$settings
+% )
+% {
+ <TR>
+ <TD ALIGN="right"><% $key |h %></TD>
+ <TD BGCOLOR="<% $defaults->{$key} ? '#eeeeee' : '#ffffff' %>">
+ <% $defaults->{$key} ? '<I>' : '<B>' %>
+ <% $settings->{$key} |h %>
+ <% $defaults->{$key} ? '</I>' : '</B>' %>
+ </TD>
+ </TR>
+% }
+
+ </TABLE>
+ <BR>
+
+% }
+% }
+<%init>
+
+my $svc_x = shift;
+
+</%init>
diff --git a/httemplate/view/elements/tr.html b/httemplate/view/elements/tr.html
new file mode 100644
index 000000000..e2ec7d42f
--- /dev/null
+++ b/httemplate/view/elements/tr.html
@@ -0,0 +1,9 @@
+<TR>
+ <TD ALIGN="right"><% $opt{'label'} %></TD>
+ <TD BGCOLOR="#ffffff"><% $opt{'value'} %></TD>
+</TR>
+<%init>
+
+my %opt = @_;
+
+</%init>
diff --git a/httemplate/view/svc_acct.cgi b/httemplate/view/svc_acct.cgi
index 44a2aa611..9135e67e9 100755
--- a/httemplate/view/svc_acct.cgi
+++ b/httemplate/view/svc_acct.cgi
@@ -14,328 +14,63 @@
}
</SCRIPT>
- <% include("/elements/header.html",'Account View', menubar(
+ <% include("/elements/header.html",'View account', menubar(
"Cancel this (unaudited) account" =>
"javascript:areyousure(\'${p}misc/cancel-unaudited.cgi?$svcnum\')",
)) %>
% }
-% if ( $part_svc->part_export_usage ) {
-%
-% my $last_bill;
-% my %plandata;
-% if ( $cust_pkg ) {
-% #false laziness w/httemplate/edit/part_pkg... this stuff doesn't really
-% #belong in plan data
-% %plandata = map { /^(\w+)=(.*)$/; ( $1 => $2 ); }
-% split("\n", $cust_pkg->part_pkg->plandata );
-%
-% $last_bill = $cust_pkg->last_bill;
-% } else {
-% $last_bill = 0;
-% %plandata = ();
-% }
-%
-% my $seconds = $svc_acct->seconds_since_sqlradacct( $last_bill, time );
-% my $hour = int($seconds/3600);
-% my $min = int( ($seconds%3600) / 60 );
-% my $sec = $seconds%60;
-%
-% my $input = $svc_acct->attribute_since_sqlradacct(
-% $last_bill, time, 'AcctInputOctets'
-% ) / 1048576;
-% my $output = $svc_acct->attribute_since_sqlradacct(
-% $last_bill, time, 'AcctOutputOctets'
-% ) / 1048576;
-%
-%
+<% include( 'svc_acct/radius_usage.html',
+ 'svc_acct' => $svc_acct,
+ 'part_svc' => $part_svc,
+ 'cust_pkg' => $cust_pkg,
+ %gopt,
+ )
+%>
-
- RADIUS session information<BR>
- <% ntable('#cccccc',2) %>
- <TR><TD BGCOLOR="#ffffff">
-% if ( $seconds ) {
-
- Online <B><% $hour %></B>h <B><% $min %></B>m <B><% $sec %></B>s
-% } else {
-
- Has not logged on
-% }
-% if ( $cust_pkg ) {
-
- since last bill (<% time2str('%a %b %o %Y', $last_bill) %>)
-% if ( length($plandata{recur_included_hours}) ) {
-
- - <% $plandata{recur_included_hours} %> total hours in plan
-% }
-
- <BR>
-% } else {
-
- (no billing cycle available for unaudited account)<BR>
-% }
-
-
- Upload: <B><% sprintf("%.3f", $input) %></B> megabytes<BR>
- Download: <B><% sprintf("%.3f", $output) %></B> megabytes<BR>
- Last Login: <B><% $svc_acct->last_login_text %></B><BR>
-% my $href = qq!<A HREF="${p}search/sqlradius.cgi?svcnum=$svcnum!;
-
- View session detail:
- <% $href %>;begin=<% $last_bill %>">this billing cycle</A>
- | <% $href %>;begin=<% time-15552000 %>">past six months</A>
- | <% $href %>">all sessions</A>
-
- </TD></TR></TABLE><BR>
-% }
-
-% my @part_svc = ();
-% if ($FS::CurrentUser::CurrentUser->access_right('Change customer service')) {
-
- <SCRIPT TYPE="text/javascript">
- function enable_change () {
- if ( document.OneTrueForm.svcpart.selectedIndex > 1 ) {
- document.OneTrueForm.submit.disabled = false;
- } else {
- document.OneTrueForm.submit.disabled = true;
- }
- }
- </SCRIPT>
-
- <FORM NAME="OneTrueForm" ACTION="<%$p%>edit/process/cust_svc.cgi">
- <INPUT TYPE="hidden" NAME="svcnum" VALUE="<% $svcnum %>">
- <INPUT TYPE="hidden" NAME="pkgnum" VALUE="<% $pkgnum %>">
-
-% #print qq!<BR><A HREF="../misc/sendconfig.cgi?$svcnum">Send account information</A>!;
-%
-% if ( $pkgnum ) {
-% @part_svc = grep { $_->svcdb eq 'svc_acct'
-% && $_->svcpart != $part_svc->svcpart }
-% $cust_pkg->available_part_svc;
-% } else {
-% @part_svc = qsearch('part_svc', {
-% svcdb => 'svc_acct',
-% disabled => '',
-% svcpart => { op=>'!=', value=>$part_svc->svcpart },
-% } );
-% }
-%
-% }
+<% include( 'svc_acct/change_svc_form.html',
+ 'part_svc' => \@part_svc,
+ 'svcnum' => $svcnum,
+ 'pkgnum' => $pkgnum,
+ %gopt,
+ )
+%>
Service #<B><% $svcnum %></B>
| <A HREF="<%$p%>edit/svc_acct.cgi?<%$svcnum%>">Edit this service</A>
-% if ( @part_svc ) {
-
-| <SELECT NAME="svcpart" onChange="enable_change()">
- <OPTION VALUE="">Change service</OPTION>
- <OPTION VALUE="">--------------</OPTION>
-% foreach my $opt_part_svc ( @part_svc ) {
-
- <OPTION VALUE="<% $opt_part_svc->svcpart %>"><% $opt_part_svc->svc %></OPTION>
-% }
-
- </SELECT>
- <INPUT NAME="submit" TYPE="submit" VALUE="Change" disabled>
-
-% }
-
-
-<% &ntable("#cccccc") %><TR><TD><% &ntable("#cccccc",2) %>
-
-<TR>
- <TD ALIGN="right">Service</TD>
- <TD BGCOLOR="#ffffff"><% $part_svc->svc %></TD>
-</TR>
-<TR>
- <TD ALIGN="right">Username</TD>
- <TD BGCOLOR="#ffffff"><% $svc_acct->username %></TD>
-</TR>
-<TR>
- <TD ALIGN="right">Domain</TD>
- <TD BGCOLOR="#ffffff"><% $domain %></TD>
-</TR>
-
-<TR>
- <TD ALIGN="right">Password</TD>
- <TD BGCOLOR="#ffffff">
-% my $password = $svc_acct->get_cleartext_password;
-% if ( $password =~ /^\*\w+\* (.*)$/ ) {
-% $password = $1;
-%
+<% include( 'svc_acct/change_svc.html',
+ 'part_svc' => \@part_svc,
+ %gopt,
+ )
+%>
- <I>(login disabled)</I>
-% }
-% if ( !$password and
-% $svc_acct->_password_encryption ne 'plain' and
-% $svc_acct->_password ) {
- <I>(<% uc($svc_acct->_password_encryption) %> encrypted)</I>
-% }
-% elsif ( $conf->exists('showpasswords') ) {
-
- <PRE><% encode_entities($password) %></PRE>
-% } else {
-
- <I>(hidden)</I>
-% }
-
-
- </TD>
-</TR>
-% $password = '';
-% if ( $conf->exists('security_phrase') ) {
-% my $sec_phrase = $svc_acct->sec_phrase;
-%
-
- <TR>
- <TD ALIGN="right">Security phrase</TD>
- <TD BGCOLOR="#ffffff"><% $svc_acct->sec_phrase %></TD>
- </TR>
-% }
-% if ( $svc_acct->popnum ) {
-% my $svc_acct_pop = qsearchs('svc_acct_pop',{'popnum'=>$svc_acct->popnum});
-%
+<% include( 'svc_acct/basics.html',
+ 'svc_acct' => $svc_acct,
+ 'part_svc' => $part_svc,
+ %gopt,
+ )
+%>
- <TR>
- <TD ALIGN="right">Access number</TD>
- <TD BGCOLOR="#ffffff"><% $svc_acct_pop->text %></TD>
- </TR>
-% }
-% if ($svc_acct->uid ne '') {
-
- <TR>
- <TD ALIGN="right">UID</TD>
- <TD BGCOLOR="#ffffff"><% $svc_acct->uid %></TD>
- </TR>
-% }
-% if ($svc_acct->gid ne '') {
-
- <TR>
- <TD ALIGN="right">GID</TD>
- <TD BGCOLOR="#ffffff"><% $svc_acct->gid %></TD>
- </TR>
-% }
-% if ($svc_acct->finger ne '') {
-
- <TR>
- <TD ALIGN="right">Real Name</TD>
- <TD BGCOLOR="#ffffff"><% $svc_acct->finger %></TD>
- </TR>
-% }
-% if ($svc_acct->dir ne '') {
-
- <TR>
- <TD ALIGN="right">Home directory</TD>
- <TD BGCOLOR="#ffffff"><% $svc_acct->dir %></TD>
- </TR>
-% }
-% if ($svc_acct->shell ne '') {
-
- <TR>
- <TD ALIGN="right">Shell</TD>
- <TD BGCOLOR="#ffffff"><% $svc_acct->shell %></TD>
- </TR>
-% }
-% if ($svc_acct->quota ne '') {
-
- <TR>
- <TD ALIGN="right">Quota</TD>
- <TD BGCOLOR="#ffffff"><% $svc_acct->quota %></TD>
- </TR>
-% }
-% if ($svc_acct->slipip) {
-
- <TR>
- <TD ALIGN="right">IP address</TD>
- <TD BGCOLOR="#ffffff">
- <% ( $svc_acct->slipip eq "0.0.0.0" || $svc_acct->slipip eq '0e0' )
- ? "<I>(Dynamic)</I>"
- : $svc_acct->slipip
- %>
- </TD>
- </TR>
-% }
-% my %ulabel = ( seconds => 'Time',
-% upbytes => 'Upload bytes',
-% downbytes => 'Download bytes',
-% totalbytes => 'Total bytes',
-% );
-% foreach my $uf ( keys %ulabel ) {
-% my $tf = $uf . "_threshold";
-% if ( $svc_acct->$uf ne '' ) {
-% my $v = $uf eq 'seconds'
-% #? (($svc_acct->$uf < 0 ? '-' : ''). duration_exact($svc_acct->$uf) )
-% ? ($svc_acct->$uf < 0 ? '-' : '').
-% int(abs($svc_acct->$uf)/3600). "hr ".
-% sprintf("%02d",(abs($svc_acct->$uf)%3600)/60). "min"
-% : FS::UI::bytecount::display_bytecount($svc_acct->$uf);
- <TR>
- <TD ALIGN="right"><% $ulabel{$uf} %> remaining</TD>
- <TD BGCOLOR="#ffffff"><% $v %></TD>
- </TR>
-
-% }
-% }
-% foreach my $attribute ( grep /^radius_/, $svc_acct->fields ) {
-% $attribute =~ /^radius_(.*)$/;
-% my $pattribute = $FS::raddb::attrib{$1};
-%
-
- <TR>
- <TD ALIGN="right">Radius (reply) <% $pattribute %></TD>
- <TD BGCOLOR="#ffffff"><% $svc_acct->getfield($attribute) %></TD>
- </TR>
-% }
-% foreach my $attribute ( grep /^rc_/, $svc_acct->fields ) {
-% $attribute =~ /^rc_(.*)$/;
-% my $pattribute = $FS::raddb::attrib{$1};
-%
-
- <TR>
- <TD ALIGN="right">Radius (check) <% $pattribute %></TD>
- <TD BGCOLOR="#ffffff"><% $svc_acct->getfield($attribute) %></TD>
- </TR>
-% }
-
-
-<TR>
- <TD ALIGN="right">RADIUS groups</TD>
- <TD BGCOLOR="#ffffff"><% join('<BR>', $svc_acct->radius_groups) %></TD>
-</TR>
-%
-%# Can this be abstracted further? Maybe a library function like
-%# widget('HTML', 'view', $svc_acct) ? It would definitely make UI
-%# style management easier.
-%
-% foreach (sort { $a cmp $b } $svc_acct->virtual_fields) {
-
- <% $svc_acct->pvf($_)->widget('HTML', 'view', $svc_acct->getfield($_)) %>
-% }
-
-
-</TABLE></TD></TR></TABLE>
</FORM>
+<BR>
+
+<% include( 'svc_acct/hosting.html',
+ %gopt,
+ )
+%>
+
+%#remove this? does anybody even use it? it was a misunderstood customer
+%#request IIRC?
+% my $conf = new FS::Conf;
+% if ( $conf->exists('svc_acct-notes') ) {
+% warn 'WARNING: svc_acct-notes deprecated\n';
+<% join("<BR>", $conf->config('svc_acct-notes') ) %>
<BR><BR>
-
-% if ( @svc_www ) {
- Hosting
- <% &ntable("#cccccc") %><TR><TD><% &ntable("#cccccc",2) %>
-% foreach my $svc_www (@svc_www) {
-% my($label, $value) = $svc_www->cust_svc->label;
-% my $link = $p. 'view/svc_www.cgi?'. $svc_www->svcnum;
- <TR>
- <TD BGCOLOR="#ffffff">
- <A HREF="<% $link %>"><% "$label: $value" %></A>
- </TD>
- </TR>
-% }
- </TABLE></TD></TR></TABLE>
- <BR><BR>
% }
-<% join("<BR>", $conf->config('svc_acct-notes') ) %>
-<BR><BR>
+<% include('elements/svc_export_settings.html', $svc_acct) %>
<% joblisting({'svcnum'=>$svcnum}, 1) %>
@@ -345,8 +80,6 @@ Service #<B><% $svcnum %></B>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('View customer services');
-my $conf = new FS::Conf;
-
my $addl_from = ' LEFT JOIN cust_svc USING ( svcnum ) '.
' LEFT JOIN cust_pkg USING ( pkgnum ) '.
' LEFT JOIN cust_main USING ( custnum ) ';
@@ -382,25 +115,27 @@ my $part_svc = qsearchs('part_svc',{'svcpart'=> $cust_svc->svcpart } );
die "Unknown svcpart" unless $part_svc;
my $svc = $part_svc->svc;
-die 'Empty domsvc for svc_acct.svcnum '. $svc_acct->svcnum
- unless $svc_acct->domsvc;
-my $svc_domain = qsearchs('svc_domain', { 'svcnum' => $svc_acct->domsvc } );
-die 'Unknown domain (domsvc '. $svc_acct->domsvc.
- ' for svc_acct.svcnum '. $svc_acct->svcnum. ')'
- unless $svc_domain;
-my $domain = $svc_domain->domain;
+my @part_svc = ();
+if ($FS::CurrentUser::CurrentUser->access_right('Change customer service')) {
+
+ if ( $pkgnum ) {
+ @part_svc = grep { $_->svcdb eq 'svc_acct'
+ && $_->svcpart != $part_svc->svcpart }
+ $cust_pkg->available_part_svc;
+ } else {
+ @part_svc = qsearch('part_svc', {
+ svcdb => 'svc_acct',
+ disabled => '',
+ svcpart => { op=>'!=', value=>$part_svc->svcpart },
+ } );
+ }
-my @svc_www = qsearch({
- 'select' => 'svc_www.*',
- 'table' => 'svc_www',
- 'addl_from' => $addl_from,
- 'hashref' => { 'usersvc' => $svcnum },
- #XXX shit outta luck if you somehow got them linked across agents
- # maybe we should show but not link to them? kinda makes sense...
- # (maybe a specific ACL for this situation???)
- 'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql(
- 'null_right' => 'View/link unlinked services'
- ),
-});
+}
+
+my $communigate = scalar($part_svc->part_export('communigate_pro'));
+ # || scalar($part_svc->part_export('communigate_pro_singledomain'));
+
+my %gopt = ( 'communigate' => $communigate,
+ );
</%init>
diff --git a/httemplate/view/svc_acct/basics.html b/httemplate/view/svc_acct/basics.html
new file mode 100644
index 000000000..92b9ad7fe
--- /dev/null
+++ b/httemplate/view/svc_acct/basics.html
@@ -0,0 +1,158 @@
+<% &ntable("#cccccc") %><TR><TD><% &ntable("#cccccc",2) %>
+
+<% include('/view/elements/tr.html', label=>'Service', value=>$part_svc->svc) %>
+<% include('/view/elements/tr.html', label=>'Username', value=>$svc_acct->username) %>
+<% include('/view/elements/tr.html', label=>'Domain', value=>$domain) %>
+
+% if ( $opt{'communigate'} ) {
+ <% include('/view/elements/tr.html', label=>'Aliases', value=>$svc_acct->cgp_aliases) %>
+%}
+
+% if ( $svc_acct->pbxsvc ) {
+ <% include('/view/elements/tr.html', label=>'PBX', value=>$svc_acct->pbx_title) %>
+%}
+
+% my $show_pw = '';
+% my $password = $svc_acct->get_cleartext_password;
+% if ( $password =~ /^\*\w+\* (.*)$/ ) {
+% $password = $1;
+% $show_pw .= '<I>(login disabled)</I> ';
+% }
+% if ( ! $password
+% && $svc_acct->_password_encryption ne 'plain'
+% && $svc_acct->_password
+% )
+% {
+% $show_pw .= '<I>('. uc($svc_acct->_password_encryption). ' encrypted)</I>';
+% } elsif ( $conf->exists('showpasswords') ) {
+% $show_pw .= '<PRE>'. encode_entities($password). '</PRE>';
+% } else {
+% $show_pw .= '<I>(hidden)</I>';
+% }
+% $password = '';
+<% include('/view/elements/tr.html', label=>'Password', value=>$show_pw) %>
+
+
+% if ( $conf->exists('security_phrase') ) {
+ <%include('/view/elements/tr.html', label=>'Security phrase', value=>$svc_acct->sec_phrase)%>
+% }
+
+% if ( $svc_acct->popnum ) {
+% my $svc_acct_pop = qsearchs('svc_acct_pop',{'popnum'=>$svc_acct->popnum});
+ <% include('/view/elements/tr.html', label=>'Access number', value=>$svc_acct_pop->text) %>
+% }
+
+% if ($svc_acct->uid ne '') {
+ <% include('/view/elements/tr.html', label=>'UID', value=>$svc_acct->uid) %>
+% }
+
+% if ($svc_acct->gid ne '') {
+ <% include('/view/elements/tr.html', label=>'GID', value=>$svc_acct->gid) %>
+% }
+
+% if ($svc_acct->finger ne '') {
+ <% include('/view/elements/tr.html', label=>'Real Name', value=>$svc_acct->finger) %>
+% }
+
+% if ($svc_acct->dir ne '') {
+ <% include('/view/elements/tr.html', label=>'Home directory', value=>$svc_acct->dir) %>
+% }
+
+% if ($svc_acct->shell ne '') {
+ <% include('/view/elements/tr.html', label=>'Shell', value=>$svc_acct->shell) %>
+% }
+
+% if ($svc_acct->quota ne '' && ! $opt{'communigate'} ) {
+
+ <% include('/view/elements/tr.html', label=>'Quota', value=>$svc_acct->quota) %>
+
+% } elsif ( $opt{'communigate'} ) {
+
+ <% include('/view/elements/tr.html', label=>'Mailbox type', value=>$svc_acct->cgp_type) %>
+
+ <% include('/view/elements/tr.html', label=>'Enabled services',
+ value=>$svc_acct->cgp_accessmodes ) %>
+
+ <% include('/view/elements/tr.html', label=>'Mail storage limit',
+ value=>$svc_acct->quota ) %>
+
+ <% include('/view/elements/tr.html', label=>'File storage limit',
+ value=>$svc_acct->file_quota ) %>
+
+ <% include('/view/elements/tr.html', label=>'Number of files limit',
+ value=>$svc_acct->file_maxnum ) %>
+
+ <% include('/view/elements/tr.html', label=>'File size limit',
+ value=>$svc_acct->file_maxsize ) %>
+
+ <% include('/view/elements/tr.html', label=>'Message delete method',
+ value=>$svc_acct->cgp_deletemode ) %>
+
+ <% include('/view/elements/tr.html', label=>'On logout remove trash',
+ value=>$svc_acct->cgp_emptytrash ) %>
+
+
+% }
+
+% if ($svc_acct->slipip) {
+ <% include('/view/elements/tr.html',
+ label=>'IP address',
+ value=> ( $svc_acct->slipip eq "0.0.0.0" || $svc_acct->slipip eq '0e0' )
+ ? "<I>(Dynamic)</I>"
+ : $svc_acct->slipip
+ )
+ %>
+% }
+
+<% include('usage.html',
+ 'svc_acct' => $svc_acct,
+ )
+%>
+
+% foreach my $attribute ( grep /^radius_/, $svc_acct->fields ) {
+% $attribute =~ /^radius_(.*)$/;
+% my $pattribute = $FS::raddb::attrib{$1};
+ <% include('/view/elements/tr.html', label=>"Radius (reply) $pattribute",
+ value=>$svc_acct->getfield($attribute)
+ )
+ %>
+% }
+
+% foreach my $attribute ( grep /^rc_/, $svc_acct->fields ) {
+% $attribute =~ /^rc_(.*)$/;
+% my $pattribute = $FS::raddb::attrib{$1};
+ <% include('/view/elements/tr.html', label=>"Radius (check) $pattribute",
+ value=>$svc_acct->getfield($attribute)
+ )
+ %>
+% }
+
+<% include('/view/elements/tr.html', label=>'RADIUS groups',
+ value=>join('<BR>', $svc_acct->radius_groups) ) %>
+
+%# Can this be abstracted further? Maybe a library function like
+%# widget('HTML', 'view', $svc_acct) ? It would definitely make UI
+%# style management easier.
+% foreach (sort { $a cmp $b } $svc_acct->virtual_fields) {
+ <% $svc_acct->pvf($_)->widget('HTML', 'view', $svc_acct->getfield($_)) %>
+% }
+
+</TABLE></TD></TR></TABLE>
+<%init>
+
+my %opt = @_;
+
+my $conf = new FS::Conf;
+
+my $svc_acct = $opt{'svc_acct'};
+my $part_svc = $opt{'part_svc'};
+
+die 'Empty domsvc for svc_acct.svcnum '. $svc_acct->svcnum
+ unless $svc_acct->domsvc;
+my $svc_domain = qsearchs('svc_domain', { 'svcnum' => $svc_acct->domsvc } );
+die 'Unknown domain (domsvc '. $svc_acct->domsvc.
+ ' for svc_acct.svcnum '. $svc_acct->svcnum. ')'
+ unless $svc_domain;
+my $domain = $svc_domain->domain;
+
+</%init>
diff --git a/httemplate/view/svc_acct/change_svc.html b/httemplate/view/svc_acct/change_svc.html
new file mode 100644
index 000000000..33d44a713
--- /dev/null
+++ b/httemplate/view/svc_acct/change_svc.html
@@ -0,0 +1,21 @@
+% if ( @part_svc || $opt{'showall'} ) {
+
+| <SELECT NAME="svcpart" onChange="enable_change()">
+ <OPTION VALUE="">Change service</OPTION>
+ <OPTION VALUE="">--------------</OPTION>
+% foreach my $opt_part_svc ( @part_svc ) {
+
+ <OPTION VALUE="<% $opt_part_svc->svcpart %>"><% $opt_part_svc->svc %></OPTION>
+% }
+
+ </SELECT>
+ <INPUT NAME="submit" TYPE="submit" VALUE="Change" disabled>
+
+% }
+
+<%init>
+
+my %opt = @_;
+my @part_svc = @{ $opt{'part_svc'} };
+
+</%init>
diff --git a/httemplate/view/svc_acct/change_svc_form.html b/httemplate/view/svc_acct/change_svc_form.html
new file mode 100644
index 000000000..4f10922ba
--- /dev/null
+++ b/httemplate/view/svc_acct/change_svc_form.html
@@ -0,0 +1,23 @@
+% if ( @part_svc || $opt{'showall'} ) {
+ <SCRIPT TYPE="text/javascript">
+ function enable_change () {
+ if ( document.OneTrueForm.svcpart.selectedIndex > 1 ) {
+ document.OneTrueForm.submit.disabled = false;
+ } else {
+ document.OneTrueForm.submit.disabled = true;
+ }
+ }
+ </SCRIPT>
+
+ <FORM NAME="OneTrueForm" ACTION="<%$p%>edit/process/cust_svc.cgi">
+ <INPUT TYPE="hidden" NAME="svcnum" VALUE="<% $svcnum %>">
+ <INPUT TYPE="hidden" NAME="pkgnum" VALUE="<% $pkgnum %>">
+% }
+<%init>
+
+my %opt = @_;
+my @part_svc = @{ $opt{'part_svc'} };
+my $svcnum = $opt{'svcnum'};
+my $pkgnum = $opt{'pkgnum'};
+
+</%init>
diff --git a/httemplate/view/svc_acct/hosting.html b/httemplate/view/svc_acct/hosting.html
new file mode 100644
index 000000000..1d83603b7
--- /dev/null
+++ b/httemplate/view/svc_acct/hosting.html
@@ -0,0 +1,38 @@
+% if ( @svc_www || $opt{'showall'} ) {
+ Hosting
+ <% &ntable("#cccccc") %><TR><TD><% &ntable("#cccccc",2) %>
+% foreach my $svc_www (@svc_www) {
+% my($label, $value) = $svc_www->cust_svc->label;
+% my $link = $p. 'view/svc_www.cgi?'. $svc_www->svcnum;
+ <TR>
+ <TD BGCOLOR="#ffffff">
+ <A HREF="<% $link %>"><% "$label: $value" %></A>
+ </TD>
+ </TR>
+% }
+ </TABLE></TD></TR></TABLE>
+ <BR><BR>
+% }
+<%init>
+
+my %opt = @_;
+
+#false laziness w/view_svc_acct.cgi and a zillion other places
+my $addl_from = ' LEFT JOIN cust_svc USING ( svcnum ) '.
+ ' LEFT JOIN cust_pkg USING ( pkgnum ) '.
+ ' LEFT JOIN cust_main USING ( custnum ) ';
+
+my @svc_www = qsearch({
+ 'select' => 'svc_www.*',
+ 'table' => 'svc_www',
+ 'addl_from' => $addl_from,
+ 'hashref' => { 'usersvc' => $opt{'svcnum'} },
+ #XXX shit outta luck if you somehow got them linked across agents
+ # maybe we should show but not link to them? kinda makes sense...
+ # (maybe a specific ACL for this situation???)
+ 'extra_sql' => ' AND '. $FS::CurrentUser::CurrentUser->agentnums_sql(
+ 'null_right' => 'View/link unlinked services'
+ ),
+});
+
+</%init>
diff --git a/httemplate/view/svc_acct/radius_usage.html b/httemplate/view/svc_acct/radius_usage.html
new file mode 100644
index 000000000..e2253a34a
--- /dev/null
+++ b/httemplate/view/svc_acct/radius_usage.html
@@ -0,0 +1,77 @@
+% if ( $part_svc->part_export_usage ) {
+%
+% my $last_bill;
+% my %plandata;
+% if ( $cust_pkg ) {
+% #false laziness w/httemplate/edit/part_pkg... this stuff doesn't really
+% #belong in plan data
+% %plandata = map { /^(\w+)=(.*)$/; ( $1 => $2 ); }
+% split("\n", $cust_pkg->part_pkg->plandata );
+%
+% $last_bill = $cust_pkg->last_bill;
+% } else {
+% $last_bill = 0;
+% %plandata = ();
+% }
+%
+% my $seconds = $svc_acct->seconds_since_sqlradacct( $last_bill, time );
+% my $hour = int($seconds/3600);
+% my $min = int( ($seconds%3600) / 60 );
+% my $sec = $seconds%60;
+%
+% my $input = $svc_acct->attribute_since_sqlradacct(
+% $last_bill, time, 'AcctInputOctets'
+% ) / 1048576;
+% my $output = $svc_acct->attribute_since_sqlradacct(
+% $last_bill, time, 'AcctOutputOctets'
+% ) / 1048576;
+%
+%
+
+
+ RADIUS session information<BR>
+ <% ntable('#cccccc',2) %>
+ <TR><TD BGCOLOR="#ffffff">
+% if ( $seconds ) {
+
+ Online <B><% $hour %></B>h <B><% $min %></B>m <B><% $sec %></B>s
+% } else {
+
+ Has not logged on
+% }
+% if ( $cust_pkg ) {
+
+ since last bill (<% time2str('%a %b %o %Y', $last_bill) %>)
+% if ( length($plandata{recur_included_hours}) ) {
+
+ - <% $plandata{recur_included_hours} %> total hours in plan
+% }
+
+ <BR>
+% } else {
+
+ (no billing cycle available for unaudited account)<BR>
+% }
+
+
+ Upload: <B><% sprintf("%.3f", $input) %></B> megabytes<BR>
+ Download: <B><% sprintf("%.3f", $output) %></B> megabytes<BR>
+ Last Login: <B><% $svc_acct->last_login_text %></B><BR>
+% my $href = qq!<A HREF="${p}search/sqlradius.cgi?svcnum=!. $svc_acct->svcnum;
+
+ View session detail:
+ <% $href %>;begin=<% $last_bill %>">this billing cycle</A>
+ | <% $href %>;begin=<% time-15552000 %>">past six months</A>
+ | <% $href %>">all sessions</A>
+
+ </TD></TR></TABLE><BR>
+% }
+<%init>
+
+my %opt = @_;
+
+my $svc_acct = $opt{'svc_acct'};
+my $part_svc = $opt{'part_svc'};
+my $cust_pkg = $opt{'cust_pkg'};
+
+</%init>
diff --git a/httemplate/view/svc_acct/usage.html b/httemplate/view/svc_acct/usage.html
new file mode 100644
index 000000000..9758d8332
--- /dev/null
+++ b/httemplate/view/svc_acct/usage.html
@@ -0,0 +1,27 @@
+% my %ulabel = ( seconds => 'Time',
+% upbytes => 'Upload bytes',
+% downbytes => 'Download bytes',
+% totalbytes => 'Total bytes',
+% );
+% foreach my $uf ( keys %ulabel ) {
+% my $tf = $uf . "_threshold";
+% if ( $svc_acct->$uf ne '' ) {
+% my $v = $uf eq 'seconds'
+% #? (($svc_acct->$uf < 0 ? '-' : ''). duration_exact($svc_acct->$uf) )
+% ? ($svc_acct->$uf < 0 ? '-' : '').
+% int(abs($svc_acct->$uf)/3600). "hr ".
+% sprintf("%02d",(abs($svc_acct->$uf)%3600)/60). "min"
+% : FS::UI::bytecount::display_bytecount($svc_acct->$uf);
+ <TR>
+ <TD ALIGN="right"><% $ulabel{$uf} %> remaining</TD>
+ <TD BGCOLOR="#ffffff"><% $v %></TD>
+ </TR>
+
+% }
+% }
+<%init>
+
+my %opt = @_;
+my $svc_acct = $opt{'svc_acct'};
+
+</%init>
diff --git a/httemplate/view/svc_domain.cgi b/httemplate/view/svc_domain.cgi
index a9fc775ee..3938a3406 100755
--- a/httemplate/view/svc_domain.cgi
+++ b/httemplate/view/svc_domain.cgi
@@ -1,136 +1,40 @@
-<% include("/elements/header.html",'Domain View', menubar(
- ( ( $pkgnum || $custnum )
- ? ( "View this customer (#$display_custnum)" => "${p}view/cust_main.cgi?$custnum",
- )
- : ( "Delete this (unaudited) domain" =>
- "javascript:areyousure('${p}misc/cancel-unaudited.cgi?$svcnum', 'Delete $domain and all records?' )" )
- )
-)) %>
+% if ( $custnum ) {
-<% include('/elements/error.html') %>
-
-Service #<% $svcnum %>
-<BR>Service: <B><% $part_svc->svc %></B>
-<BR>Domain name: <B><% $domain %></B>
-% if ($export) {
-<BR>Status: <B><% $status %></B>
-% if ( $FS::CurrentUser::CurrentUser->access_right('Manage domain registration') ) {
-% if ( defined($ops{'register'}) ) {
- <A HREF="<% ${p} %>edit/process/domreg.cgi?op=register&svcnum=<% $svcnum %>">Register at <% $registrar->{'name'} %></A>&nbsp;
-% }
-% if ( defined($ops{'transfer'}) ) {
- <A HREF="<% ${p} %>edit/process/domreg.cgi?op=transfer&svcnum=<% $svcnum %>">Transfer to <% $registrar->{'name'} %></A>&nbsp;
-% }
-% if ( defined($ops{'renew'}) ) {
- <A HREF="<% ${p} %>edit/process/domreg.cgi?op=renew&svcnum=<% $svcnum %>&period=1">Renew at <% $registrar->{'name'} %></A>&nbsp;
-% }
-% if ( defined($ops{'revoke'}) ) {
- <A HREF="<% ${p} %>edit/process/domreg.cgi?op=revoke&svcnum=<% $svcnum %>">Revoke</A>
-% }
-% }
-% }
+%# <% include("/elements/header.html","View $svcdomain") %>
+ <% include("/elements/header.html","View domain") %>
+ <% include( '/elements/small_custview.html', $custnum, '', 1,
+ "${p}view/cust_main.cgi") %>
+ <BR>
-% if ( $FS::CurrentUser::CurrentUser->access_right('Edit domain catchall') ) {
- <BR>Catch all email <A HREF="<% ${p} %>misc/catchall.cgi?<% $svcnum %>">(change)</A>:
% } else {
- <BR>Catch all email:
-% }
-<% $email ? "<B>$email</B>" : "<I>(none)<I>" %>
-<BR><BR><A HREF="<% ${p} %>misc/whois.cgi?custnum=<%$custnum%>;svcnum=<%$svcnum%>;domain=<%$domain%>">View whois information.</A>
-<BR><BR>
-<SCRIPT>
- function areyousure(href, message) {
- if ( confirm(message) == true )
- window.location.href = href;
- }
- function slave_areyousure() {
- return confirm("Remove all records and slave from " + document.SlaveForm.recdata.value + "?");
- }
-</SCRIPT>
-
-% my @records; if ( @records = $svc_domain->domain_record ) {
-
- <% include('/elements/table-grid.html') %>
-
-% my $bgcolor1 = '#eeeeee';
-% my $bgcolor2 = '#ffffff';
-% my $bgcolor = $bgcolor2;
-
- <tr>
- <th CLASS="grid" BGCOLOR="#cccccc">Zone</th>
- <th CLASS="grid" BGCOLOR="#cccccc">Type</th>
- <th CLASS="grid" BGCOLOR="#cccccc">Data</th>
- </tr>
-
-% foreach my $domain_record ( @records ) {
-% my $type = $domain_record->rectype eq '_mstr'
-% ? "(slave)"
-% : $domain_record->recaf. ' '. $domain_record->rectype;
-
-
- <tr>
- <td CLASS="grid" BGCOLOR="<% $bgcolor %>"><% $domain_record->reczone %></td>
- <td CLASS="grid" BGCOLOR="<% $bgcolor %>"><% $type %></td>
- <td CLASS="grid" BGCOLOR="<% $bgcolor %>"><% $domain_record->recdata %>
-
-% unless ( $domain_record->rectype eq 'SOA'
-% || ! $FS::CurrentUser::CurrentUser->access_right('Edit domain nameservice')
-% ) {
-% ( my $recdata = $domain_record->recdata ) =~ s/"/\\'\\'/g;
- (<A HREF="javascript:areyousure('<%$p%>misc/delete-domain_record.cgi?<%$domain_record->recnum%>', 'Delete \'<% $domain_record->reczone %> <% $type %> <% $recdata %>\' ?' )">delete</A>)
-% }
- </td>
- </tr>
-
-
-% if ( $bgcolor eq $bgcolor1 ) {
-% $bgcolor = $bgcolor2;
-% } else {
-% $bgcolor = $bgcolor1;
-% }
-
-% }
-
- </table>
-% }
-
-% if ( $FS::CurrentUser::CurrentUser->access_right('Edit domain nameservice') ) {
- <BR>
- <FORM METHOD="POST" ACTION="<%$p%>edit/process/domain_record.cgi">
- <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%$svcnum%>">
- <INPUT TYPE="text" NAME="reczone">
- <INPUT TYPE="hidden" NAME="recaf" VALUE="IN"> IN
- <SELECT NAME="rectype">
-% foreach (qw( A NS CNAME MX PTR TXT) ) {
- <OPTION VALUE="<%$_%>"><%$_%></OPTION>
-% }
- </SELECT>
- <INPUT TYPE="text" NAME="recdata">
- <INPUT TYPE="submit" VALUE="Add record">
- </FORM>
-
- <BR><BR>
- or
- <BR><BR>
-
- <FORM NAME="SlaveForm" METHOD="POST" ACTION="<%$p%>edit/process/domain_record.cgi">
- <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%$svcnum%>">
-% if ( @records ) {
- Delete all records and
-% }
- Slave from nameserver IP
- <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%$svcnum%>">
- <INPUT TYPE="hidden" NAME="reczone" VALUE="@">
- <INPUT TYPE="hidden" NAME="recaf" VALUE="IN">
- <INPUT TYPE="hidden" NAME="rectype" VALUE="_mstr">
- <INPUT TYPE="text" NAME="recdata">
- <INPUT TYPE="submit" VALUE="Slave domain" onClick="return slave_areyousure()">
- </FORM>
+ <% include("/elements/header.html",'View domain', menubar(
+ "Cancel this (unaudited) domain" =>
+ "javascript:areyousure('${p}misc/cancel-unaudited.cgi?$svcnum', 'Delete $domain and all records?')",
+ ))
+ %>
% }
-<BR><BR>
+<% include('/elements/error.html') %>
+
+<% include('svc_domain/basics.html', $svc_domain,
+ 'part_svc' => $part_svc,
+ 'custnum' => $custnum,
+ )
+%>
+<BR>
+
+<% include('svc_domain/acct_defaults.html', $svc_domain,
+ 'part_svc' => $part_svc,
+ )
+%>
+<BR>
+
+<% include('svc_domain/dns.html', $svc_domain ) %>
+<BR>
+
+<% include('elements/svc_export_settings.html', $svc_domain) %>
<% joblisting({'svcnum'=>$svcnum}, 1) %>
@@ -140,6 +44,8 @@ Service #<% $svcnum %>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('View customer services');
+my $conf = new FS::Conf;
+
my($query) = $cgi->keywords;
$query =~ /^(\d+)$/;
my $svcnum = $1;
@@ -171,46 +77,6 @@ if ($pkgnum) {
my $part_svc = qsearchs('part_svc',{'svcpart'=> $cust_svc->svcpart } );
die "Unknown svcpart" unless $part_svc;
-my $email = '';
-if ($svc_domain->catchall) {
- my $svc_acct = qsearchs('svc_acct',{'svcnum'=> $svc_domain->catchall } );
- die "Unknown svcpart" unless $svc_acct;
- $email = $svc_acct->email;
-}
-
my $domain = $svc_domain->domain;
-my $status = 'Unknown';
-my %ops = ();
-
-my @exports = $part_svc->part_export();
-
-my $registrar;
-my $export;
-
-# Find the first export that does domain registration
-foreach (@exports) {
- $export = $_ if $_->can('registrar');
-}
-# If we have a domain registration export, get the registrar object
-if ($export) {
- $registrar = $export->registrar;
- my $domstat = $export->get_status( $svc_domain );
- if (defined($domstat->{'message'})) {
- $status = $domstat->{'message'};
- } elsif (defined($domstat->{'unregistered'})) {
- $status = 'Not registered';
- $ops{'register'} = "Register";
- } elsif (defined($domstat->{'status'})) {
- $status = $domstat->{'status'} . ' ' . $domstat->{'contact_email'} . ' ' . $domstat->{'last_update_time'};
- } elsif (defined($domstat->{'expdate'})) {
- $status = "Expires " . $domstat->{'expdate'};
- $ops{'renew'} = "Renew";
- $ops{'revoke'} = "Revoke";
- } else {
- $status = $domstat->{'reason'};
- $ops{'transfer'} = "Transfer";
- }
-}
-
</%init>
diff --git a/httemplate/view/svc_domain/acct_defaults.html b/httemplate/view/svc_domain/acct_defaults.html
new file mode 100644
index 000000000..0c072bff5
--- /dev/null
+++ b/httemplate/view/svc_domain/acct_defaults.html
@@ -0,0 +1,71 @@
+% if ( $communigate ) {
+
+ Account defaults
+ <% &ntable("#cccccc") %><TR><TD><% &ntable("#cccccc",2) %>
+
+ <% include('/view/elements/tr.html',
+ label=>'Password modification',
+ value=>$svc_domain->acct_def_password_selfchange ? 'YES' : 'NO',
+ )
+ %>
+ <% include('/view/elements/tr.html',
+ label=>'Password recovery',
+ value=>$svc_domain->acct_def_password_recover ? 'YES' : 'NO',
+ )
+ %>
+
+ <% include('/view/elements/tr.html',
+ label=>'Enabled services',
+ value=>$svc_domain->acct_def_cgp_accessmodes,
+ )
+ %>
+
+ <% include('/view/elements/tr.html',
+ label=>'Mail storage limit',
+ value=>$svc_domain->acct_def_quota,
+ )
+ %>
+
+ <% include('/view/elements/tr.html',
+ label=>'File storage limit',
+ value=>$svc_domain->acct_def_file_quota,
+ )
+ %>
+
+ <% include('/view/elements/tr.html',
+ label=>'Files limt',
+ value=>$svc_domain->acct_def_file_maxnum,
+ )
+ %>
+
+ <% include('/view/elements/tr.html',
+ label=>'File size limit',
+ value=>$svc_domain->acct_def_file_maxsize,
+ )
+ %>
+
+ <% include('/view/elements/tr.html',
+ label=>'Message delete method',
+ value=>$svc_domain->acct_def_cgp_deletemode,
+ )
+ %>
+
+ <% include('/view/elements/tr.html',
+ label=>'On logout remove trash',
+ value=>$svc_domain->acct_def_cgp_emptytrash,
+ )
+ %>
+
+ </TABLE></TD></TR></TABLE>
+
+% }
+<%init>
+
+my($svc_domain, %opt) = @_;
+
+my $part_svc = $opt{'part_svc'};
+
+my $communigate = scalar($part_svc->part_export('communigate_pro'));
+ # || scalar($part_svc->part_export('communigate_pro_singledomain'));
+
+</%init>
diff --git a/httemplate/view/svc_domain/basics.html b/httemplate/view/svc_domain/basics.html
new file mode 100644
index 000000000..db4fac150
--- /dev/null
+++ b/httemplate/view/svc_domain/basics.html
@@ -0,0 +1,134 @@
+Service #<B><% $svcnum %></B>
+% #if ( $conf->exists('svc_domain-edit_domain') ) {
+ | <A HREF="<%$p%>edit/svc_domain.cgi?<%$svcnum%>">Edit this domain</A>
+% #}
+
+<% &ntable("#cccccc") %><TR><TD><% &ntable("#cccccc",2) %>
+
+<TR>
+ <TD ALIGN="right">Service</TD>
+ <TD BGCOLOR="#ffffff"><% $part_svc->svc %></TD>
+</TR>
+
+<TR>
+ <TD ALIGN="right">Domain</TD>
+ <TD BGCOLOR="#ffffff">
+ <B><% $domain %></B>
+ <A HREF="<% ${p} %>misc/whois.cgi?custnum=<%$custnum%>;svcnum=<%$svcnum%>;domain=<%$domain%>">(view whois information)</A>
+ </TD>
+</TR>
+
+% if ($export) {
+ <TR>
+ <TD ALIGN="right">Registration status</TD>
+ <TD BGCOLOR="#ffffff"><B><% $status %></B>
+
+% if ( $FS::CurrentUser::CurrentUser->access_right('Manage domain registration') ) {
+% if ( defined($ops{'register'}) ) {
+ <A HREF="<% ${p} %>edit/process/domreg.cgi?op=register&svcnum=<% $svcnum %>">Register at <% $registrar->{'name'} %></A>&nbsp;
+% }
+% if ( defined($ops{'transfer'}) ) {
+ <A HREF="<% ${p} %>edit/process/domreg.cgi?op=transfer&svcnum=<% $svcnum %>">Transfer to <% $registrar->{'name'} %></A>&nbsp;
+% }
+% if ( defined($ops{'renew'}) ) {
+ <A HREF="<% ${p} %>edit/process/domreg.cgi?op=renew&svcnum=<% $svcnum %>&period=1">Renew at <% $registrar->{'name'} %></A>&nbsp;
+% }
+% if ( defined($ops{'revoke'}) ) {
+ <A HREF="<% ${p} %>edit/process/domreg.cgi?op=revoke&svcnum=<% $svcnum %>">Revoke</A>
+% }
+% }
+
+ </TD>
+ </TR>
+% }
+
+% if ( $communigate ) {
+
+ <TR>
+ <TD ALIGN="right">Administrator domain</TD>
+ <TD BGCOLOR="#ffffff">
+% if ( $svc_domain->parent_svcnum ) {
+% #XXX agent-virt aware the link
+ <A HREF="svc_domain.cgi?<% $svc_domain->parent_svcnum %>"><% $svc_domain->parent_svc_x->domain %></A>
+% } else {
+ <I>(none)</I>
+% }
+ </TD>
+ </TR>
+
+ <TR>
+ <TD ALIGN="right">Aliases</TD>
+ <TD BGCOLOR="#ffffff"><% $svc_domain->cgp_aliases %></TD>
+ </TR>
+
+% }
+
+% if ( $communigate && $svc_domain->max_accounts ) {
+ <TR>
+ <TD ALIGN="right">Maximum number of Accounts</TD>
+ <TD BGCOLOR="#ffffff"><% $svc_domain->max_accounts %></TD>
+ </TR>
+% }
+
+<TR>
+ <TD ALIGN="right">Catch all email</TD>
+ <TD BGCOLOR="#ffffff"><% $email ? "<B>$email</B>" : '<I>(none)</I>' %>
+% if ( $FS::CurrentUser::CurrentUser->access_right('Edit domain catchall') ) {
+ <A HREF="<% ${p} %>misc/catchall.cgi?<% $svcnum %>">(change)</A>
+% }
+ </TD>
+</TR>
+
+<TR>
+ <TD ALIGN="right">Enabled services</TD>
+ <TD BGCOLOR="#ffffff"><% $svc_domain->cgp_accessmodes %></TD>
+</TR>
+
+</TABLE></TD></TR></TABLE>
+
+<%init>
+
+my($svc_domain, %opt) = @_;
+my $svcnum = $svc_domain->svcnum;
+my $domain = $svc_domain->domain;
+my $custnum = $opt{'custnum'};
+my $part_svc = $opt{'part_svc'};
+
+my $communigate = scalar($part_svc->part_export('communigate_pro'));
+ # || scalar($part_svc->part_export('communigate_pro_singledomain'));
+
+my $email = '';
+if ($svc_domain->catchall) {
+ my $svc_acct = qsearchs('svc_acct',{'svcnum'=> $svc_domain->catchall } );
+ die "Unknown svcpart" unless $svc_acct;
+ $email = $svc_acct->email;
+}
+
+# Find the first export that does domain registration
+my @exports = grep $_->can('registrar'), $part_svc->part_export;
+my $export = $exports[0];
+# If we have a domain registration export, get the registrar object
+my $registrar;
+my $status = 'Unknown';
+my %ops = ();
+if ($export) {
+ $registrar = $export->registrar;
+ my $domstat = $export->get_status( $svc_domain );
+ if (defined($domstat->{'message'})) {
+ $status = $domstat->{'message'};
+ } elsif (defined($domstat->{'unregistered'})) {
+ $status = 'Not registered';
+ $ops{'register'} = "Register";
+ } elsif (defined($domstat->{'status'})) {
+ $status = $domstat->{'status'} . ' ' . $domstat->{'contact_email'} . ' ' . $domstat->{'last_update_time'};
+ } elsif (defined($domstat->{'expdate'})) {
+ $status = "Expires " . $domstat->{'expdate'};
+ $ops{'renew'} = "Renew";
+ $ops{'revoke'} = "Revoke";
+ } else {
+ $status = $domstat->{'reason'};
+ $ops{'transfer'} = "Transfer";
+ }
+}
+
+</%init>
diff --git a/httemplate/view/svc_domain/dns.html b/httemplate/view/svc_domain/dns.html
new file mode 100644
index 000000000..f6f8c71c7
--- /dev/null
+++ b/httemplate/view/svc_domain/dns.html
@@ -0,0 +1,94 @@
+<SCRIPT>
+ function areyousure(href, message) {
+ if ( confirm(message) == true )
+ window.location.href = href;
+ }
+ function slave_areyousure() {
+ return confirm("Remove all records and slave from " + document.SlaveForm.recdata.value + "?");
+ }
+</SCRIPT>
+
+DNS records
+% my @records; if ( @records = $svc_domain->domain_record ) {
+
+ <% include('/elements/table-grid.html') %>
+
+% my $bgcolor1 = '#eeeeee';
+% my $bgcolor2 = '#ffffff';
+% my $bgcolor = $bgcolor2;
+
+ <tr>
+ <th CLASS="grid" BGCOLOR="#cccccc">Zone</th>
+ <th CLASS="grid" BGCOLOR="#cccccc">Type</th>
+ <th CLASS="grid" BGCOLOR="#cccccc">Data</th>
+ </tr>
+
+% foreach my $domain_record ( @records ) {
+% my $type = $domain_record->rectype eq '_mstr'
+% ? "(slave)"
+% : $domain_record->recaf. ' '. $domain_record->rectype;
+
+
+ <tr>
+ <td CLASS="grid" BGCOLOR="<% $bgcolor %>"><% $domain_record->reczone %></td>
+ <td CLASS="grid" BGCOLOR="<% $bgcolor %>"><% $type %></td>
+ <td CLASS="grid" BGCOLOR="<% $bgcolor %>"><% $domain_record->recdata %>
+
+% unless ( $domain_record->rectype eq 'SOA'
+% || ! $FS::CurrentUser::CurrentUser->access_right('Edit domain nameservice')
+% ) {
+% ( my $recdata = $domain_record->recdata ) =~ s/"/\\'\\'/g;
+ (<A HREF="javascript:areyousure('<%$p%>misc/delete-domain_record.cgi?<%$domain_record->recnum%>', 'Delete \'<% $domain_record->reczone %> <% $type %> <% $recdata %>\' ?' )">delete</A>)
+% }
+ </td>
+ </tr>
+
+
+% if ( $bgcolor eq $bgcolor1 ) {
+% $bgcolor = $bgcolor2;
+% } else {
+% $bgcolor = $bgcolor1;
+% }
+
+% }
+
+ </table>
+% }
+
+% if ( $FS::CurrentUser::CurrentUser->access_right('Edit domain nameservice') ) {
+ <FORM METHOD="POST" ACTION="<%$p%>edit/process/domain_record.cgi">
+ <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%$svcnum%>">
+ <INPUT TYPE="text" NAME="reczone">
+ <INPUT TYPE="hidden" NAME="recaf" VALUE="IN"> IN
+ <SELECT NAME="rectype">
+% foreach (qw( A NS CNAME MX PTR TXT) ) {
+ <OPTION VALUE="<%$_%>"><%$_%></OPTION>
+% }
+ </SELECT>
+ <INPUT TYPE="text" NAME="recdata">
+ <INPUT TYPE="submit" VALUE="Add record">
+ </FORM>
+
+ <FORM NAME="SlaveForm" METHOD="POST" ACTION="<%$p%>edit/process/domain_record.cgi">
+ <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%$svcnum%>">
+% if ( @records ) {
+ Delete all records and
+% }
+ Or slave from nameserver IP
+ <INPUT TYPE="hidden" NAME="svcnum" VALUE="<%$svcnum%>">
+ <INPUT TYPE="hidden" NAME="reczone" VALUE="@">
+ <INPUT TYPE="hidden" NAME="recaf" VALUE="IN">
+ <INPUT TYPE="hidden" NAME="rectype" VALUE="_mstr">
+ <INPUT TYPE="text" NAME="recdata">
+ <INPUT TYPE="submit" VALUE="Slave domain" onClick="return slave_areyousure()">
+ </FORM>
+
+% }
+
+<%init>
+
+my($svc_domain, %opt) = @_;
+my $svcnum = $svc_domain->svcnum;
+
+</%init>
+
diff --git a/httemplate/view/svc_forward.cgi b/httemplate/view/svc_forward.cgi
index 0847a5e65..43d8a4e8b 100755
--- a/httemplate/view/svc_forward.cgi
+++ b/httemplate/view/svc_forward.cgi
@@ -1,12 +1,26 @@
-<% include('/elements/header.html', 'Mail Forward View', menubar(
- ( ( $pkgnum || $custnum )
- ? ( "View this customer (#$display_custnum)" => "${p}view/cust_main.cgi?$custnum",
- )
- : ( "Cancel this (unaudited) mail forward" =>
- "${p}misc/cancel-unaudited.cgi?$svcnum" )
- )
-))
-%>
+% if ( $custnum ) {
+
+ <% include("/elements/header.html","View mail forward") %>
+ <% include( '/elements/small_custview.html', $custnum, '', 1,
+ "${p}view/cust_main.cgi") %>
+ <BR>
+
+% } else {
+
+ <% include("/elements/header.html",'View mail forward', menubar(
+ "Cancel this (unaudited) mail forward" =>
+ "javascript:areyousure('${p}misc/cancel-unaudited.cgi?$svcnum')",
+ ))
+ %>
+
+ <SCRIPT>
+ function areyousure(href) {
+ if (confirm("Permanently delete this mail forward?") == true)
+ window.location.href = href;
+ }
+ </SCRIPT>
+
+% }
<A HREF="<% $p %>edit/svc_forward.cgi?<% $svcnum %>">Edit this information</A>
diff --git a/httemplate/view/svc_mailinglist.cgi b/httemplate/view/svc_mailinglist.cgi
new file mode 100644
index 000000000..f646a417d
--- /dev/null
+++ b/httemplate/view/svc_mailinglist.cgi
@@ -0,0 +1,71 @@
+<% include('elements/svc_Common.html',
+ 'table' => 'svc_mailinglist',
+ %opt,
+ )
+%>
+<%init>
+
+my %opt = ();
+
+my $info = FS::svc_mailinglist->table_info;
+
+$opt{'name'} = $info->{'name'};
+
+my $fields = $info->{'fields'};
+my %labels = map { $_ => ( ref($fields->{$_})
+ ? $fields->{$_}{'label'}
+ : $fields->{$_}
+ );
+ }
+ keys %$fields;
+
+#$opt{'fields'} = [ keys %$fields ];
+$opt{'fields'} = [
+ 'username',
+ 'domain',
+ 'listname',
+ 'reply_to',
+ 'remove_from',
+ 'reject_auto',
+ 'remove_to_and_cc',
+];
+
+$opt{'labels'} = \%labels;
+
+$opt{'html_foot'} = sub {
+ my $svc_mailinglist = shift;
+ my $listnum = $svc_mailinglist->listnum;
+
+ my $sql = 'SELECT COUNT(*) FROM mailinglistmember WHERE listnum = ?';
+ my $sth = dbh->prepare($sql) or die dbh->errstr;
+ $sth->execute($listnum) or die $sth->errstr;
+ my $num = $sth->fetchrow_arrayref->[0];
+
+ my $add_url = $p."edit/mailinglistmember.html?listnum=$listnum";
+
+ my $add_link = include('/elements/init_overlib.html').
+ include('/elements/popup_link.html',
+ 'action' => $add_url,
+ 'label' => 'add',
+ 'actionlabel' => 'Add list member',
+ 'width' => 392,
+ 'height' => 192,
+ );
+
+ ntable('#cccccc').'<TR><TD>'.ntable('#cccccc',2). qq[
+ <TR>
+ <TD>List members</TD>
+ <TD BGCOLOR="#ffffff">
+ $num members
+ ( <A HREF="${p}search/mailinglistmember.html?listnum=$listnum">view</A>
+ | $add_link )
+ </TD>
+ </TR>
+ </TABLE></TD></TR></TABLE>
+
+ <BR><BR>
+ ]. include('svc_export_settings.html', $svc_mailinglist);
+
+};
+
+</%init>
diff --git a/httemplate/view/svc_phone.cgi b/httemplate/view/svc_phone.cgi
index c5fce62d9..75591c747 100644
--- a/httemplate/view/svc_phone.cgi
+++ b/httemplate/view/svc_phone.cgi
@@ -1,15 +1,11 @@
<% include('elements/svc_Common.html',
'table' => 'svc_phone',
- 'fields' => [qw(
- countrycode
- phonenum
- sip_password
- pin
- phone_name
- )],
+ 'fields' => \@fields,
'labels' => {
'countrycode' => 'Country code',
'phonenum' => 'Phone number',
+ 'domain' => 'Domain',
+ 'pbx_title' => 'PBX',
'sip_password' => 'SIP password',
'pin' => 'PIN',
'phone_name' => 'Name',
@@ -19,10 +15,36 @@
%>
<%init>
+my $conf = new FS::Conf;
+my $countrydefault = $conf->config('countrydefault') || 'US';
+
+my @fields = qw( countrycode phonenum );
+push @fields, 'domain' if $conf->exists('svc_phone-domain');
+push @fields, qw( pbx_title sip_password pin phone_name );
+
my $html_foot = sub {
my $svc_phone = shift;
###
+ # E911 Info
+ ###
+
+ my $e911 =
+ 'E911 Information'.
+ &ntable("#cccccc"). '<TR><TD>'. ntable("#cccccc",2).
+ '<TR><TD>Location</TD>'.
+ '<TD BGCOLOR="#FFFFFF">'.
+ $svc_phone->location_label( 'join_string' => '<BR>',
+ 'double_space' => ' &nbsp; ',
+ 'escape_function' => \&encode_entities,
+ 'countrydefault' => $countrydefault,
+ ).
+ '</TD></TR>'.
+ '</TABLE></TD></TR></TABLE>'.
+ '<BR>'
+ ;
+
+ ###
# Devices
###
@@ -56,6 +78,7 @@ my $html_foot = sub {
'<TH CLASS="grid" BGCOLOR="#cccccc">Type</TH>'.
'<TH CLASS="grid" BGCOLOR="#cccccc">MAC Addr</TH>'.
'<TH CLASS="grid" BGCOLOR="#cccccc"></TH>'.
+ '<TH CLASS="grid" BGCOLOR="#cccccc"></TH>'.
'</TR>';
my $bgcolor1 = '#eeeeee';
my $bgcolor2 = '#ffffff';
@@ -71,10 +94,12 @@ my $html_foot = sub {
my $td = qq(<TD CLASS="grid" BGCOLOR="$bgcolor">);
my $devicenum = $phone_device->devicenum;
+ my $export_links = join( '<BR>', @{ $phone_device->export_links } );
$devices .= '<TR>'.
$td. $phone_device->part_device->devicename. '</TD>'.
$td. $phone_device->mac_addr. '</TD>'.
+ $td. $export_links. '</TD>'.
"$td( ".
qq(<A HREF="${p}edit/phone_device.html?$devicenum">edit</A> | ).
qq(<A HREF="javascript:areyousure('${p}misc/delete-phone_device.html?$devicenum')">delete</A>).
@@ -118,6 +143,7 @@ my $html_foot = sub {
# concatenate & return
###
+ $e911.
$devices.
join(' | ', @links ). '<BR>'.
join(' | ', @ilinks). '<BR>';
diff --git a/rpm/freeside.spec b/rpm/freeside.spec
index 931227043..d6e4967dd 100644
--- a/rpm/freeside.spec
+++ b/rpm/freeside.spec
@@ -1,5 +1,5 @@
%{!?_initrddir:%define _initrddir /etc/rc.d/init.d}
-%{!?version:%define version 1.9.1}
+%{!?version:%define version 1.9.2}
%{!?release:%define release 8}
Summary: Freeside ISP Billing System
diff --git a/rt/etc/rt.spec b/rt/etc/rt.spec
deleted file mode 100644
index 14200c1f3..000000000
--- a/rt/etc/rt.spec
+++ /dev/null
@@ -1,137 +0,0 @@
-Summary: rt Request Tracker
-
-Name: rt
-Version: 2.0.9pre5
-Release: 1
-Group: Applications/Web
-Packager: Jesse Vincent <jesse@bestpractical.com>
-Vendor: http://www.fsck.com/projects/rt
-Requires: perl
-Requires: mod_perl > 1.22
-Requires: perl-DBI >= 1.18
-Requires: perl-DBIx-DataSource >= 0.02
-Requires: perl-DBIx-SearchBuilder >= 0.47
-Requires: perl-HTML-Parser
-Requires: perl-MLDBM
-Requires: perl-libnet
-Requires: perl-CGI.pm >= 2.78
-Requires: perl-Params-Validate >= 0.02
-Requires: perl-HTML-Mason >= 0.896
-Requires: perl-libapreq
-Requires: perl-Apache-Session >= 1.53
-Requires: perl-MIME-tools >= 5.411
-Requires: perl-MailTools >= 1.20
-Requires: perl-Getopt-Long >= 2.24
-Requires: perl-Tie-IxHash
-Requires: perl-TimeDate
-Requires: perl-Time-HiRes
-Requires: perl-Text-Wrapper
-Requires: perl-Text-Template
-Requires: perl-File-Spec >= 0.8
-Requires: perl-FreezeThaw
-Requires: perl-Storable
-Requires: perl-File-Temp
-Requires: perl-Log-Dispatch >= 1.6
-
-Source: http://www.fsck.com/pub/rt/release/%{name}.tar.gz
-
-Copyright: GPL
-BuildRoot: /var/tmp/rt-root
-
-%description
-RT is an industrial-grade ticketing system. It lets a group
-of people intelligently and efficiently manage requests
-submitted by a community of users. RT is used by systems
-administrators, customer support staffs, NOCs, developers
-and even marketing departments at over a thousand sites
-around the world.
-
-%prep
-groupadd rt || true
-%setup -q -n %{name}
-
-%build
-
-%install
-
-if [ x$RPM_BUILD_ROOT != x ]; then
-rm -rf $RPM_BUILD_ROOT
-fi
-
-#
-# Perform all the non-site specfic steps whilst building the package
-#
-make dirs libs-install html-install bin-install DESTDIR=$RPM_BUILD_ROOT
-#
-# fixperms needs these, so make fake empty files
-touch $RPM_BUILD_ROOT/opt/rt2/etc/insertdata $RPM_BUILD_ROOT/opt/rt2/etc/config.pm
-make fixperms insert-install WEB_USER=www DESTDIR=$RPM_BUILD_ROOT
-
-#
-# Copy in the files needed again after install
-#
-mkdir -p $RPM_BUILD_ROOT/opt/rt2/postinstall/bin
-cp -rp Makefile etc tools $RPM_BUILD_ROOT/opt/rt2/postinstall
-cp -rp bin/initacls.* $RPM_BUILD_ROOT/opt/rt2/postinstall/bin
-
-# logging in /var/log/rt2
-mkdir -p $RPM_BUILD_ROOT/var/log/rt2
-chown www $RPM_BUILD_ROOT/var/log/rt2
-chgrp rt $RPM_BUILD_ROOT/var/log/rt2
-chmod ug=rwx,o= $RPM_BUILD_ROOT/var/log/rt2
-
-%clean
-if [ x$RPM_BUILD_ROOT != x ]; then
-rm -rf $RPM_BUILD_ROOT
-fi
-
-#
-# A new rt groups is required
-#
-%pre
-groupadd rt || true
-
-#
-# Show the user the site specific steps required after install
-#
-%post
-cat <<EOF
------------------------------------------------------------------------
-rt2 installation is complete. Now create the rt2 database by running:
------------------------------------------------------------------------
-
-# cd /opt/rt2/postinstall
-# make config-replace initialize.mysql insert RT_LOG_PATH=/var/log/rt2 DB_RT_PASS=new_rt_user_password
-
-Choose your own new_rt_user_password. You will need the mysql root password.
-You can try Pg or Oracle instead of mysql - untested.
-
-Review and configure your site specific details in /opt/rt2/etc/config.pm
-EOF
-
-%preun
-
-%files
-%dir /opt/rt2
-/opt/rt2/bin
-/opt/rt2/WebRT
-/opt/rt2/lib
-/opt/rt2/local
-/opt/rt2/man
-/opt/rt2/postinstall
-%dir /opt/rt2/etc
-/opt/rt2/etc/insertdata
-%config /opt/rt2/etc/config.pm
-%dir /var/log/rt2
-
-%changelog
-* Mon Sep 24 2001 Jesse Vincent <jesse@bestpractical.com>
- Switch to rt DESTDIR support
-* Fri Sep 14 2001 Cris Bailiff <c.bailiff@devsecure.com>
- Fix permissions on created /var/log/rt2 and roll in 2.0.7
-* Tue Sep 4 2001 Cris Bailiff <c.bailiff@devsecure.com>
-- created initial spec file
-* Tue Sep 4 2001 Cris Bailiff <c.bailiff@devsecure.com>
-- created initial spec file
-* Tue Sep 4 2001 Cris Bailiff <c.bailiff@devsecure.com>
-- created initial spec file
diff --git a/rt/lib/RT/URI/freeside.pm b/rt/lib/RT/URI/freeside.pm
index d73dbacad..57c2a2c4e 100644
--- a/rt/lib/RT/URI/freeside.pm
+++ b/rt/lib/RT/URI/freeside.pm
@@ -132,7 +132,7 @@ sub _FreesideURILabel {
my $self = shift;
- $RT::Logger->debug("Called _FreesideURILabel()");
+ #$RT::Logger->debug("Called _FreesideURILabel()");
return unless (exists($self->{'fstable'}) and
exists($self->{'fspkey'}));
@@ -140,17 +140,21 @@ sub _FreesideURILabel {
my $label;
my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'});
- if ($table ne 'cust_main') {
- warn "FS::${table} not currently supported";
- return;
- }
+ #if ($table ne 'cust_main') {
+ # warn "FS::${table} not currently supported";
+ # return;
+ #}
my $rec = $self->_FreesideGetRecord();
- if (ref($rec) eq 'HASH' and $table eq 'cust_main') {
+ if (ref($rec) eq 'HASH' && $table eq 'cust_main') {
my $name = $rec->{'last'} . ', ' . $rec->{'first'};
$name = $rec->{'company'} . " ($name)" if $rec->{'company'};
$label = "$pkey: $name";
+ } elsif ( $table eq 'cust_svc' && ref($rec) && $rec->{'_object'} ) {
+ #Internal only
+ my($l,$v) = $rec->{'_object'}->label;
+ $label = "$l: $v";
} else {
$label = "$pkey: $table";
}