Presentation is loading. Please wait.

Presentation is loading. Please wait.

Project Management Systems - Document Control

Similar presentations


Presentation on theme: "Project Management Systems - Document Control"— Presentation transcript:

1 Project Management Systems - Document Control
LIFE TIME OF SERVICE Document Control at E.S. Fox Ltd. Just new with Docushare CPX – if you were expecting the experts at this presentation, you may need to check out the other presentation. Pictured here is the “Comfort Maple” a tree which represents the life time of service that E.S. Fox Ltd. Has undertaken. This project represents a addition to the many excellent project management tools that we have for undertaking large and small projects. SINCE 1934

2 Jacob Westerhof Corporate Business Systems Manager E.S. Fox Ltd.
My name is Jacob Westerhof IT Manager 16 years with E.S. Fox Ltd. Have a programming background PMP certification for 5 years Our IT department has 10 people and besides supporting the end-user computer needs, we have developed our own accounting, project management and cost control and scheduling systems. Most of our development is utilzing Oracle Database and Oracle Forms and Reports

3 E.S. FOX LTD-CONSTRUCTORS
Company founded in as Residential/Commercial Plumbing & Heating Company (74 years service) Privately owned (3rd-generation) Canadian Corporation Revenues past 4 Years Approximately $150 Million on Average Exceeded $200 Million in one Year Salaried Employees Field Employees Peak (1900)

4

5

6

7

8

9

10 Specific Challenges Multi-sites (branches and offices)
Job sites (trailer, dial-up connection) Mobile Users Technology challenged users Large amount of correspondence via Legal requirements Drawing Control Head Office and Branch offices keeping duplicates of documentation – each department at Head Office is run as own kingdom Mobile users using various types of connection – dial-up, high speed and wireless Several older project managers with many years of experience in the field Huge amounts of correspondence Legal and customer requriements for document retention (projects sometimes ended with leins and pending court cases) “For Bid”, “For Construction” “As Built” and many versions of drawings (many of which are in electronic format)

11 E.S. Fox FireKings Hockey team
Jim Venibles 52 years of service Many older trades people – computer are not a priority in their lives Pipe Fitters, Welders Wipe grease off finger before typing.

12 Document Control/Management Project - Timeline
2006 Reviewed requirements for Project Management and Document creation/retention Decision to undertake a pilot project of this product Pilot Success and decision to proceed with implementation E.S. Fox wanted a solution for document control and management Project Oriented – needed solution that fits with company and industry Most of our immediate problems with (drawings, correspondence) Did need to implement and archiving tools ( Xtender)

13 Document Control/Management Project - Timeline
2007 Implemented with Docushare CPX 6 Licenses 110 Docushare CPX 200 Docushare 100 Read Only Oracle Database 10G Decided that user interface was more important than industry specific tools and practices

14 Document Control/Management Project - Timeline
2008 Training Template Automation Clients (Explorer and Outlook) Additional Job Cost/Scheduling Report Integration Oracle Reports Departmental Usage Decided that user interface was more important than industry specific tools and practices

15 Document Control/Management Project - Timeline
2009 Template Automation (more) Training Videos Docushare 6.5.2 ScanFlowStore Live Date for all new jobs (Dec 1/09) Decided that user interface was more important than industry specific tools and practices

16 Hardware/Software Structure
Utilizing two HP Blades Runing VMWare Two Logical Windows 2003 Servers Current Database is 8 Gig Current Document Drive has 125 Gig used Decided that user interface was more important than industry specific tools and practices

17 Hardware/Software Structure
Decided that user interface was more important than industry specific tools and practices

18

19

20 Document Control/Management Training
Methods Used Decided that user interface was more important than industry specific tools and practices

21 Document Control/Management Training
In Class PowerPoint, Exercises and take-away document Custom Training Tutorials Created using Camtasia URL links from Docushare Run on Windows Media Server Decided that user interface was more important than industry specific tools and practices

