ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/ns_dev/Python/NinoCode/Active_prgs/MCP/Trunk/MCP_Console.py
Revision: 456
Committed: Wed Sep 11 19:22:31 2013 UTC (12 years, 6 months ago) by nino.borges
Content type: text/x-python
Original Path: Python/NinoCode/Active_prgs/MCP/MCP_Console.py
File size: 30990 byte(s)
Log Message:
Fixed a small bug in My Active Cases view where it wasnt refreshing the screen.

File Contents

# User Rev Content
1 ninoborges 8 """
2    
3     MCP_Console
4    
5     Created by
6     Emanuel Borges
7     08.28.2010
8    
9     This will be the interface to add, edit and archive cases.
10    
11     Should this work as one large GUI and you pick the below or read from argv and let you
12     just call it with what you want, making these three look like separate apps.
13    
14    
15     """
16    
17     import MCP_Lib,os,shutil,ConcordanceHelperTools, time,directorySize2
18    
19     class MainConsole:
20     def __init__(self):
21     ## Gather the case list
22    
23     print "connecting to matter tracking access db..."
24     ## Production version
25     self.accessDB = MCP_Lib.AccessDBConnection(r"\\chiads01\app\DS_CaseTrack\TPM_CaseTracking.mdb")
26     self.tPMName, self.tPMID, self.tPMOffice = MCP_Lib.GetTPMInfo()
27 nino.borges 189 #responsibleCases,casesDir = MCP_Lib.GetCaseList('',self.accessDB)
28 nino.borges 454 myCases, myActiveCases,officeCases, allCases,casesDir= MCP_Lib.GetCaseList('',self.accessDB)
29 ninoborges 8
30     ## Testing version
31     #self.accessDB = MCP_Lib.AccessDBConnection(r"W:\Manny\testing\TPM_CaseTracking.mdb")
32     #responsibleCases,casesDir = MCP_Lib.GetCaseList(r"C:\Documents and Settings\eborges\My Documents\My Dropbox\Dev\Python\NinoCode\Active_prgs\Concordance\MCP",self.accessDB)
33     #self.tPMName, self.tPMID, self.tPMOffice = MCP_Lib.GetTPMInfo(r"C:\Documents and Settings\eborges\My Documents\My Dropbox\Dev\Python\NinoCode\Active_prgs\Concordance\MCP")
34    
35     print "connected to DB."
36    
37 nino.borges 189 self.responsibleCasesList = myCases
38 ninoborges 8 self.casesDir = casesDir
39    
40    
41     def AddNewCase(self, caseName, clientMatter, chargable = False, reviewPlatform = "", responsibleProcessingVendor = "",
42     responsibleScanningVendor = "",responsibleHostingVendor = ""):
43 nino.borges 343 ## TODO: add a verification somehwere where it verify that the proposed name does not include characters that cant be used in a folder name.
44 ninoborges 8 ## Add the local folders The GUI should test that the clm is 10 digits and has hyphen.
45     template = os.path.join(self.casesDir,'_Template_')
46     new = os.path.join(self.casesDir, caseName + '_(%s)'%clientMatter)
47     if os.path.exists(new):
48     print "ERROR: This case already exists!!"
49     else:
50     #print template
51     #print new
52     os.mkdir(new)
53     for file in os.listdir(template):
54     shutil.copy2(os.path.join(template,file),new)
55     ## Check the H drive for the supplemental folders and the matter folder, only if they select Concordance.
56     self.SetCaseNameAndCLM(caseName,clientMatter)
57     self.AddCaseToAccessDB(caseName,clientMatter)
58    
59 nino.borges 343 def ChangeCaseName(self,caseName,newCaseName,newClientMatter):
60     """This method will allow for editing the case name and number. This is different than settign the casename"""
61     ## Test that there is only one entry for this clm in access.
62     clientMatter = caseName.split("_(")[1]
63     clientMatter = clientMatter[:-1]
64     clientMatter = clientMatter.replace('-','.')
65     accessCaseName = self.accessDB.GetCaseName(clientMatter)
66     localCasesPath = self.casesDir
67     if os.path.exists(os.path.join(localCasesPath,caseName)):
68     if clientMatter != newClientMatter:
69     if newCaseName != caseName.split("_("):
70     ## change both
71     self.accessDB.UpdateCaseName(clientMatter,newCaseName)
72     self.accessDB.UpdateClientMatterNum(clientMatter,newClientMatter)
73     os.rename(os.path.join(localCasesPath,caseName),os.path.join(localCasesPath,newCaseName + '_(%s)'%newClientMatter.replace(".","-")))
74     else:
75     ## change just client matter
76     self.accessDB.UpdateClientMatterNum(clientMatter,newClientMatter)
77     os.rename(os.path.join(localCasesPath,caseName),os.path.join(localCasesPath,caseName + '_(%s)'%newClientMatter.replace(".","-")))
78     elif newCaseName != caseName.split("_("):
79     ## change just the casename
80     self.accessDB.UpdateCaseName(clientMatter,newCaseName)
81     os.rename(os.path.join(localCasesPath,caseName),os.path.join(localCasesPath,newCaseName + '_(%s)'%clientMatter.replace(".","-")))
82    
83     ## verify that the proposed name does not include characters that cant be used in a folder name.
84     ## Change the name and or clm in access
85    
86     ## Test that it was changed in access
87     ## change the folder name in cases.
88     else:
89     ## That case dir cant be found. They can't change other's casenames.
90     err = 1
91    
92    
93     def AddCaseToAccessDB(self, caseName):
94 ninoborges 8 ## First test to see if it's already in the DB.
95     fullClientMatterList = self.accessDB.RetrieveAllCaseList()
96     clientMatter = clientMatter.replace("-",".")
97     if clientMatter in fullClientMatterList:
98     print "This client matter already exists in the database. Skipping."
99     else:
100     print "New client matter. Adding."
101     self.accessDB.AddNewCase(caseName, clientMatter, self.tPMName,self.tPMID,responsibleOffice = self.tPMOffice)
102     print "Added!"
103    
104     def EditCaseData(self,caseName,chargeableBool,respAttorney,respParalegal,respVendorTpl,revPlatform,respTPM,respOffice, caseStatus):
105     clientMatter = caseName.split("_(")[1]
106     clientMatter = clientMatter[:-1]
107     clientMatter = clientMatter.replace('-','.')
108     self.accessDB.UpdateChargable(clientMatter,chargeableBool)
109     self.accessDB.UpdateResponsibleAttorney(clientMatter,respAttorney)
110     self.accessDB.UpdateResponsibleParalegal(clientMatter,respParalegal)
111     self.accessDB.UpdateReviewPlatform(clientMatter,revPlatform)
112     self.accessDB.UpdateResponsibleTPM(clientMatter,respTPM)
113     self.accessDB.UpdatePrimaryOffice(clientMatter,respOffice)
114     self.accessDB.UpdateResponsibleVendors(clientMatter,respVendorTpl)
115     self.accessDB.UpdateCaseStatus(clientMatter, caseStatus)
116    
117     def GetCaseData(self, caseName):
118     #use this to get the data on the selected case, to populate your GUI
119     clientMatter = caseName.split("_(")[1]
120     clientMatter = clientMatter[:-1]
121     clientMatter = clientMatter.replace('-','.')
122     chargeableBool = self.accessDB.GetChargable(clientMatter)
123     respAttorney = self.accessDB.GetResponsibleAttorney(clientMatter)
124     respParalegal = self.accessDB.GetResponsibleParalegal(clientMatter)
125     respVendorTpl = self.accessDB.GetResponsibleVendorTpl(clientMatter)
126     revPlatform = self.accessDB.GetReviewPlatform(clientMatter)
127     respTPM = self.accessDB.GetResponsibleTPM(clientMatter)
128     respOffice = self.accessDB.GetPrimaryOffice(clientMatter)
129     caseStatus = self.accessDB.GetCaseStatus(clientMatter)
130 nino.borges 303 uploadCost = self.accessDB.GetUploadCostRate(clientMatter)
131     storageCost = self.accessDB.GetStorageCostRate(clientMatter)
132 nino.borges 321 disclosureLetterBool,disclosureLetterPath = self.accessDB.GetDisclosureLetter(clientMatter)
133     return (chargeableBool,respAttorney,respParalegal,respVendorTpl,revPlatform,respTPM,respOffice,caseStatus,uploadCost,storageCost,disclosureLetterBool)
134    
135     def GetPossibleProducedToEntities(self,caseName):
136     """Returns the possible produced to entities for a case"""
137     clientMatter = caseName.split("_(")[1]
138     clientMatter = clientMatter[:-1]
139     clientMatter = clientMatter.replace('-','.')
140     possibleProducedToEntities = self.accessDB.GetProducedToEntities(clientMatter)
141     return possibleProducedToEntities
142    
143     def GetPossibleProdReqByNames(self,caseName):
144     """Returns the possible requested by names for a case"""
145     clientMatter = caseName.split("_(")[1]
146     clientMatter = clientMatter[:-1]
147     clientMatter = clientMatter.replace('-','.')
148     possibleProdReqByNames = self.accessDB.GetProductionRequestedByNames(clientMatter)
149     return possibleProdReqByNames
150 ninoborges 8
151 nino.borges 321
152     def AddProductionEntry(self, CLM,prodID,prodProcessedDate,begBates,endBates,prodDocCount, prodPageCount, prodNotes, prodTo, prodMedia,prodSource,prodReqBy,prodSentDate,prodMediaPassword):
153 ninoborges 8 """This method adds one production entry to the case."""
154     errRpt = True
155     if CLM:
156     if prodID:
157 nino.borges 321 if prodProcessedDate:
158 ninoborges 8 if begBates:
159     if endBates:
160     if prodDocCount:
161     if prodPageCount:
162     if prodNotes:
163 nino.borges 321 self.accessDB.UpdateProductionDetail(CLM,prodID,prodProcessedDate,begBates,endBates,prodDocCount, prodPageCount, prodNotes, prodTo, prodMedia,prodSource,prodReqBy,prodSentDate,prodMediaPassword)
164 ninoborges 8 errRpt = False
165     return errRpt
166    
167     def AddDataUpload(self,CLM, reviewPlatform, reportSize):
168     """This method will add one case upload."""
169     ## TODO: one day change it so that copy up requst calls this instead
170     ## of it being internal to that prog.
171     epoch = str(int(time.time()))
172     self.accessDB.UpdateCaseUpload(CLM,reviewPlatform,{epoch:(time.strftime('%m/%d/%Y'),reportSize)})
173    
174     def RemoveDataUpload(self,CLM,UEPOCH):
175     """This method calls DeleteCaseUpload and removes just one case upload. """
176     err = self.accessDB.DeleteCaseUpload(CLM,UEPOCH)
177     if err:
178     print "ERROR: An Error occured and this value was not removed!"
179     else:
180     print "%s Removed"% UEPOCH
181    
182     def GetUploadData(self, caseName):
183     # Used to get upload data, on the selected case, to populate the upload dialog
184     clientMatter = caseName.split("_(")[1]
185     clientMatter = clientMatter[:-1]
186     clientMatter = clientMatter.replace('-','.')
187     uploadList = self.accessDB.RetrieveUploadsByCLM(clientMatter)
188     return uploadList
189    
190     def GetProductionData(self,caseName):
191     clientMatter = caseName.split("_(")[1]
192     clientMatter = clientMatter[:-1]
193     clientMatter = clientMatter.replace('-','.')
194 nino.borges 321 productionMatrix = self.accessDB.RetrieveProductionsByCLM(clientMatter)
195     return productionMatrix
196 ninoborges 8
197     def GetProductionTotal(self,productionList):
198     """Using the above productionList, this returns the total docs and pages produced"""
199     pgCountTotal = 0
200     docCountTotal = 0
201     for i in productionList:
202 nino.borges 321 pageCount = i[-7]
203     docCount = i[-8]
204 ninoborges 8 if 'None' in pageCount:
205     pass
206     else:
207     #print pageCount
208     pgCountTotal = pgCountTotal+int(pageCount)
209     if 'None' in pageCount:
210     pass
211     else:
212     #print docCount
213     docCountTotal = docCountTotal+int(docCount)
214     return pgCountTotal,docCountTotal
215    
216     def ExportProductionDataToExcel(self,CaseName,pathToCSV):
217     """Exports the production data to a csv file"""
218     productionList = self.GetProductionData(CaseName)
219     #print productionList
220     outputFile = open(pathToCSV,'w')
221 nino.borges 321 outputFile.write('Production ID,Production Completed Date,Production Sent Date,Start Bates,End Bates,Document Count,Page Count,Produced To,Requested By,Production Media,ProductionMediaPassword,Production Sources,Notes\n')
222 ninoborges 8 for i in productionList:
223     for x in i:
224     outputFile.write(x+",")
225     outputFile.write("\n")
226     outputFile.close()
227    
228     def GetUploadTotal(self,uploadList):
229     """ Using the above uploadList, this will return the total uploaded """
230     count = 0.
231     for i in uploadList:
232     size = i[-1]
233    
234     if 'None' in size:
235     pass
236     else:
237     rawSize = directorySize2.prettyToUnpretty_Filesize(size)
238     count = count + rawSize
239     prettySizeFinal = directorySize2.pretty_filesize2(count)
240     return prettySizeFinal
241    
242     def MakeCaseDormant(self, caseAndCLM):
243     """Moves the case to the Dormant folder"""
244 nino.borges 456 ## Dont do this, just hide from your view. Once archived, move off share.
245 ninoborges 8 print "Making %s case dormant..."
246     os.rename(os.path.join(self.casesDir,caseAndCLM),os.path.join(self.casesDir,os.path.join('zzzz_dormant_', caseAndCLM)))
247     print "Case has been archived."
248    
249    
250 nino.borges 158 def ViewCaseNotes(self,caseName,office):
251     """Trys to open the case notes file,in the case folder, for the active case, regardless who owns it."""
252     caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
253     clientMatter = caseName.split("_(")[1]
254     clientMatter = clientMatter[:-1]
255     if "." in clientMatter:
256     clientMatter = clientMatter.replace('.','-')
257     folderMatrix = {}
258     #caseFolderLocation = os.path.join(caseFolderLocation,case)
259     err = False
260     if caseFolderLocation:
261     if os.path.exists(caseFolderLocation):
262     for f in os.listdir(caseFolderLocation):
263     if "_(" in f:
264     folderClientMatter = f.split("_(")[1]
265     folderClientMatter = folderClientMatter[:-1]
266     folderMatrix[folderClientMatter] = f
267     try:
268     folderName = folderMatrix[clientMatter]
269     os.startfile(os.path.join(caseFolderLocation, folderName)+"/Gen_Notes.txt")
270     except:
271     err = True
272     else:
273     err = True
274     else:
275     print "A case folder for this case was not found."
276     err = True
277     return err
278    
279     def ViewProdSpec(self,caseName,office):
280     """Trys to open the prod spec file,in the case folder, for the active case, regardless who owns it."""
281     caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
282     clientMatter = caseName.split("_(")[1]
283     clientMatter = clientMatter[:-1]
284     if "." in clientMatter:
285     clientMatter = clientMatter.replace('.','-')
286     folderMatrix = {}
287     #caseFolderLocation = os.path.join(caseFolderLocation,case)
288     err = False
289     if caseFolderLocation:
290     if os.path.exists(caseFolderLocation):
291     for f in os.listdir(caseFolderLocation):
292     if "_(" in f:
293     folderClientMatter = f.split("_(")[1]
294     folderClientMatter = folderClientMatter[:-1]
295     folderMatrix[folderClientMatter] = f
296     try:
297     folderName = folderMatrix[clientMatter]
298     os.startfile(os.path.join(caseFolderLocation, folderName+"/Production_Spec.txt"))
299     except:
300     err = True
301     else:
302     err = True
303     else:
304     print "A case folder for this case was not found."
305     err = True
306     return err
307    
308 nino.borges 321 def CreateProductionReport(self,caseName,office):
309     """Creates a html production report in the altMediaPath folder"""
310     err = False
311 nino.borges 261 clientMatter = caseName.split("_(")[1]
312     clientMatter = clientMatter[:-1]
313     clientMatter = clientMatter.replace('-','.')
314     altMediaPath = self.accessDB.GetAlternateMediaPath(clientMatter)
315 nino.borges 321 productionMatrix = self.GetProductionData(caseName)
316     if os.path.exists(os.path.join(altMediaPath,'__MCP_Data')):
317     pass
318     else:
319     os.mkdir(os.path.join(altMediaPath,'__MCP_Data'))
320     reportFile = open(os.path.join(os.path.join(altMediaPath,'__MCP_Data'),'MCP_Production_Report.html'),'w')
321     reportFile.write('''<html>\n<head>\n <title>MCP: %s Production Report</title>\n <style type="text/css" media="screen">\n\n'''%caseName)
322     reportFile.write(r'''div#Rsidebar {
323     float: right;
324     width: 20%;
325     }
326     div#Lsidebar {
327     float: left;
328     width:20%;
329     height:380px;
330     }
331    
332     </style>''')
333     reportFile.write('''
334     <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
335     <meta name="author" content="Emanuel Borges">
336     </head>
337     <body>
338    
339     <h3><br>
340     </h3>
341     <center><h2>%s Production Report</h2></center>'''%caseName)
342     reportFile.write(r'''<center><hr width="40%"></center>''')
343     for k in productionMatrix.keys():
344     productionList = productionMatrix[k]
345     reportFile.write("<h4>%s Productions</h3>" % k)
346     reportFile.write('''<center><table border=1 cellspacing=0 cellpadding=5 width=1800>\n<tr><th>Production ID</th><th>Processed Date</th><th>Sent Date</th><th>Start Bates</th><th>End Bates</th><th>Document Count</th><th>Page Count</th><th>Requested By</th><th>Production Media</th><th>Media Password</th><th>Production Sources</th><th>Notes</th></tr>''')
347     for i in productionList:
348     reportFile.write("<tr>")
349     count = 1
350     for x in i:
351     if count == 8:
352     count = count + 1
353     else:
354     reportFile.write("<td>%s</td>"%x)
355     count = count +1
356     reportFile.write("</tr>")
357    
358     reportFile.write('</table></center>\n\n')
359     reportFile.write('''<div id="footer">
360     <p><span>&copy; 2012 <a href="#">Emanuel Borges</a></span><br />
361     Website automatically generated by the MCP program.</p></div>''')
362     reportFile.write('</body></html>\n')
363     reportFile.close()
364     return err
365    
366     def OpenAlternateMediaFolder(self,caseName,office,testOnly=False):
367     """Trys to open the Alternate media folder, for the active case, regardless who owns it.
368     If testOnly is set to True, it will only test that it exists and not open the folder."""
369     clientMatter = caseName.split("_(")[1]
370     clientMatter = clientMatter[:-1]
371     clientMatter = clientMatter.replace('-','.')
372     altMediaPath = self.accessDB.GetAlternateMediaPath(clientMatter)
373 nino.borges 261 err = False
374     if altMediaPath:
375     if os.path.exists(altMediaPath):
376 nino.borges 321 if testOnly:
377     pass
378     else:
379     os.startfile(altMediaPath)
380 nino.borges 261 else:
381     print "An alternate media folder for this case was not found."
382     err = True
383     else:
384     err = True
385     return err
386 nino.borges 265
387     def SetAlternateMediaFolder(self,caseName,altMediaPath):
388     """Sets the alternate Media Path"""
389     clientMatter = caseName.split("_(")[1]
390     clientMatter = clientMatter[:-1]
391     clientMatter = clientMatter.replace('-','.')
392     self.accessDB.UpdateAlternateMediaPath(clientMatter,altMediaPath)
393 nino.borges 261
394 nino.borges 269 def GetVendorFolders(self,caseName):
395 nino.borges 271 """Returns the current list of vendor folders, for one case"""
396 nino.borges 269 clientMatter = caseName.split("_(")[1]
397     clientMatter = clientMatter[:-1]
398     clientMatter = clientMatter.replace('-','.')
399     vendorFolders = self.accessDB.GetVendorFolderPath(clientMatter)
400 nino.borges 271 #print "V%s "%vendorFolders
401 nino.borges 269 return vendorFolders
402 nino.borges 271
403     def SetVendorFolders(self,caseName, vendorFolders):
404     """Sets the Vendor Folder"""
405     clientMatter = caseName.split("_(")[1]
406     clientMatter = clientMatter[:-1]
407     clientMatter = clientMatter.replace('-','.')
408     self.accessDB.UpdateVendorFolderPath(clientMatter,vendorFolders)
409    
410     def GetVendorFoldersList(self):
411     """Returns a list of all vendorFolders"""
412     ## Change this so that it actually grabs the current ones from ln. Dont know if I should grab from a table in access.
413     vendorFolderList = ["None"]
414     for n in range(1,61):
415     vendorFolderList.append("mwevendor%0*d"%(2,n))
416     return vendorFolderList
417 nino.borges 321
418     def GetDisclosureLetterData(self,caseName):
419     """Returns the the bool of if a case has a disclosure letter and if so the path."""
420     clientMatter = caseName.split("_(")[1]
421     clientMatter = clientMatter[:-1]
422     clientMatter = clientMatter.replace('-','.')
423     disclosureLetterSet, disclosureLetterPath = self.accessDB.GetDisclosureLetter(clientMatter)
424     return disclosureLetterSet, disclosureLetterPath
425    
426     def SetDisclosureLetterData(self,caseName,disclosureLetterPath):
427     """Sets the disclosure letter path and checks it as true in the database"""
428     clientMatter = caseName.split("_(")[1]
429     clientMatter = clientMatter[:-1]
430     clientMatter = clientMatter.replace('-','.')
431     self.accessDB.UpdateDisclosureLetter(clientMatter,True,disclosureLetterPath)
432    
433 nino.borges 262 def GetCasePathsData(self,caseName, office):
434     clientMatter = caseName.split("_(")[1]
435     clientMatter = clientMatter[:-1]
436     clientMatter = clientMatter.replace('-','.')
437     altMediaPath = self.accessDB.GetAlternateMediaPath(clientMatter)
438     caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
439     caseFolderLocation = os.path.join(caseFolderLocation,caseName)
440     return altMediaPath, caseFolderLocation
441 nino.borges 303
442     def SetUploadAndStorageCosts(self, caseName,uploadCost,storageCost):
443     clientMatter = caseName.split("_(")[1]
444     clientMatter = clientMatter[:-1]
445     clientMatter = clientMatter.replace('-','.')
446 nino.borges 321 if uploadCost:
447     self.accessDB.UpdateUploadCostRate(clientMatter,uploadCost)
448     if storageCost:
449     self.accessDB.UpdateStorageCostRate(clientMatter,storageCost)
450 nino.borges 262
451 ninoborges 8 def OpenCaseFolder(self,caseName,office):
452     """Trys to open the case folder for the active case, regardless who owns it."""
453     caseFolderLocation = MCP_Lib.GetOtherCaseFolder(office)
454     clientMatter = caseName.split("_(")[1]
455     clientMatter = clientMatter[:-1]
456     if "." in clientMatter:
457     clientMatter = clientMatter.replace('.','-')
458     folderMatrix = {}
459     #caseFolderLocation = os.path.join(caseFolderLocation,case)
460     err = False
461     if caseFolderLocation:
462     if os.path.exists(caseFolderLocation):
463     for f in os.listdir(caseFolderLocation):
464     if "_(" in f:
465     folderClientMatter = f.split("_(")[1]
466     folderClientMatter = folderClientMatter[:-1]
467     folderMatrix[folderClientMatter] = f
468     try:
469     folderName = folderMatrix[clientMatter]
470     os.startfile(os.path.join(caseFolderLocation, folderName))
471     except:
472     err = True
473     else:
474     err = True
475     else:
476     print "A case folder for this case was not found."
477     err = True
478     return err
479    
480    
481     def SetCaseNameAndCLM(self, newCaseName, newClientMatterNumber):
482     """Used when setting up a new case. Should have both or nothing"""
483     self.caseName = newCaseName
484     self.clientMatter = newClientMatterNumber
485     #print self.clientMatter
486    
487     def SetChargableCase(self, chargBool):
488     """sets or clears the chargable case settings"""
489     pass
490     def SetResponsibleVendor(self, vendorInfo):
491     """Sets the vendor name that is responsible for the case"""
492     pass
493     def SetReviewPlatform(self, reviewPlatform):
494     """Sets the review platform chosen for this case"""
495     if reviewPlatform == "Concordance":
496     print "Concordance selected. Creating DIS directories..."
497     hDrivePath = ConcordanceHelperTools.ParseClientMatter(self.clientMatter)
498     os.mkdir(hDrivePath)
499     print "Matter folder created."
500     os.mkdir(os.path.join(hDrivePath,'Match'))
501     os.mkdir(os.path.join(hDrivePath,'Tag_Databases'))
502     print "Supplemental folders created."
503     print "DIS directories done!"
504    
505 nino.borges 321 def GetDatabaseList(self,caseName):
506     """Returns the list of databases in the database list file."""
507     return ['datbase1','database2','database3']
508 ninoborges 8
509     def SyncWithAccessDB(self,case = 'ALL'):
510     """Syncs your cases with the access database. This might only get run once when you first install
511     the program though..."""
512     ## So this syncs 'your' databases only. even though you are looking at a list of eeryone's databases
513     ## it will only sync yours. even if you did an upload for another tpm, that wouldnt get synced unles
514     ## the owner did a sync all. for 2 way sync to work, you should check, in access, that they have the case name
515     ## (with no funky characters) populated, before they run this for the first time.
516     if case == 'ALL':
517     ## verify that all your cases are up there, if not add it. but have support for cases where is should be
518     ## yours but is assigned to someone else...
519     fullClientMatterList = self.accessDB.RetrieveAllCaseList()
520     myAccessClientMatterList = self.accessDB.RetrieveMyCaseList(self.tPMID)
521     myLocalClientMatterList = []
522    
523     ## Sync cases from my local to access
524     for case in self.responsibleCasesList:
525     localCaseName,clientMatter = case.split("_(")
526     clientMatter = clientMatter.replace(")","")
527     clientMatter = clientMatter.replace("-",".")
528     myLocalClientMatterList.append(clientMatter)
529     for clm in myLocalClientMatterList:
530     if clm in myAccessClientMatterList:
531     print "%s exists"% clm
532     elif clm in fullClientMatterList:
533     print "%s cant be added to your cases because it's owned by someone else..."% clm
534     else:
535     print "%s does not exist in the database. Adding it..."% clm
536     self.AddCaseToAccessDB(localCaseName,clientMatter)
537    
538     ## Sync cases from Access to my local
539    
540    
541     uploadReportMatrix = {}
542     for caseName in self.responsibleCasesList:
543     print "now processing %s"% caseName
544     casePath = os.path.join(self.casesDir,caseName)
545     if os.path.exists(os.path.join(casePath,"UploadReport.txt")):
546     print "yup"
547     caseUploadContents = open(os.path.join(casePath,"UploadReport.txt")).readlines()
548     clientMatter = caseName.split("_(")[1]
549     clientMatter = clientMatter.replace(")","")
550     clientMatter = clientMatter.replace("-",".")
551     for i in caseUploadContents:
552     i = i.replace("\n","")
553     i = i.replace(" | ","|")
554     try:
555     uploadReportMatrix[clientMatter].append(("%s"%i.split("|")[0],"%s"%i.split("|")[1],"%s"%i.split("|")[2],"%s"%i.split("|")[3]))
556     except:
557     uploadReportMatrix[clientMatter] = [("%s"%i.split("|")[0],"%s"%i.split("|")[1],"%s"%i.split("|")[2],"%s"%i.split("|")[3])]
558     #print uploadReportMatrix
559    
560     accessMyCaseUploads = self.accessDB.RetrieveMyCaseUploads('09756')
561     for x in uploadReportMatrix.keys():
562     localCaseUploadList = uploadReportMatrix[x]
563     tempMatrix = {}
564     try:
565     accessCaseUploadList = accessMyCaseUploads[x]
566     #print accessCaseUploadList
567     for y in localCaseUploadList:
568     epoch = y[0]
569     if int(epoch) > 1298462400:
570     #print epoch
571     reviewPlatform = y[1]
572     reportSize = y[3]
573     #print "."
574     #print accessCaseUploadList
575     if epoch in accessCaseUploadList:
576     print "%s, in the %s case, is already in there, skipping."%(y,x)
577     else:
578     print "%s, in the %s case, is missing. Will be added..."%(y,x)
579     date = y[2]
580     date = "%s/%s/%s"%(date[4:6],date[6:],date[:4])
581    
582     self.accessDB.UpdateCaseUpload(x,reviewPlatform,{epoch:(date,reportSize)})
583     #tempMatrix[epoch] = [platform,(date,size)]
584     else:
585     #print "This entry is pre cutover"
586     pass
587     except KeyError:
588     print "nothing for this one"
589     for z in localCaseUploadList:
590     print "%s, in the %s case, is missing. Will be added..."%(z,x)
591     date = z[0]
592     date = "%s/%s/%s"%(date[4:6],date[6:],date[:4])
593     #try:
594     # tempMatrix[date].append(z[1])
595     #except:
596     # tempMatrix[date] = [z[1]]
597     #print tempMatrix
598     #if tempMatrix:
599     # #print tempMatrix
600     # self.accessDB.UpdateCaseUpload(x,'Concordance DIS', tempMatrix)
601     #pass
602    
603    
604     #print myLocalClientMatterList
605     ## verify that all of your uploads are up there, if not, add it.
606     self.accessDB.CloseAccessConnection()
607    
608     else:
609     fullClientMatterList = self.accessDB.RetrieveAllCaseList()
610     myAccessClientMatterList = self.accessDB.RetrieveMyCaseList(self.tPMID)
611    
612