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: 464
Committed: Mon Oct 7 19:04:50 2013 UTC (12 years, 5 months ago) by nino.borges
Content type: text/x-python
Original Path: Python/NinoCode/Active_prgs/MCP/MCP_Console.py
File size: 36806 byte(s)
Log Message:
Moved CreateCaseStylePathFolders out of view edit console and into mcplib so that copyup could use it too. Added ability to copy up to also test if the user already selected new vs old style and it updates it in the db.

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