22 Document Control/Management Training
Decided that user interface was more important than industry specific tools and practices

23 Document Review

24 Template Security

25 Template Job Setup We hope to have a template area that will provide a consistent setup for all projects using Docushare. Will give Management an easier way of finding information across projects Will promote a “best of practices” approach for less

26 Template Job Setup Uses only DSExport and DSImport
Changes the XML as needed Creates Project Specific Groups Creates Collection Structure We hope to have a template area that will provide a consistent setup for all projects using Docushare. Will give Management an easier way of finding information across projects Will promote a “best of practices” approach for less

27 Template Job Setup We hope to have a template area that will provide a consistent setup for all projects using Docushare. Will give Management an easier way of finding information across projects Will promote a “best of practices” approach for less

28 Template Job Setup We hope to have a template area that will provide a consistent setup for all projects using Docushare. Will give Management an easier way of finding information across projects Will promote a “best of practices” approach for less

29 Template Job Setup We hope to have a template area that will provide a consistent setup for all projects using Docushare. Will give Management an easier way of finding information across projects Will promote a “best of practices” approach for less

30 Template Job Setup We hope to have a template area that will provide a consistent setup for all projects using Docushare. Will give Management an easier way of finding information across projects Will promote a “best of practices” approach for less

31 Template Job Setup Runs every 30 minutes
Scans the Custom Oracle Accounting system for new jobs Creates collections and groups and group membership We hope to have a template area that will provide a consistent setup for all projects using Docushare. Will give Management an easier way of finding information across projects Will promote a “best of practices” approach for less

32 Template Job Setup We hope to have a template area that will provide a consistent setup for all projects using Docushare. Will give Management an easier way of finding information across projects Will promote a “best of practices” approach for less

33 Template Job Setup We hope to have a template area that will provide a consistent setup for all projects using Docushare. Will give Management an easier way of finding information across projects Will promote a “best of practices” approach for less

34 Template Job Setup We hope to have a template area that will provide a consistent setup for all projects using Docushare. Will give Management an easier way of finding information across projects Will promote a “best of practices” approach for less

35 Scan to Xerox Phaser 6180MFP

36 Scan to

37 Scan to

38 Scan to

39 Scan to

40 FAX to Docushare

41 Windows Client

42 Outlook Client Outlook Web Access Outlook 2003

43 Job Cost/Scheduling Reports

44 Job Cost/Scheduling Reports

45 Legacy Reports

46 Legacy Reports

47 Oracle Reports Need to have additional report capabilities
Utilize existing Oracle programming staff and skills Types of Reports Requested Security Report (done) Directory Structure Report (done) Drawing Control Report

48 Docushare – Hierarchy Report
select handle_id from &cp_where_clause order by object_title select * from ( select unique d.handle_id, sys_connect_by_path(d.object_title, '[->]') as path, level, lpad(' ', (level - 1) * 2) || D.object_title as padded_name, 'Collection - ' || d.handle_index object_type from v, d where d.handle_id = v.source_id and d.handle_class=1 start with source_id=:handle_id connect by nocycle prior destination_id=source_id and linktype in (1,2,8,10,11,13,14,16,18) and source_id <> destination_id) order by path select d.handle_id, d.handle_class, lpad(' ', (:cp_level) * 2) || d.object_title as padded_name, substr(trim(c.class_name),1,15) || ' - ' || d.handle_index as class_name from d, l, c where d.handle_id=l.destination_id and l.source_id = :handle_id2 and d.handle_class in (2,8,10,11,13,14,16,18) and d.handle_class=c.class_id and :cp_include_documents = 'Y'

49 Docushare – Security Changes
select * from ( SELECT unique v.source_id as template_handle, d.object_title, 'Collection-' || to_char (d.handle_index) as handle_index, level, lpad(' ', (level - 1) * 2) || D.object_title as padded_name, sys_connect_by_path(d.object_title, '|') as path from v, d where d.handle_id = v.source_id and   d.handle_class=1 START WITH source_id = :cp_template_collection CONNECT BY PRIOR destination_id = source_id and linktype in (1,2,8,10,11,13,14,16,18) and source_id <> destination_id) order by path SELECT unique v.source_id as project_handle, level, sys_connect_by_path(d.object_title, '|') as path, 'Collection-' || to_char (d.handle_index) as project_handle_index START WITH source_id = :cp_project_collection CONNECT BY PRIOR destination_id = source_id and linktype in (1,2,8,10,11,13,14,16,18) where   replace(:path, :cp_template_title) = replace(path, :cp_project_title) select d.object_title, a.SEARCHER,a.READER,a.WRITER,a.MANAGER, d.handle_class, a.user_group_class, a.user_group_index,a.handle_id, decode (a.user_group_class, 4, 'Group', 'User') || '-'|| d.object_title as user_group from a, d where a.handle_id = :template_handle and d.handle_index = a.user_group_index and d.handle_class = a.user_group_class and  (not exists ( select 1                 from   a1, d1                 where  a1.user_group_class = a.user_group_class                 and    a1.handle_id = :project_handle                 and    d1.handle_class = a1.user_group_class                 and    d1.handle_index = a1.user_group_index                 and    a1.reader >= a.reader                 and    a1.writer >= a.writer                 and    a1.manager >= a.manager                 and    a1.searcher >= a.searcher                 and    (trim (replace (d.object_title, :cp_template_job)) = trim (replace (d1.object_title, :cp_project_job))                 OR     d.object_title = d1.object_title)                     ) OR    :cp_differences_only <> 'Y') order by d.object_title select d.object_title, a.SEARCHER,a.READER,a.WRITER,a.MANAGER, d.handle_class, a.user_group_class, a.user_group_index,a.handle_id, decode (a.user_group_class, 4, 'Group', 'User') || '-'|| d.object_title as user_group1 where a.handle_id = :project_handle                 and    a1.handle_id = :template_handle                 and    (trim (replace (d.object_title, :cp_project_job)) = trim (replace (d1.object_title, :cp_template_job))

50 Docushare – Security Added
select * from ( where d.handle_id = v.source_id from v, d SELECT unique v.source_id handle_id, d.object_title, level, lpad(' ', (level - 1) * 2) || D.object_title || '  - ' || 'Collection-' || to_char (d.handle_index) as padded_name, d.handle_class, sys_connect_by_path(d.object_title, '|') as path and    d.handle_class=1 and linktype in (1,2,8,10,11,13,14,16,18) CONNECT BY PRIOR destination_id = source_id START WITH source_id = :cp_project_collection and source_id <> destination_id) order by path SELECT unique v.source_id template_id, level as lev, sys_connect_by_path(d.object_title, '|') as path START WITH source_id = :cp_template_collection ) order by lev desc and source_id <> destination_id where lev <= :cp_level substr (replace(:path, :cp_project_title), 1, instr (replace(:path, :cp_project_title), '|', 1, lev + 1) - 1)) or replace (path, :cp_template_title) = and (replace(:path, :cp_project_title) = replace(path, :cp_template_title) and rownum=1 from a, d select d.object_title, a.SEARCHER,a.READER,a.WRITER,a.MANAGER, d.handle_class, a.user_group_class, a.user_group_index,a.handle_id, decode (a.user_group_class, 4, 'Group', 'User') || '-'|| d.object_title as user_group1 where a.handle_id = :handle_id1 and  (not exists ( and d.handle_class = a.user_group_class and d.handle_index = a.user_group_index select 1                 and    a1.handle_id = :template_id                 where  a1.user_group_class = a.user_group_class                 from   a1, d1                 and    a1.reader >= a.reader                 and    d1.handle_index = a1.user_group_index                 and    d1.handle_class = a1.user_group_class                 and    a1.writer >= a.writer                 and    (trim (replace (d.object_title, :cp_project_job)) = trim (replace (d1.object_title, :cp_template_job))                 and    a1.searcher >= a.searcher                 and    a1.manager >= a.manager                 OR     d.object_title = d1.object_title)                     and not exists ( -- checks to make sure that this permission doesnt belong to the owner of the document OR    :cp_differences_only <> 'Y')                from l                and     l.destination_class = a.user_group_class                and     l.linktype = 11                where l.source_id = :handle_id1                and     l.destination_index = a.user_group_index order by d.object_title select l.destination_id, d.handle_index, d.handle_class, lpad(' ', (:cp_level) * 2) || c.class_name || '-' || d.handle_index || '  - ' || trim(D.object_title)  as document_disp from l, d, c and d.handle_class = c.class_id and d.handle_id = l.destination_id where source_id = :handle_id1 order by object_title and d.handle_class in (2,8,10,11,13,14,16,18) where a.handle_id = :destination_id1 -- checks permissions against that of the template permissions.  the wont be included if the template has the same or more permissions than this document                where l.source_id = :destination_id1                and     l.destination_class = a.user_group_class

51 Docushare – Active/Archived Jobs
select unique job_number from ( select decode(length(job_gl_number), 5, 0) || substr (job_gl_number, 0, decode(length(job_gl_number), 5, 1, 6, 2)) || '-' || substr (job_gl_number, decode(length(job_gl_number), 5, 2, 6, 3)) as job_number from v_all_jobs where company_code='FX' and docushare_flag='Y' union all select d.object_title from v, d where d.handle_id = v.destination_id and   d.handle_class=1 and   v.source_id in ( ,330001) ) order by 1 sub-query 1  (selects details on docushare jobs) SELECT unique d.object_title, 'Active' as Source, d.object_summary, 'Collection-' || d.handle_index as handle_index and   v.source_id = and   trim (d.object_title) = :job_number union SELECT unique d.object_title, 'Archive' as Source, d.object_summary, 'Collection-' || d.handle_index and   v.source_id = sub query 2 (selects details on p2000 jobs) select decode(length(j.job_gl_number), 5, 0) || substr (j.job_gl_number, 0, decode(length(j.job_gl_number), 5, 1, 6, 2)) || '-' || substr (j.job_gl_number, decode(length(j.job_gl_number), 5, 2, 6, 3)) as job_gl_number, 'Current', customer_name ||' - ' || description_line_1 as customer_name from jobs j where job_gl_number = replace (:job_number, '-', '') and company_code = 'FX' select decode(length(h.job_gl_number), 5, 0) || substr (h.job_gl_number, 0, decode(length(h.job_gl_number), 5, 1, 6, 2)) || '-' || substr (h.job_gl_number, decode(length(h.job_gl_number), 5, 2, 6, 3)), 'History', customer_name || ' - ' || description_line_1 from job_history h                 function CF_2FORMULA0013 return Number is   they will be marked with the differences flag in the report   (history/ current table in p2000, archive/active projects in docushare).  if they are found in different locations (history/current)   the cursors looks for a job number in docushare / p2000.  They are marked as current / history depending on where they are found /*                 cursor c_ds is   */                 and   d.handle_class=1                 and   v.source_id in (320001,330001)                 where d.handle_id = v.destination_id                 select decode (v.source_id, , 'Current', 'History')                 from v, d                 and   trim (d.object_title) = :job_number;                 -- the next line decodes the formatted job number back to its non formatted form in the jobs tables in p2000                 where j.job_gl_number = decode(substr(:job_number,0,1), '0', replace(substr(:job_number, 2),'-',''), replace (:job_number, '-',''))                 from jobs j                 select 'Current'                 cursor c_p2000 is                 and   j.docushare_flag = 'Y'                 and   j.company_code= 'FX'                 where h.job_gl_number = decode(substr(:job_number,0,1), '0', replace(substr(:job_number, 2),'-',''), replace (:job_number, '-',''))                 and   h.company_code= 'FX'                 from  job_history h                 select 'History'                 union                 and   h.docushare_flag = 'Y'; begin                 l_temp varchar2 (10);                 l_ds varchar2 (10) := '';                   l_p2000 varchar2 (10) := '';   This program is used to filter out the jobs and display apropriate messages based off of the parameter.   /*   :cp_differences := '';   :cp_display_job := 'N';                 :cp_display_p2000_msg := 'N'; -- report is set to show jobs in both docushare and p2000   if :cp_match_indicator = 'B' THEN                                           :cp_display_ds_msg := 'N';                                 open c_p2000;                                 fetch c_p2000 into l_p2000;                 if c_ds%found then                 open c_ds;                 fetch c_ds into l_ds;                                 if c_p2000%found then                                                 end if;                                 end if;                                                                 :cp_differences := 'X';                                                 if l_ds <> l_p2000 THEN                                                 :cp_display_job := 'Y';                 end if;                                 close c_p2000;   elsif :cp_match_indicator = 'P' THEN                                 -- report is set to show jobs in p2000 but not docushare                                close c_ds;                 :cp_display_ds_msg := 'Y';                  if c_p2000%found then                                 open c_ds;                 fetch c_p2000 into l_temp;                 open c_p2000;                                  :cp_differences := 'X';                                                                    if c_ds%notfound then                                 fetch c_ds into l_temp; -- report is set to show jobs in docushare but not p2000                  close c_p2000;                                 close c_ds;   elsif :cp_match_indicator = 'D' THEN                 :cp_differences := 'X';                    :cp_display_ds_msg := 'Y';                           fetch c_ds into l_temp;                                 if c_p2000%notfound then                                 fetch c_p2000 into l_temp;   elsif :cp_match_indicator = 'N' THEN -- Report is set to show jobs in docushare or p2000 but not both                               :cp_display_ds_msg := 'N';                                                    :cp_display_p2000_msg := 'Y';                 else                                                 :cp_display_ds_msg := 'Y';                                 close c_p2000;                     else -- Report is set to show all jobs in both systems                 open c_p2000;                 fetch c_p2000 into l_p2000;                                 :cp_display_p2000_msg := 'N';                                 :cp_display_ds_msg := 'N';                                                          :cp_display_job := 'Y';                                                 :cp_differences := 'X';                                                    if c_p2000%notfound then                                 :cp_display_P2000_msg := 'Y';                                 :cp_display_ds_msg := 'Y';                 if c_ds%notfound then   end if;                   end if;                                                 :cp_differences := 'X';                                  if l_ds <> l_p2000 THEN  end;  return 0;

52 Departmental Usage Training Started at Head Office
Departments within Head Office saw uses for Docushare immediately Encouraged

53 Departmental Usage

54 Integration Not going to train users to use the subject/first line TAGS We needed a easier way to provide for integration Discussed with Ann Bernath of NASA, JPL Electronic Library Serice Implemented alternate integrations as follows:

55 E-mail Integration Created group in Docushare
Linked Group to Collection Provided alias on Group User now sends to and this is put into the collection linked to the docushare group

56 Integration Needed an OpenBSD Linux server running SENDMAIL with a virtusertable (could not use EXCHANGE) @ds.esfox.com Turned on integration in Docushare **created these groups (10) on our template and modified template copy to also copy these groups

57 Challenges Ahead

58 Challenges Ahead More Oracle reports More Template Automation
Direct URL links between Accounting and Docushare Document and Utilization Review Multi-company installation

59 Questions? Questions? Thank you. “Share Template Automation VB Code”
“Share Report SQL Code” “Share Integration Installation and Configuration Instructions”


Download ppt "Project Management Systems - Document Control"

Similar presentations


Ads by Google